Desarrollo web integral
Los desarrolladores web full stack siempre están en demanda, ¿tienes las habilidades necesarias? En estas páginas aprenderás a diseñar sitios web con CSS, estructurarlos con HTML y añadir interactividad con JavaScript. Dominarás los diferentes protocolos, formatos y arquitecturas web, y verás cómo y cuándo utilizar API, PHP, servicios web y otras herramientas y lenguajes. Con información sobre cómo probar, implementar, proteger y optimizar aplicaciones web, obtendrás todas las instrucciones que necesitas sobre front-end y back-end.
- Tu resumen completo sobre el desarrollo web full stack, desde el diseño y la interactividad hasta la seguridad y las operaciones.
- Aprende sobre herramientas frontend, incluyendo HTML, CSS, JavaScript, API y mucho más.
- Trabajar con tecnologías de backend, incluyendo Node.js, PHP, servicios web y bases de datos.
Aprenderás sobre:
- Conceptos básicos sobre la web:
Obtenga una visión general de cómo funciona el desarrollo web y aprenda términos como URL, HTTP, HTML, CSS, JavaScript y DNS.
- Diseño y creación de páginas web:
¡Domina el desarrollo frontend! Descubre los elementos clave del HTML y repasa los marcos CSS, las guías de estilo y la arquitectura. Aprende a utilizar variables, constantes, tipos de datos y operaciones con JavaScript, ¡y mucho más!
- Programación de backend:
Explora las arquitecturas web más comunes y comprende los lenguajes de programación que hay detrás de cada sitio web moderno. Prueba, protege y optimiza tus aplicaciones web.
Aspectos Destacados:
- Programación frontend
- Programación de backend
- HTML
- CSS
- JavaScript
- API
- Aplicaciones de una sola página
- Arquitectura web
- Pruebas
- Implementación
- Seguridad
- Optimización
Ver Tabla de Contenidos Completa
- Prólogo
- Prefacio
- Público objetivo
- Estructura del libro
- ¿Cómo debo leer este libro?
- Agradecimientos
- 1 Comprensión de los conceptos básicos
- 1.1 Terminología
- 1.1.1 Cliente y servidor
- 1.1.2 Relación entre URL, dominios y direcciones IP
- 1.2 Estructura de las aplicaciones web
- 1.2.1 Creación de páginas web con HTML
- 1.2.2 Diseño de páginas web con CSS
- 1.2.3 Creación de páginas web interactivas con JavaScript
- 1.2.4 Creación de páginas web dinámicas mediante lógica del lado del servidor
- 1.3 Desarrollo Full Stack
- 1.3.1 ¿Qué son las pilas de software?
- 1.3.2 ¿Qué tipos de pilas existen?
- 1.3.3 ¿Qué es un desarrollador full stack?
- 1.3.4 Estructura de este libro
- 1.4 Herramientas para desarrolladores Full Stack
- 1.4.1 Editores
- 1.4.2 Entornos de desarrollo
- 1.4.3 Navegadores
- 1.5 Resumen y perspectivas
- 1.5.1 Puntos clave
- 1.5.2 Perspectivas
- 2 Estructuración de páginas web con HTML
- 2.1 Introducción
- 2.1.1 Versiones
- 2.1.2 Uso de elementos y atributos
- 2.1.3 Guardar páginas web como documentos HTML
- 2.2 Uso de los elementos más importantes
- 2.2.1 Uso de encabezados, párrafos y otros formatos de texto
- 2.2.2 Creación de listas
- 2.2.3 Definición de enlaces
- 2.2.4 Incluir imágenes
- 2.2.5 Estructuración de datos en tablas
- 2.2.6 Definición de formularios
- 2.2.7 Más información
- 2.3 Resumen y perspectivas
- 2.3.1 Puntos clave
- 2.3.2 Lecturas recomendadas
- 2.3.3 Perspectivas
- 3 Diseño de páginas web con CSS
- 3.1 Introducción
- 3.1.1 El principio de CSS
- 3.1.2 Incluir CSS en HTML
- 3.1.3 Selectores
- 3.1.4 Cascada y especificidad
- 3.1.5 Herencia
- 3.2 Aplicación de colores y formato de texto
- 3.2.1 Definición del color del texto y del color de fondo
- 3.2.2 Diseño de textos
- 3.3 Listas y tablas
- 3.3.1 Diseño de listas
- 3.3.2 Diseño de tablas
- 3.4 Comprensión de los diferentes sistemas de diseño
- 3.4.1 Principios básicos del posicionamiento con CSS
- 3.4.2 Diseño flotante
- 3.4.3 Diseño Flexbox
- 3.4.4 Diseño de cuadrícula
- 3.5 Resumen y perspectivas
- 3.5.1 Puntos clave
- 3.5.2 Lecturas recomendadas
- 3.5.3 Perspectivas
- 4 Creación de páginas web interactivas con JavaScript
- 4.1 Introducción
- 4.1.1 Incluir JavaScript
- 4.1.2 Visualización de cuadros de diálogo
- 4.1.3 Uso de la consola para desarrolladores
- 4.1.4 Introducción a la programación
- 4.2 Variables, constantes, tipos de datos y operadores
- 4.2.1 Definición de variables
- 4.2.2 Definición de constantes
- 4.2.3 Uso de tipos de datos
- 4.2.4 Uso de operadores
- 4.3 Uso de estructuras de control
- 4.3.1 Uso de sentencias condicionales y ramificaciones
- 4.3.2 Uso de bucles
- 4.4 Funciones y manejo de errores
- 4.4.1 Definición y llamada de funciones
- 4.4.2 Pasando y analizando parámetros de función
- 4.4.3 Definición de valores de retorno
- 4.4.4 Respuesta a los errores
- 4.5 Objetos y matrices
- 4.5.1 Uso de objetos
- 4.5.2 Uso de matrices
- 4.6 Resumen y perspectivas
- 4.6.1 Puntos clave
- 4.6.2 Lecturas recomendadas
- 4.6.3 Perspectivas
- 5 Uso de protocolos web
- 5.1 Protocolo de Transferencia de Hipertexto
- 5.1.1 Solicitudes y respuestas
- 5.1.2 Estructura de las solicitudes HTTP
- 5.1.3 Estructura de las respuestas HTTP
- 5.1.4 Encabezado
- 5.1.5 Métodos
- 5.1.6 Códigos de estado
- 5.1.7 Tipos MIME
- 5.1.8 Cookies
- 5.1.9 Ejecutar HTTP desde la línea de comandos
- 5.2 Comunicación bidireccional
- 5.2.1 Sondeo y sondeo prolongado
- 5.2.2 Eventos enviados por el servidor
- 5.2.3 WebSockets
- 5.3 Resumen y perspectivas
- 5.3.1 Puntos clave
- 5.3.2 Lecturas recomendadas
- 5.3.3 Perspectivas
- 6 Uso de formatos web
- 6.1 Formatos de datos
- 6.1.1 CSV
- 6.1.2 XML
- 6.1.3 JSON
- 6.2 Formatos de imagen
- 6.2.1 Fotografías en formato JPG
- 6.2.2 Gráficos y animaciones en formato GIF
- 6.2.3 Gráficos en formato PNG
- 6.2.4 Gráficos vectoriales en formato SVG
- 6.2.5 Todo mejora con el formato WebP
- 6.2.6 Comparación de formatos de imagen
- 6.2.7 Programas para el procesamiento de imágenes
- 6.3 Formatos de video y audio
- 6.3.1 Formatos de video
- 6.3.2 Formatos de audio
- 6.4 Resumen y perspectivas
- 6.4.1 Puntos clave
- 6.4.2 Lecturas recomendadas
- 6.4.3 Perspectivas
- 7 Uso de API web
- 7.1 Cambiar páginas web dinámicamente utilizando la API DOM
- 7.1.1 El modelo de objetos de documento
- 7.1.2 Los diferentes tipos de nodos
- 7.1.3 Selección de elementos
- 7.1.4 Modificación de elementos
- 7.1.5 Creación, adición y eliminación de elementos
- 7.1.6 Ejemplo práctico: Creación dinámica de una tabla
- 7.2 Carga de datos de forma sincrónica mediante Ajax y la API Fetch
- 7.2.1 Comunicación sincrónica frente a comunicación asincrónica
- 7.2.2 Carga de datos mediante Ajax
- 7.2.3 Carga de datos mediante la API Fetch
- 7.3 Otras API web
- 7.3.1 Descripción general de las API web
- 7.3.2 Compatibilidad de los navegadores con las API web
- 7.4 Resumen y perspectivas
- 7.4.1 Puntos clave
- 7.4.2 Lecturas recomendadas
- 7.4.3 Perspectivas
- 8 Optimización de sitios web para mejorar la accesibilidad
- 8.1 Introducción
- 8.1.1 Introducción a la accesibilidad
- 8.1.2 Grupos de usuarios y tecnologías de apoyo
- 8.1.3 Directrices de accesibilidad al contenido web
- 8.2 Hacer accesibles los componentes de un sitio web
- 8.2.1 Estructuración semántica de las páginas web
- 8.2.2 Uso correcto de los encabezados
- 8.2.3 Hacer que los formularios sean accesibles
- 8.2.4 Hacer que las tablas sean accesibles
- 8.2.5 Hacer que las imágenes sean accesibles
- 8.2.6 Hacer que los enlaces sean accesibles
- 8.2.7 Aplicaciones de Internet enriquecidas accesibles
- 8.2.8 Varios
- 8.3 Pruebas de accesibilidad
- 8.3.1 Tipos de pruebas
- 8.3.2 Herramientas para realizar pruebas
- 8.4 Resumen y perspectivas
- 8.4.1 Puntos clave
- 8.4.2 Lecturas recomendadas
- 8.4.3 Perspectivas
- 9 Simplificar CSS con preprocesadores CSS
- 9.1 Introducción
- 9.1.1 Cómo funcionan los preprocesadores CSS
- 9.1.2 Características de los preprocesadores CSS
- 9.1.3 Sass, Less y Stylus
- 9.2 Uso de Sass
- 9.2.1 Instalación de Sass
- 9.2.2 Compilación de archivos Sass a CSS
- 9.2.3 Uso de variables
- 9.2.4 Uso de operadores
- 9.2.5 Uso de ramas
- 9.2.6 Uso de bucles
- 9.2.7 Uso de funciones
- 9.2.8 Implementación de funciones personalizadas
- 9.2.9 Reglas de anidación
- 9.2.10 Uso de herencia y mixins
- 9.3 Resumen y perspectivas
- 9.3.1 Puntos clave
- 9.3.2 Lecturas recomendadas
- 9.3.3 Perspectivas
- 10 Implementación de aplicaciones de una sola página
- 10.1 Introducción
- 10.2 Configuración
- 10.3 Componentes: los bloques de construcción de una aplicación React
- 10.3.1 Estado: el estado local de un componente
- 10.3.2 El ciclo de vida de un componente
- 10.4 Componentes de estilo
- 10.4.1 Estilo en línea
- 10.4.2 Clases CSS y hojas de estilo externas
- 10.4.3 Descripción general de otras opciones de estilo
- 10.5 Jerarquías de componentes
- 10.6 Formularios
- 10.7 La API Context
- 10.8 Enrutamiento
- 10.9 Resumen y perspectivas
- 10.9.1 Puntos clave
- 10.9.2 Lecturas recomendadas
- 10.9.3 Perspectivas
- 11 Implementación de aplicaciones móviles
- 11.1 Los diferentes tipos de aplicaciones móviles
- 11.1.1 Aplicaciones nativas
- 11.1.2 Aplicaciones web móviles
- 11.1.3 Aplicaciones híbridas
- 11.1.4 Comparación de los diferentes enfoques
- 11.2 Diseño adaptable
- 11.2.1 Introducción: ¿Qué es el diseño adaptable?
- 11.2.2 Ventanas gráficas
- 11.2.3 Consultas de medios
- 11.2.4 Diseños flexibles
- 11.3 Desarrollo multiplataforma con React Native
- 11.3.1 El principio de React Native
- 11.3.2 Instalación e inicialización del proyecto
- 11.3.3 Inicio de la aplicación
- 11.3.4 La estructura básica de una aplicación React Native
- 11.3.5 Componentes de la interfaz de usuario
- 11.3.6 Creación y publicación de aplicaciones
- 11.4 Resumen y perspectivas
- 11.4.1 Puntos clave
- 11.4.2 Lecturas recomendadas
- 11.4.3 Perspectivas
- 12 Comprensión y uso de las arquitecturas web
- 12.1 Arquitecturas en capas
- 12.1.1 Estructura básica de las arquitecturas en capas
- 12.1.2 Arquitectura cliente-servidor (arquitectura de dos niveles)
- 12.1.3 Arquitectura multinivel
- 12.2 Monolitos y arquitecturas distribuidas
- 12.2.1 Arquitectura monolítica
- 12.2.2 Arquitectura orientada a servicios
- 12.2.3 Arquitectura de microservicios
- 12.2.4 Arquitectura basada en componentes
- 12.2.5 Arquitectura de microfrontends
- 12.2.6 Arquitectura de mensajería
- 12.2.7 Arquitectura de servicios web
- 12.3 Arquitecturas MV*
- 12.3.1 Modelo-Vista-Controlador
- 12.3.2 Modelo-Vista-Presentador
- 12.3.3 Modelo-Vista-Modelo de vista
- 12.4 Resumen y perspectivas
- 12.4.1 Puntos clave
- 12.4.2 Lecturas recomendadas
- 12.4.3 Perspectivas
- 13 Uso de lenguajes de programación en el lado del servidor
- 13.1 Tipos de lenguajes de programación
- 13.1.1 Lenguajes de programación por grado de abstracción
- 13.1.2 Lenguajes de programación compilados e interpretados
- 13.2 Paradigmas de programación
- 13.2.1 Programación imperativa y declarativa
- 13.2.2 Programación orientada a objetos
- 13.2.3 Programación funcional
- 13.3 ¿Cuáles son los lenguajes de programación?
- 13.3.1 Clasificación de los lenguajes de programación
- 13.3.2 ¿Qué lenguaje de programación deberías aprender?
- 13.3.3 Pero ahora en serio: ¿qué lenguaje de programación deberías aprender?
- 13.4 Resumen y perspectivas
- 13.4.1 Puntos clave
- 13.4.2 Lecturas recomendadas
- 13.4.3 Perspectivas
- 14 Uso de JavaScript en el lado del servidor
- 14.1 JavaScript en Node.js
- 14.1.1 Arquitectura de Node.js
- 14.1.2 Un primer programa
- 14.1.3 Administración de paquetes
- 14.2 Uso de los módulos integrados
- 14.2.1 Lectura de archivos
- 14.2.2 Escribir archivos
- 14.2.3 Eliminación de archivos
- 14.3 Implementación de un servidor web
- 14.3.1 Preparativos
- 14.3.2 Proporcionar archivos estáticos
- 14.3.3 Uso del marco web Express.js
- 14.3.4 Procesamiento de datos de formularios
- 14.4 Resumen y perspectivas
- 14.4.1 Puntos clave
- 14.4.2 Lecturas recomendadas
- 14.4.3 Perspectivas
- 15 Uso del lenguaje PHP
- 15.1 Introducción al lenguaje PHP
- 15.2 Instalación local de PHP y del servidor web
- 15.3 Variables, tipos de datos y operadores
- 15.3.1 Uso de variables
- 15.3.2 Uso de constantes
- 15.3.3 Uso de operadores
- 15.4 Uso de estructuras de control
- 15.4.1 Instrucciones condicionales
- 15.4.2 Bucles
- 15.5 Funciones y manejo de errores
- 15.5.1 Definición de funciones
- 15.5.2 Parámetros de función
- 15.5.3 Definición de valores de retorno
- 15.5.4 Uso de tipos de datos
- 15.5.5 Funciones anónimas
- 15.5.6 Declaración de funciones variables
- 15.5.7 Funciones flecha
- 15.5.8 Respuesta a los errores
- 15.6 Uso de clases y objetos
- 15.6.1 Clases de escritura
- 15.6.2 Creación de objetos
- 15.6.3 Constantes de clase
- 15.6.4 Visibilidad
- 15.6.5 Herencia
- 15.6.6 Abstracción de clases
- 15.6.7 Más funciones
- 15.7 Desarrollo de sitios web dinámicos con PHP
- 15.7.1 Creación y preparación de un formulario
- 15.7.2 Recepción de datos de formularios
- 15.7.3 Verificación de los datos del formulario
- 15.8 Resumen y perspectivas
- 15.8.1 Puntos clave
- 15.8.2 Lecturas recomendadas
- 15.8.3 Perspectivas
- 16 Implementación de servicios web
- 16.1 Introducción
- 16.2 SOAP
- 16.2.1 El flujo de trabajo con SOAP
- 16.2.2 Descripción de los servicios web con WSDL
- 16.2.3 Estructura de los mensajes SOAP
- 16.2.4 Conclusión
- 16.3 DESCANSO
- 16.3.1 El flujo de trabajo con REST
- 16.3.2 Los principios de REST
- 16.3.3 Implementación de una API REST
- 16.3.4 Llamada a una API REST
- 16.4 GraphQL
- 16.4.1 Las desventajas de REST
- 16.4.2 El flujo de trabajo de GraphQL
- 16.5 Resumen y perspectivas
- 16.5.1 Puntos clave
- 16.5.2 Lecturas recomendadas
- 16.5.3 Perspectivas
- 17 Almacenamiento de datos en bases de datos
- 17.1 Bases de datos relacionales
- 17.1.1 La funcionalidad de las bases de datos relacionales
- 17.1.2 El lenguaje SQL
- 17.1.3 Ejemplo real: uso de bases de datos relacionales en Node.js
- 17.1.4 Asignaciones objeto-relacionales
- 17.2 Bases de datos no relacionales
- 17.2.1 Bases de datos relacionales frente a no relacionales
- 17.2.2 La funcionalidad de las bases de datos no relacionales
- 17.2.3 Bases de datos clave-valor
- 17.2.4 Bases de datos orientadas a documentos
- 17.2.5 Bases de datos gráficas
- 17.2.6 Bases de datos orientadas a columnas
- 17.3 Resumen y perspectivas
- 17.3.1 Puntos clave
- 17.3.2 Lecturas recomendadas
- 17.3.3 Perspectivas
- 18 Pruebas de aplicaciones web
- 18.1 Pruebas automatizadas
- 18.1.1 Introducción
- 18.1.2 Tipos de pruebas
- 18.1.3 Desarrollo basado en pruebas
- 18.1.4 Ejecución de pruebas automatizadas en JavaScript
- 18.2 Cobertura de pruebas
- 18.2.1 Introducción
- 18.2.2 Determinación de la cobertura de pruebas en JavaScript
- 18.3 Dobles de prueba
- 18.3.1 El problema de las dependencias
- 18.3.2 Sustitución de dependencias por dobles de prueba
- 18.3.3 Espías
- 18.3.4 Stubs
- 18.3.5 Objetos simulados
- 18.4 Resumen y perspectivas
- 18.4.1 Puntos clave
- 18.4.2 Lecturas recomendadas
- 18.4.3 Perspectivas
- 19 Implementación y alojamiento de aplicaciones web
- 19.1 Introducción
- 19.1.1 Creación, implementación y alojamiento
- 19.1.2 Tipos de implementación
- 19.1.3 Tipos de alojamiento
- 19.1.4 Requisitos para servidores
- 19.2 Administración de contenedores
- 19.2.1 Docker
- 19.2.2 Ejemplo real: empaquetar una aplicación web con Docker
- 19.2.3 Número de imágenes de Docker
- 19.2.4 Docker Compose
- 19.3 Resumen y perspectivas
- 19.3.1 Puntos clave
- 19.3.2 Lecturas recomendadas
- 19.3.3 Perspectivas
- 20 Protección de aplicaciones web
- 20.1 Vulnerabilidades
- 20.1.1 Proyecto de Seguridad de Aplicaciones Web Abiertas
- 20.1.2 Inyección
- 20.1.3 Autenticación defectuosa
- 20.1.4 Exposición de datos sensibles
- 20.1.5 Entidades externas XML
- 20.1.6 Control de acceso defectuoso
- 20.1.7 Configuración de seguridad incorrecta
- 20.1.8 Scripting entre sitios
- 20.1.9 Deserialización insegura
- 20.1.10 Uso de componentes con vulnerabilidades conocidas
- 20.1.11 Insuficiencia en el registro y la supervisión
- 20.1.12 Perspectivas
- 20.2 Cifrado y criptografía
- 20.2.1 Criptografía simétrica
- 20.2.2 Criptografía asimétrica
- 20.2.3 SSL, TLS y HTTPS
- 20.3 Políticas de mismo origen, políticas de seguridad de contenido y uso compartido de recursos entre orígenes
- 20.3.1 Política del mismo origen
- 20.3.2 Intercambio de recursos entre orígenes
- 20.3.3 Política de seguridad de contenidos
- 20.4 Autenticación
- 20.4.1 Autenticación básica
- 20.4.2 Autenticación basada en sesión
- 20.4.3 Autenticación basada en tokens
- 20.5 Resumen y perspectivas
- 20.5.1 Puntos clave
- 20.5.2 Lecturas recomendadas
- 20.5.3 Perspectivas
- 21 Optimización del rendimiento de las aplicaciones web
- 21.1 Introducción
- 21.1.1 ¿Qué se debe optimizar y por qué?
- 21.1.2 ¿Cómo se puede medir el rendimiento?
- 21.1.3 ¿Qué herramientas hay disponibles para medir el rendimiento?
- 21.2 Opciones para la optimización
- 21.2.1 Optimización de los tiempos de conexión
- 21.2.2 Uso de una caché del lado del servidor
- 21.2.3 Optimización de imágenes
- 21.2.4 Uso de una caché del lado del cliente
- 21.2.5 Minimizando el código
- 21.2.6 Comprimir archivos
- 21.2.7 Carga diferida: carga de datos solo cuando es necesario
- 21.2.8 Precarga de datos
- 21.3 Resumen y perspectivas
- 21.3.1 Puntos clave
- 21.3.2 Lecturas recomendadas
- 21.3.3 Perspectivas
- 22 Organización y gestión de proyectos web
- 22.1 Tipos de sistemas de control de versiones
- 22.1.1 Sistemas de control de versiones centralizados
- 22.1.2 Sistemas de control de versiones descentralizados
- 22.2 El sistema de control de versiones Git
- 22.2.1 Cómo almacena los datos Git
- 22.2.2 Las diferentes áreas de Git
- 22.2.3 Instalación
- 22.2.4 Creación de un nuevo repositorio Git
- 22.2.5 Transferencia de cambios al área de ensayo
- 22.2.6 Confirmar cambios en el repositorio local
- 22.2.7 Confirmar cambios en el repositorio remoto
- 22.2.8 Transferencia de cambios desde el repositorio remoto
- 22.2.9 Trabajar en una nueva sucursal
- 22.2.10 Transferencia de cambios desde una rama
- 22.3 Resumen y perspectivas
- 22.3.1 Puntos clave
- 22.3.2 Lecturas recomendadas
- 22.3.3 Perspectivas
- 23 Gestión de proyectos web
- 23.1 Gestión de proyectos clásica frente a gestión de proyectos ágil
- 23.1.1 Gestión clásica de proyectos
- 23.1.2 Gestión ágil de proyectos
- 23.2 Gestión ágil de proyectos basada en Scrum
- 23.2.1 El flujo de trabajo de Scrum
- 23.2.2 Las funciones de Scrum
- 23.2.3 Eventos en Scrum
- 23.2.4 Artefactos en Scrum
- 23.3 Resumen y perspectivas
- 23.3.1 Puntos clave
- 23.3.2 Lecturas recomendadas
- 23.3.3 Perspectivas
- Anexos
- Un HTTP
- A.1 Códigos de estado HTTP
- A.2 Tipos MIME
- A.3 Encabezados
- Elementos HTML B
- B.1 HTML y metadatos
- B.2 Áreas de página
- B.3 Agrupación de contenidos
- B.4 Texto
- B.5 Cambios en el documento
- B.6 Contenido integrado
- B.7 Tablas
- B.8 Formularios
- B.9 Scripts
- Herramientas C y referencias de comandos
- C.1 Node.js
- C.2 Herramientas de prueba
- C.3 Referencia de comandos de Git
- C.4 Referencia de comandos de Docker
- C.5 Referencia de comandos de Docker Compose
- D Conclusión
- E El autor
- Índice
Full Stack Web Development
Full stack web developers are always in demand—do you have the skillset? Between these pages you’ll learn to design websites with CSS, structure them with HTML, and add interactivity with JavaScript. You’ll master the different web protocols, formats, and architectures and see how and when to use APIs, PHP, web services, and other tools and languages. With information on testing, deploying, securing, and optimizing web applications, you’ll get the full frontend and backend instructions you need!
- Your all-in-one overview of full stack web development, from design and interactivity to security and operations
- Learn about frontend tools, including HTML, CSS, JavaScript, APIs, and more
- Work with backend technologies, including Node.js, PHP, web services, and databases
You'll learn about:
- Web Basics:
Get an overview of how web development works and learn about terms like URL, HTTP, HTML, CSS, JavaScript, and DNS.
- Webpage Design and Creation:
Master frontend development! Discover the key elements of HTML and walk through CSS frameworks, style guides, and architecture. See how to use variables, constants, data types, and operations with JavaScript—and much more!
- Backend Programming:
Walk through common web architectures and understand the programming languages behind every modern website. Test, secure, and optimize your web applications.
Key Highlights:
- Frontend programming
- Backend programming
- HTML
- CSS
- JavaScript
- APIs
- Single-page applications
- Web architecture
- Testing
- Deployment
- Security
- Optimization
View Full Table of Contents
- Foreword
- Preface
- Intended Audience
- Structure of the Book
- How Should I Read This Book?
- Acknowledgments
- 1 Understanding the Basics
- 1.1 Terminology
- 1.1.1 Client and Server
- 1.1.2 Relationship between URLs, Domains, and IP Addresses
- 1.2 Structure of Web Applications
- 1.2.1 Creating Web Pages Using HTML
- 1.2.2 Designing Web Pages with CSS
- 1.2.3 Making Web Pages Interactive with JavaScript
- 1.2.4 Making Web Pages Dynamic Using Server-Side Logic
- 1.3 Full Stack Development
- 1.3.1 What Are Software Stacks?
- 1.3.2 What Types of Stacks Exist?
- 1.3.3 What Is a Full Stack Developer?
- 1.3.4 Structure of This Book
- 1.4 Tools for Full Stack Developers
- 1.4.1 Editors
- 1.4.2 Development Environments
- 1.4.3 Browsers
- 1.5 Summary and Outlook
- 1.5.1 Key Points
- 1.5.2 Outlook
- 2 Structuring Web Pages with HTML
- 2.1 Introduction
- 2.1.1 Versions
- 2.1.2 Using Elements and Attributes
- 2.1.3 Saving Web Pages as HTML Documents
- 2.2 Using the Most Important Elements
- 2.2.1 Using Headings, Paragraphs, and Other Text Formatting
- 2.2.2 Creating Lists
- 2.2.3 Defining Links
- 2.2.4 Including Images
- 2.2.5 Structuring Data in Tables
- 2.2.6 Defining Forms
- 2.2.7 Further Information
- 2.3 Summary and Outlook
- 2.3.1 Key Points
- 2.3.2 Recommended Reading
- 2.3.3 Outlook
- 3 Designing Web Pages with CSS
- 3.1 Introduction
- 3.1.1 The Principle of CSS
- 3.1.2 Including CSS in HTML
- 3.1.3 Selectors
- 3.1.4 Cascading and Specificity
- 3.1.5 Inheritance
- 3.2 Applying Colors and Text Formatting
- 3.2.1 Defining the Text Color and Background Color
- 3.2.2 Designing Texts
- 3.3 Lists and Tables
- 3.3.1 Designing Lists
- 3.3.2 Designing Tables
- 3.4 Understanding the Different Layout Systems
- 3.4.1 Basic Principles of Positioning with CSS
- 3.4.2 Float Layout
- 3.4.3 Flexbox Layout
- 3.4.4 Grid Layout
- 3.5 Summary and Outlook
- 3.5.1 Key Points
- 3.5.2 Recommended Reading
- 3.5.3 Outlook
- 4 Making Web Pages Interactive with JavaScript
- 4.1 Introduction
- 4.1.1 Including JavaScript
- 4.1.2 Displaying Dialog Boxes
- 4.1.3 Using the Developer Console
- 4.1.4 Introduction to Programming
- 4.2 Variables, Constants, Data Types, and Operators
- 4.2.1 Defining Variables
- 4.2.2 Defining Constants
- 4.2.3 Using Data Types
- 4.2.4 Using Operators
- 4.3 Using Control Structures
- 4.3.1 Using Conditional Statements and Branching
- 4.3.2 Using Loops
- 4.4 Functions and Error Handling
- 4.4.1 Defining and Calling Functions
- 4.4.2 Passing and Analyzing Function Parameters
- 4.4.3 Defining Return Values
- 4.4.4 Responding to Errors
- 4.5 Objects and Arrays
- 4.5.1 Using Objects
- 4.5.2 Using Arrays
- 4.6 Summary and Outlook
- 4.6.1 Key Points
- 4.6.2 Recommended Reading
- 4.6.3 Outlook
- 5 Using Web Protocols
- 5.1 Hypertext Transfer Protocol
- 5.1.1 Requests and Responses
- 5.1.2 Structure of HTTP Requests
- 5.1.3 Structure of HTTP Responses
- 5.1.4 Header
- 5.1.5 Methods
- 5.1.6 Status Codes
- 5.1.7 MIME Types
- 5.1.8 Cookies
- 5.1.9 Executing HTTP from the Command Line
- 5.2 Bidirectional Communication
- 5.2.1 Polling and Long Polling
- 5.2.2 Server-Sent Events
- 5.2.3 WebSockets
- 5.3 Summary and Outlook
- 5.3.1 Key Points
- 5.3.2 Recommended Reading
- 5.3.3 Outlook
- 6 Using Web Formats
- 6.1 Data Formats
- 6.1.1 CSV
- 6.1.2 XML
- 6.1.3 JSON
- 6.2 Image Formats
- 6.2.1 Photographs in the JPG Format
- 6.2.2 Graphics and Animations in the GIF Format
- 6.2.3 Graphics in the PNG Format
- 6.2.4 Vector Graphics in the SVG Format
- 6.2.5 Everything Gets Better with the WebP Format
- 6.2.6 Comparing Image Formats
- 6.2.7 Programs for Image Processing
- 6.3 Video and Audio Formats
- 6.3.1 Video Formats
- 6.3.2 Audio Formats
- 6.4 Summary and Outlook
- 6.4.1 Key Points
- 6.4.2 Recommended Reading
- 6.4.3 Outlook
- 7 Using Web APIs
- 7.1 Changing Web Pages Dynamically Using the DOM API
- 7.1.1 The Document Object Model
- 7.1.2 The Different Types of Nodes
- 7.1.3 Selecting Elements
- 7.1.4 Modifying Elements
- 7.1.5 Creating, Adding, and Deleting Elements
- 7.1.6 Practical Example: Dynamic Creation of a Table
- 7.2 Loading Data Synchronously via Ajax and the Fetch API
- 7.2.1 Synchronous versus Asynchronous Communication
- 7.2.2 Loading Data via Ajax
- 7.2.3 Loading Data via the Fetch API
- 7.3 Other Web APIs
- 7.3.1 Overview of Web APIs
- 7.3.2 Browser Support for Web APIs
- 7.4 Summary and Outlook
- 7.4.1 Key Points
- 7.4.2 Recommended Reading
- 7.4.3 Outlook
- 8 Optimizing Websites for Accessibility
- 8.1 Introduction
- 8.1.1 Introduction to Accessibility
- 8.1.2 User Groups and Assistive Technologies
- 8.1.3 Web Content Accessibility Guidelines
- 8.2 Making Components of a Website Accessible
- 8.2.1 Structuring Web Pages Semantically
- 8.2.2 Using Headings Correctly
- 8.2.3 Making Forms Accessible
- 8.2.4 Making Tables Accessible
- 8.2.5 Making Images Accessible
- 8.2.6 Making Links Accessible
- 8.2.7 Accessible Rich Internet Applications
- 8.2.8 Miscellaneous
- 8.3 Testing Accessibility
- 8.3.1 Types of Tests
- 8.3.2 Tools for Testing
- 8.4 Summary and Outlook
- 8.4.1 Key Points
- 8.4.2 Recommended Reading
- 8.4.3 Outlook
- 9 Simplifying CSS with CSS Preprocessors
- 9.1 Introduction
- 9.1.1 How CSS Preprocessors Work
- 9.1.2 Features of CSS Preprocessors
- 9.1.3 Sass, Less, and Stylus
- 9.2 Using Sass
- 9.2.1 Installing Sass
- 9.2.2 Compiling Sass Files to CSS
- 9.2.3 Using Variables
- 9.2.4 Using Operators
- 9.2.5 Using Branches
- 9.2.6 Using Loops
- 9.2.7 Using Functions
- 9.2.8 Implementing Custom Functions
- 9.2.9 Nesting Rules
- 9.2.10 Using Inheritance and Mixins
- 9.3 Summary and Outlook
- 9.3.1 Key Points
- 9.3.2 Recommended Reading
- 9.3.3 Outlook
- 10 Implementing Single-Page Applications
- 10.1 Introduction
- 10.2 Setup
- 10.3 Components: The Building Blocks of a React Application
- 10.3.1 State: The Local State of a Component
- 10.3.2 The Lifecycle of a Component
- 10.4 Styling Components
- 10.4.1 Inline Styling
- 10.4.2 CSS Classes and External Stylesheets
- 10.4.3 Overview of Other Styling Options
- 10.5 Component Hierarchies
- 10.6 Forms
- 10.7 The Context API
- 10.8 Routing
- 10.9 Summary and Outlook
- 10.9.1 Key Points
- 10.9.2 Recommended Reading
- 10.9.3 Outlook
- 11 Implementing Mobile Applications
- 11.1 The Different Types of Mobile Applications
- 11.1.1 Native Applications
- 11.1.2 Mobile Web Applications
- 11.1.3 Hybrid Applications
- 11.1.4 Comparing the Different Approaches
- 11.2 Responsive Design
- 11.2.1 Introduction: What Is Responsive Design?
- 11.2.2 Viewports
- 11.2.3 Media Queries
- 11.2.4 Flexible Layouts
- 11.3 Cross-Platform Development with React Native
- 11.3.1 The Principle of React Native
- 11.3.2 Installation and Project Initialization
- 11.3.3 Starting the Application
- 11.3.4 The Basic Structure of a React Native Application
- 11.3.5 User Interface Components
- 11.3.6 Building and Publishing Applications
- 11.4 Summary and Outlook
- 11.4.1 Key Points
- 11.4.2 Recommended Reading
- 11.4.3 Outlook
- 12 Understanding and Using Web Architectures
- 12.1 Layered Architectures
- 12.1.1 Basic Structure of Layered Architectures
- 12.1.2 Client-Server Architecture (Two-Tier Architecture)
- 12.1.3 Multi-Tier Architecture
- 12.2 Monoliths and Distributed Architectures
- 12.2.1 Monolithic Architecture
- 12.2.2 Service-Oriented Architecture
- 12.2.3 Microservice Architecture
- 12.2.4 Component-Based Architecture
- 12.2.5 Microfrontends Architecture
- 12.2.6 Messaging Architecture
- 12.2.7 Web Service Architecture
- 12.3 MV* Architectures
- 12.3.1 Model-View-Controller
- 12.3.2 Model-View-Presenter
- 12.3.3 Model-View-Viewmodel
- 12.4 Summary and Outlook
- 12.4.1 Key Points
- 12.4.2 Recommended Reading
- 12.4.3 Outlook
- 13 Using Programming Languages on the Server Side
- 13.1 Types of Programming Languages
- 13.1.1 Programming Languages by Degree of Abstraction
- 13.1.2 Compiled and Interpreted Programming Languages
- 13.2 Programming Paradigms
- 13.2.1 Imperative and Declarative Programming
- 13.2.2 Object-Oriented Programming
- 13.2.3 Functional Programming
- 13.3 What Are the Programming Languages?
- 13.3.1 Rankings of Programming Languages
- 13.3.2 Which Programming Language Should You Learn?
- 13.3.3 But Seriously Now: Which Programming Language Should You Learn?
- 13.4 Summary and Outlook
- 13.4.1 Key Points
- 13.4.2 Recommended Reading
- 13.4.3 Outlook
- 14 Using JavaScript on the Server Side
- 14.1 JavaScript on Node.js
- 14.1.1 Node.js Architecture
- 14.1.2 A First Program
- 14.1.3 Package Management
- 14.2 Using the Integrated Modules
- 14.2.1 Reading Files
- 14.2.2 Writing Files
- 14.2.3 Deleting Files
- 14.3 Implementing a Web Server
- 14.3.1 Preparations
- 14.3.2 Providing Static Files
- 14.3.3 Using the Express.js Web Framework
- 14.3.4 Processing Form Data
- 14.4 Summary and Outlook
- 14.4.1 Key Points
- 14.4.2 Recommended Reading
- 14.4.3 Outlook
- 15 Using the PHP Language
- 15.1 Introduction to the PHP Language
- 15.2 Installing PHP and the Web Server Locally
- 15.3 Variables, Data Types, and Operators
- 15.3.1 Using Variables
- 15.3.2 Using Constants
- 15.3.3 Using Operators
- 15.4 Using Control Structures
- 15.4.1 Conditional Statements
- 15.4.2 Loops
- 15.5 Functions and Error Handling
- 15.5.1 Defining Functions
- 15.5.2 Function Parameters
- 15.5.3 Defining Return Values
- 15.5.4 Using Data Types
- 15.5.5 Anonymous Functions
- 15.5.6 Declaring Variable Functions
- 15.5.7 Arrow Functions
- 15.5.8 Responding to Errors
- 15.6 Using Classes and Objects
- 15.6.1 Writing Classes
- 15.6.2 Creating Objects
- 15.6.3 Class Constants
- 15.6.4 Visibility
- 15.6.5 Inheritance
- 15.6.6 Class Abstraction
- 15.6.7 More Features
- 15.7 Developing Dynamic Websites with PHP
- 15.7.1 Creating and Preparing a Form
- 15.7.2 Receiving Form Data
- 15.7.3 Verifying Form Data
- 15.8 Summary and Outlook
- 15.8.1 Key Points
- 15.8.2 Recommended Reading
- 15.8.3 Outlook
- 16 Implementing Web Services
- 16.1 Introduction
- 16.2 SOAP
- 16.2.1 The Workflow with SOAP
- 16.2.2 Description of Web Services with WSDL
- 16.2.3 Structure of SOAP Messages
- 16.2.4 Conclusion
- 16.3 REST
- 16.3.1 The Workflow with REST
- 16.3.2 The Principles of REST
- 16.3.3 Implementing a REST API
- 16.3.4 Calling a REST API
- 16.4 GraphQL
- 16.4.1 The Disadvantages of REST
- 16.4.2 The Workflow of GraphQL
- 16.5 Summary and Outlook
- 16.5.1 Key Points
- 16.5.2 Recommended Reading
- 16.5.3 Outlook
- 17 Storing Data in Databases
- 17.1 Relational Databases
- 17.1.1 The Functionality of Relational Databases
- 17.1.2 The SQL Language
- 17.1.3 Real-Life Example: Using Relational Databases in Node.js
- 17.1.4 Object-Relational Mappings
- 17.2 Non-Relational Databases
- 17.2.1 Relational versus Non-Relational Databases
- 17.2.2 The Functionality of Non-Relational Databases
- 17.2.3 Key-Value Databases
- 17.2.4 Document-Oriented Databases
- 17.2.5 Graph Databases
- 17.2.6 Column-Oriented Databases
- 17.3 Summary and Outlook
- 17.3.1 Key Points
- 17.3.2 Recommended Reading
- 17.3.3 Outlook
- 18 Testing Web Applications
- 18.1 Automated Tests
- 18.1.1 Introduction
- 18.1.2 Types of Tests
- 18.1.3 Test-Driven Development
- 18.1.4 Running Automated Tests in JavaScript
- 18.2 Test Coverage
- 18.2.1 Introduction
- 18.2.2 Determining Test Coverage in JavaScript
- 18.3 Test Doubles
- 18.3.1 The Problem with Dependencies
- 18.3.2 Replacing Dependencies with Test Doubles
- 18.3.3 Spies
- 18.3.4 Stubs
- 18.3.5 Mock Objects
- 18.4 Summary and Outlook
- 18.4.1 Key Points
- 18.4.2 Recommended Reading
- 18.4.3 Outlook
- 19 Deploying and Hosting Web Applications
- 19.1 Introduction
- 19.1.1 Building, Deploying, and Hosting
- 19.1.2 Types of Deployment
- 19.1.3 Types of Hosting
- 19.1.4 Requirements for Servers
- 19.2 Container Management
- 19.2.1 Docker
- 19.2.2 Real-Life Example: Packaging a Web Application using Docker
- 19.2.3 Number of Docker Images
- 19.2.4 Docker Compose
- 19.3 Summary and Outlook
- 19.3.1 Key Points
- 19.3.2 Recommended Reading
- 19.3.3 Outlook
- 20 Securing Web Applications
- 20.1 Vulnerabilities
- 20.1.1 Open Web Application Security Project
- 20.1.2 Injection
- 20.1.3 Broken Authentication
- 20.1.4 Sensitive Data Exposure
- 20.1.5 XML External Entities
- 20.1.6 Broken Access Control
- 20.1.7 Security Misconfiguration
- 20.1.8 Cross-Site Scripting
- 20.1.9 Insecure Deserialization
- 20.1.10 Using Components with Known Vulnerabilities
- 20.1.11 Insufficient Logging and Monitoring
- 20.1.12 Outlook
- 20.2 Encryption and Cryptography
- 20.2.1 Symmetric Cryptography
- 20.2.2 Asymmetric Cryptography
- 20.2.3 SSL, TLS, and HTTPS
- 20.3 Same-Origin Policies, Content Security Policies, and Cross-Origin Resource Sharing
- 20.3.1 Same Origin Policy
- 20.3.2 Cross-Origin Resource Sharing
- 20.3.3 Content Security Policy
- 20.4 Authentication
- 20.4.1 Basic Authentication
- 20.4.2 Session-Based Authentication
- 20.4.3 Token-Based Authentication
- 20.5 Summary and Outlook
- 20.5.1 Key Points
- 20.5.2 Recommended Reading
- 20.5.3 Outlook
- 21 Optimizing the Performance of Web Applications
- 21.1 Introduction
- 21.1.1 What Should Be Optimized and Why?
- 21.1.2 How Can Performance Be Measured?
- 21.1.3 Which Tools Are Available for Measuring Performance?
- 21.2 Options for Optimization
- 21.2.1 Optimizing Connection Times
- 21.2.2 Using a Server-Side Cache
- 21.2.3 Optimizing Images
- 21.2.4 Using a Client-Side Cache
- 21.2.5 Minifying the Code
- 21.2.6 Compressing Files
- 21.2.7 Lazy Loading: Loading Data Only When Needed
- 21.2.8 Preloading Data
- 21.3 Summary and Outlook
- 21.3.1 Key Points
- 21.3.2 Recommended Reading
- 21.3.3 Outlook
- 22 Organizing and Managing Web Projects
- 22.1 Types of Version Control Systems
- 22.1.1 Central Version Control Systems
- 22.1.2 Decentralized Version Control Systems
- 22.2 The Git Version Control System
- 22.2.1 How Git Stores Data
- 22.2.2 The Different Areas of Git
- 22.2.3 Installation
- 22.2.4 Creating a New Git Repository
- 22.2.5 Transferring Changes to the Staging Area
- 22.2.6 Committing Changes to the Local Repository
- 22.2.7 Committing Changes to the Remote Repository
- 22.2.8 Transferring Changes from the Remote Repository
- 22.2.9 Working in a New Branch
- 22.2.10 Transferring Changes from a Branch
- 22.3 Summary and Outlook
- 22.3.1 Key Points
- 22.3.2 Recommended Reading
- 22.3.3 Outlook
- 23 Managing Web Projects
- 23.1 Classic Project Management versus Agile Project Management
- 23.1.1 Classic Project Management
- 23.1.2 Agile Project Management
- 23.2 Agile Project Management Based on Scrum
- 23.2.1 The Scrum Workflow
- 23.2.2 The Roles of Scrum
- 23.2.3 Events in Scrum
- 23.2.4 Artifacts in Scrum
- 23.3 Summary and Outlook
- 23.3.1 Key Points
- 23.3.2 Recommended Reading
- 23.3.3 Outlook
- Appendices
- A HTTP
- A.1 HTTP Status Codes
- A.2 MIME Types
- A.3 Headers
- B HTML Elements
- B.1 HTML and Metadata
- B.2 Page Areas
- B.3 Content Grouping
- B.4 Text
- B.5 Changes to the Document
- B.6 Embedded Content
- B.7 Tables
- B.8 Forms
- B.9 Scripts
- C Tools and Command References
- C.1 Node.js
- C.2 Testing Tools
- C.3 Git Command Reference
- C.4 Docker Command Reference
- C.5 Docker Compose Command Reference
- D Conclusion
- E The Author
- Index