top of page

Arquitectura de aplicaciones web: evolución, componentes, tecnologías y planificación

hace 4 horas
26 min de lectura

Las aplicaciones web forman parte de muchas actividades cotidianas: consultar una calificación, comprar un producto, realizar una transferencia, reservar una cita o registrar la asistencia de un grupo. Aunque estas acciones se presentan mediante pantallas, formularios y botones, detrás de cada una existe un conjunto de componentes que colaboran para recibir información, aplicar reglas, consultar datos y entregar resultados.


Comprender la arquitectura de una aplicación web implica estudiar cómo se organiza el sistema, qué responsabilidad tiene cada componente y cómo se comunican sus partes. Esta comprensión permite desarrollar aplicaciones que funcionen correctamente, puedan mantenerse y protejan la información que administran.


A lo largo de este artículo se utilizará un ejemplo: un sistema web para el préstamo de equipos de cómputo de una institución educativa. En él, los usuarios podrán consultar equipos disponibles, solicitar préstamos y registrar devoluciones. Este caso permitirá relacionar los conceptos con decisiones concretas de desarrollo.


Video explicativo: Arquitectura de aplicaciones web





1.1 Evolución de las aplicaciones web


Figura 1. Formas de uso de la Web que conviven: documentos, contenido dinámico, actualización parcial y experiencias integradas.

Figura 1. Formas de uso de la Web que conviven: documentos, contenido dinámico, actualización parcial y experiencias integradas. Ilustración didáctica original.


1.1.1 Internet y la Web: conceptos relacionados


Internet es una infraestructura de redes interconectadas que permite intercambiar información entre dispositivos mediante protocolos de comunicación.


La World Wide Web, también llamada Web o WWW, es un sistema de recursos enlazados que utiliza esa infraestructura. Sus recursos se identifican mediante direcciones y pueden consultarse con programas como los navegadores.


Por ejemplo:


  • Al abrir una página en un navegador se utiliza la Web.

  • El correo electrónico utiliza Internet, aunque su funcionamiento puede involucrar protocolos distintos de los de la Web.

  • Una aplicación de correo abierta en el navegador combina una interfaz web con los servicios que permiten administrar mensajes.


Una aplicación web también puede funcionar dentro de una red local. Un sistema escolar instalado en un servidor de la institución podría consultarse desde las computadoras del laboratorio sin estar publicado para todo Internet.


1.1.2 Origen de la Web


Tim Berners-Lee desarrolló la Web en el CERN a partir de 1989 para facilitar el intercambio de información. El proyecto articuló tres elementos fundamentales:


  • HTML: una forma de estructurar documentos con enlaces.

  • HTTP: un protocolo para solicitar y transferir recursos.

  • URL: una forma de identificar y localizar recursos.


El 30 de abril de 1993, el CERN puso el software de la Web en el dominio público, una decisión que favoreció su expansión.


La idea central del hipertexto consiste en relacionar documentos mediante enlaces. En lugar de consultar información de manera estrictamente secuencial, una persona puede desplazarse entre recursos relacionados.


Por ejemplo, una página sobre programación puede contener un enlace a otra que explique variables y, desde allí, conducir a ejemplos de funciones.


1.1.3 Primeras páginas: publicación de información


Las primeras experiencias de la Web se concentraron en publicar documentos que las personas podían consultar.


Una página institucional podía mostrar:


  • Nombre de la institución.

  • Oferta educativa.

  • Dirección.

  • Horarios.

  • Información de contacto.


Un ejemplo sencillo sería:


<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Laboratorio de cómputo</title>
</head>
<body>
  <h1>Laboratorio de cómputo</h1>

  <p>Horario de atención: lunes a viernes, de 8:00 a 15:00.</p>

  <a href="reglamento.html">Consultar el reglamento</a>
</body>
</html>

El servidor puede almacenar este documento y enviarlo cuando alguien lo solicita.


Se habla de contenido estático cuando el recurso se entrega tal como está almacenado, sin generarlo específicamente para cada solicitud.


“Estático” no significa que una página deba carecer de animaciones o interactividad. Un sitio servido como archivos estáticos puede incluir JavaScript, reproducir video o realizar cálculos en el navegador.


La característica se refiere a cómo se produce y entrega el contenido, no a si hay movimiento en pantalla.


1.1.4 Aplicaciones dinámicas: información que depende de la solicitud


Con el crecimiento de la Web surgió la necesidad de procesar formularios, consultar bases de datos y mostrar contenido diferente según el usuario.


Una aplicación dinámica puede generar una respuesta a partir de:


  • La identidad de quien solicita información.

  • Los parámetros enviados.

  • Las reglas del sistema.

  • Los datos almacenados.

  • El momento de la consulta.


En el sistema de préstamos, dos usuarios podrían abrir la misma dirección y obtener resultados diferentes:


  • Un estudiante ve sus solicitudes.

  • El encargado ve las solicitudes pendientes.

  • Un administrador ve herramientas para gestionar usuarios.


El servidor recibe la solicitud, ejecuta código y produce una respuesta. Esta puede ser un documento HTML o datos que después utilizará el navegador. MDN explica esta distinción entre recursos estáticos y respuestas generadas mediante programación del lado del servidor.


Ejemplo:


Si el laboratorio tiene diez equipos y tres están prestados, la aplicación debe consultar la situación actual y mostrar siete disponibles. Una lista escrita manualmente en una página podría quedar desactualizada después del siguiente préstamo.


1.1.5 Mayor participación del usuario


La Web también evolucionó hacia sistemas en los que las personas crean y modifican información:


  • Publican comentarios.

  • Suben fotografías.

  • Editan documentos.

  • Comparten archivos.

  • Califican productos.

  • Participan en plataformas educativas.


La expresión Web 2.0 se utiliza para describir esta orientación participativa. No representa una versión oficial de HTTP ni una actualización que deba instalarse.


El cambio relevante fue pasar de un uso principalmente informativo a uno en el que los usuarios también producen contenido y ejecutan procesos.


En el sistema de préstamos, un usuario deja de limitarse a leer un reglamento: puede solicitar un equipo, consultar la respuesta y revisar su historial.


1.1.6 Actualización parcial de las páginas


En una aplicación tradicional, muchas interacciones provocan la carga de un documento completo.


Por ejemplo:


  1. El usuario llena un formulario.

  2. Lo envía.

  3. El servidor procesa la información.

  4. El navegador carga una nueva página con el resultado.


Más adelante se extendió el uso de solicitudes desde JavaScript para intercambiar información sin reemplazar toda la página.


A esta técnica se le conoce habitualmente como AJAX, por Asynchronous JavaScript and XML. Aunque el nombre menciona XML, actualmente es frecuente intercambiar datos en JSON.


En el catálogo de equipos, al seleccionar “Mostrar solamente disponibles”, JavaScript puede solicitar los resultados y actualizar únicamente la lista.


Esto puede mejorar la experiencia, pero exige resolver otros problemas:


  • Mostrar que la información está cargando.

  • Informar fallas de conexión.

  • Evitar solicitudes duplicadas.

  • Mantener una navegación comprensible.

  • Comunicar los cambios a personas que utilizan tecnologías de asistencia.


1.1.7 Aplicaciones de múltiples páginas y de una sola página


Una MPA, o aplicación de múltiples páginas, utiliza diferentes documentos para sus secciones. Al navegar, el servidor normalmente entrega otra página.


Una SPA, o aplicación de una sola página, carga una interfaz inicial y utiliza JavaScript para gestionar buena parte de la navegación y de las actualizaciones posteriores.


Aspecto

MPA

SPA

Navegación habitual

Solicitud de otro documento

Actualización de la interfaz mediante JavaScript

Generación de la interfaz

Frecuentemente en el servidor

Frecuentemente en el navegador

Complejidad inicial

Puede ser menor en proyectos sencillos

Requiere gestionar estado, rutas y carga de datos

Ejemplo

Portal con formularios y páginas independientes

Panel de trabajo con muchas interacciones continuas


Estas formas pueden combinarse. Un sitio puede utilizar páginas generadas en el servidor e incorporar componentes muy interactivos.


Una SPA tampoco implica que toda la aplicación funcione sin servidor: puede depender continuamente de servicios remotos.


1.1.8 Aplicaciones móviles y diseño adaptable


La expansión de teléfonos y tabletas cambió las condiciones de uso de la Web.


Una aplicación debe considerar:


  • Pantallas de distintos tamaños.

  • Interacción táctil.

  • Teclados virtuales.

  • Conexiones variables.

  • Dispositivos con capacidades diferentes.


El diseño adaptable, o responsive design, permite ajustar la presentación al espacio disponible.


En una computadora, el catálogo puede mostrar varias tarjetas por fila; en un teléfono, una sola columna.


La adaptación también debe considerar el contenido. Una tabla con veinte columnas puede necesitar una presentación distinta para que resulte útil en una pantalla pequeña.


1.1.9 Aplicaciones web progresivas


Una PWA, o aplicación web progresiva, utiliza tecnologías de la Web para ofrecer capacidades que pueden aproximarse a las de una aplicación instalada.


Según su implementación y el soporte del navegador, puede proporcionar:


  • Instalación.

  • Acceso a recursos almacenados localmente.

  • Algunas funciones sin conexión.

  • Notificaciones.

  • Integración con ciertas capacidades del dispositivo.


Un service worker puede interceptar solicitudes y administrar recursos en caché, lo que permite diseñar experiencias sin conexión. Estas capacidades requieren implementación deliberada; no aparecen automáticamente por convertir un sitio en instalable.


En el sistema de préstamos, una PWA podría permitir consultar el reglamento sin conexión. Sin embargo, confirmar un préstamo requiere conocer la disponibilidad actual.


Si dos dispositivos están desconectados, ambos podrían creer que el mismo equipo sigue disponible. Por ello, consultar información almacenada localmente y confirmar una operación compartida son problemas diferentes.


1.1.10 Servicios distribuidos y aplicaciones integradas


Las aplicaciones también pueden integrar servicios especializados:


  • Correo electrónico.

  • Almacenamiento de archivos.

  • Identidad.

  • Pagos.

  • Mapas.

  • Videoconferencias.


Una aplicación de préstamos podría registrar la operación en su base de datos y utilizar un proveedor externo para enviar la notificación.


La evolución de la Web no significa que cada tecnología nueva sustituya a todas las anteriores. Las páginas estáticas, los formularios tradicionales, las SPA y las PWA siguen siendo útiles en contextos diferentes.


La elección depende del problema y de los recursos disponibles.



1.2 Arquitectura de las aplicaciones web


Figura 2. Recorrido simplificado de una solicitud entre navegador, backend y base de datos en el sistema de préstamos.

Figura 2. Recorrido simplificado de una solicitud entre navegador, backend y base de datos en el sistema de préstamos. Ilustración didáctica original.


1.2.1 Qué significa arquitectura


La arquitectura de software define la organización fundamental de un sistema:


  • Sus componentes principales.

  • Las responsabilidades de cada componente.

  • Las relaciones entre ellos.

  • Los mecanismos de comunicación.

  • Las decisiones que condicionan su evolución.


Para comprenderla, puede utilizarse la analogía de un restaurante:


Restaurante

Aplicación web

Cliente que solicita un platillo

Usuario que realiza una operación

Menú y espacio de atención

Interfaz

Procedimiento para recibir pedidos

Protocolo y contrato de comunicación

Cocina que procesa el pedido

Lógica de la aplicación

Inventario de ingredientes

Datos almacenados

Reglas de preparación y venta

Reglas del negocio


La analogía ayuda a identificar responsabilidades: que una opción aparezca en el menú no garantiza que existan ingredientes para prepararla. Del mismo modo, que un equipo aparezca disponible en una pantalla no garantiza que siga disponible al confirmar el préstamo.


1.2.2 Modelo cliente-servidor


En el modelo cliente-servidor:


  • El cliente solicita recursos o servicios.

  • El servidor recibe solicitudes y entrega respuestas.


El navegador funciona como cliente web, pero también pueden existir otros clientes: una aplicación móvil, otro servidor o una herramienta de pruebas.


La palabra servidor puede referirse al equipo que ejecuta un servicio o al programa que atiende solicitudes. Un mismo equipo físico puede ejecutar varios servicios.


En nuestro ejemplo:


  • El navegador solicita el catálogo.

  • La aplicación procesa la consulta.

  • La base de datos proporciona información.

  • El servidor devuelve el resultado.


1.2.3 Qué ocurre al abrir una dirección


Supongamos una dirección ficticia:


https://laboratorio.example/equipos?estado=disponible

Sus partes principales son:


Parte

Significado

https

Esquema de acceso

laboratorio.example

Nombre del servidor

/equipos

Ruta del recurso

estado=disponible

Parámetro de consulta


De forma simplificada, al abrirla:


  1. El navegador determina cómo conectarse al destino; puede consultar DNS para resolver el nombre.

  2. Establece o reutiliza una conexión.

  3. En HTTPS, la comunicación utiliza TLS para proteger los datos en tránsito y verificar la identidad del servidor mediante certificados.

  4. Envía una solicitud.

  5. Recibe una respuesta.

  6. Interpreta el contenido.

  7. Solicita recursos adicionales cuando son necesarios.


La caché, las conexiones reutilizadas y otros intermediarios pueden evitar que todos estos pasos se repitan de la misma manera en cada visita. MDN presenta el recorrido general desde la dirección hasta la representación del contenido en el navegador.


HTTPS protege la comunicación; no garantiza por sí mismo que la aplicación tenga reglas correctas o carezca de vulnerabilidades.


1.2.4 Solicitudes y respuestas HTTP


HTTP establece cómo se intercambian solicitudes y respuestas.


Una representación simplificada de una solicitud HTTP/1.1 sería:


GET /api/equipos?estado=disponible HTTP/1.1
Host: laboratorio.example
Accept: application/json

La respuesta podría ser:


HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "id": 12,
    "nombre": "Laptop 12",
    "estado": "disponible"
  }
]

La solicitud contiene un método, un destino y encabezados; también puede incluir un cuerpo. La respuesta contiene un código de estado, encabezados y, cuando corresponde, un cuerpo.


Los encabezados proporcionan información adicional. Por ejemplo, Content-Type indica el tipo de contenido del cuerpo.


Métodos frecuentes:


Método

Uso habitual

GET

Consultar una representación de un recurso

POST

Enviar datos para que el recurso los procese; frecuentemente crear

PUT

Crear o reemplazar el estado del recurso identificado

PATCH

Aplicar modificaciones parciales

DELETE

Solicitar la eliminación del recurso o de su asociación


El método, por sí solo, no implementa permisos. Una solicitud DELETE debe ser autenticada y autorizada cuando la operación lo requiera.


Códigos de estado frecuentes:


Código

Significado general

Ejemplo

200

Operación atendida correctamente

Consulta del catálogo

201

Recurso creado

Registro de un préstamo

400

Solicitud inválida

Formato incorrecto

401

Faltan credenciales válidas

Sesión no válida

403

Operación no permitida

Usuario sin autorización

404

Recurso no encontrado

Equipo inexistente

409

Conflicto con el estado actual

Equipo que ya fue prestado

500

Error interno del servidor

Falla inesperada


HTTP es esencialmente sin estado: el protocolo no conserva automáticamente una sesión de usuario entre solicitudes. La aplicación puede relacionarlas mediante identificadores de sesión, cookies u otros mecanismos.


1.2.5 Frontend: interacción y presentación


El frontend corresponde a la parte con la que interactúa el usuario.


Incluye:


  • Formularios.

  • Menús.

  • Tablas.

  • Mensajes.

  • Botones.

  • Presentación adaptable.

  • Interacciones en el navegador.


En el sistema de préstamos, el frontend permite elegir un equipo y enviar la solicitud.


También puede detectar errores evidentes, como un campo obligatorio vacío. Sin embargo, las comprobaciones del navegador pueden ser omitidas o alteradas.


Por ello, no debe decidir de manera definitiva si una persona tiene permiso para registrar préstamos o si un equipo está disponible.


1.2.6 Backend: procesamiento y reglas


El backend realiza el procesamiento del lado del servidor.


Entre sus responsabilidades se encuentran:


  • Verificar identidad y permisos.

  • Validar información.

  • Aplicar reglas.

  • Consultar y modificar datos.

  • Coordinar operaciones.

  • Integrar servicios.

  • Producir respuestas.


Ejemplos de reglas del sistema:


  • Un estudiante puede tener como máximo un préstamo activo.

  • Un equipo en mantenimiento no puede prestarse.

  • Un usuario suspendido no puede solicitar préstamos.

  • Una devolución no debe registrarse dos veces.


Estas reglas deben verificarse en el servidor, aunque la interfaz también ofrezca orientación al usuario.


1.2.7 Persistencia y base de datos


La persistencia permite conservar información después de cerrar el navegador o reiniciar un proceso.


Una base de datos puede almacenar:


  • Usuarios.

  • Equipos.

  • Préstamos.

  • Devoluciones.

  • Historial de operaciones.


Un modelo inicial podría contener:


Entidad

Datos principales

Usuario

Identificador, nombre, rol, estado

Equipo

Identificador, código de inventario, descripción, condición

Préstamo

Identificador, usuario, equipo, fechas

Registro de auditoría

Actor, operación, recurso, momento


Las relaciones permiten saber qué usuario recibió qué equipo.


Una clave foránea puede impedir que se registre un préstamo asociado con un usuario inexistente. Esta es una forma de integridad referencial.


En una aplicación web convencional, el navegador se comunica con el backend; este accede a la base de datos. Las credenciales administrativas de la base no deben incorporarse al JavaScript que recibe el usuario.


1.2.8 Arquitectura por capas


Una organización frecuente separa el sistema en:


  1. Presentación: interacción con el usuario.

  2. Lógica del negocio: reglas y procesos.

  3. Acceso a datos: lectura y escritura en los mecanismos de persistencia.


Es importante distinguir capas lógicas y niveles físicos.


Las capas representan responsabilidades del software. Los niveles físicos representan dónde se ejecutan sus componentes.


Una aplicación puede tener tres capas lógicas y ejecutarse en un solo servidor. También puede distribuirlas entre varios equipos. La documentación de Microsoft distingue explícitamente estas dos dimensiones.


Ejemplo: registrar un préstamo


  • Presentación: recibe la selección del equipo.

  • Negocio: verifica que el usuario pueda solicitarlo.

  • Acceso a datos: registra el préstamo.

  • Base de datos: conserva la información y aplica restricciones.


Separar responsabilidades facilita cambiar la apariencia sin reescribir las reglas del préstamo.


1.2.9 Patrón Modelo-Vista-Controlador


El patrón MVC organiza responsabilidades mediante tres elementos:


Elemento

Responsabilidad

Modelo

Datos y comportamiento del dominio

Vista

Presentación

Controlador

Recibir la interacción y coordinar la respuesta


Por ejemplo:


  1. Un controlador recibe la solicitud para prestar un equipo.

  2. Invoca la lógica correspondiente.

  3. El modelo representa las reglas y los datos involucrados.

  4. Una vista presenta la confirmación.


En implementaciones reales puede haber servicios, repositorios y otros componentes adicionales.


El modelo no se reduce a “una tabla” ni el controlador debería concentrar toda la lógica del sistema. Además, MVC y arquitectura de tres capas son clasificaciones relacionadas, pero diferentes.


1.2.10 Arquitectura monolítica


Una aplicación monolítica reúne sus funcionalidades principales en una unidad de despliegue.


Puede contener módulos como:


  • Usuarios.

  • Inventario.

  • Préstamos.

  • Reportes.


Un monolito puede estar bien organizado. Cuando mantiene límites claros entre módulos se habla de un monolito modular.


Para el sistema de préstamos propuesto, esta sería una elección inicial razonable: permite mantener las reglas relacionadas dentro de una aplicación y reduce la cantidad de servicios que deben operarse.


La limitación aparece cuando el tamaño, las dependencias o la organización del equipo dificultan modificar y desplegar el conjunto.


1.2.11 Arquitectura de microservicios


Los microservicios organizan el sistema en servicios que pueden desarrollarse y desplegarse con mayor independencia, normalmente alrededor de capacidades del negocio.


Por ejemplo:


  • Identidad.

  • Inventario.

  • Préstamos.

  • Notificaciones.


Sus ventajas potenciales incluyen el despliegue y escalado independiente. Sus costos incluyen comunicación por red, fallas parciales, seguimiento de operaciones y coordinación de datos.


Microsoft advierte que adoptar microservicios exige cambiar también la forma de diseñar, desplegar y operar el sistema.


En un proyecto pequeño, dividir cada función en un servicio puede aumentar el trabajo sin resolver una necesidad real.


1.2.12 API: contrato de comunicación


Una API, o interfaz de programación de aplicaciones, define cómo un componente puede utilizar funciones o datos de otro.


Una API web puede ofrecer operaciones como:


Método y ruta

Propósito

GET /api/equipos

Consultar equipos

GET /api/equipos/12

Consultar un equipo

POST /api/prestamos

Solicitar un préstamo

POST /api/prestamos/85/devolucion

Registrar una devolución


Para crear un préstamo, el cliente podría enviar:


{
  "equipoId": 12
}

El backend debe obtener la identidad del usuario desde el mecanismo de autenticación. No basta con aceptar un identificador enviado por el navegador y suponer que le pertenece.


La respuesta podría ser:


{
  "id": 85,
  "equipoId": 12,
  "estado": "activo"
}

JSON es un formato de intercambio de datos. Una API puede utilizarlo, pero también puede intercambiar otros formatos.


REST es un estilo arquitectónico para sistemas distribuidos. Tener rutas HTTP y respuestas JSON no demuestra, por sí solo, que una API cumpla todas sus restricciones.


1.2.13 Concurrencia: dos usuarios solicitan el mismo equipo


Figura 3. Dos usuarios pueden observar la misma disponibilidad; el backend y la base de datos deben impedir el préstamo duplicado.

Figura 3. Dos usuarios pueden observar la misma disponibilidad; el backend y la base de datos deben impedir el préstamo duplicado. Ilustración didáctica original.


Supongamos esta situación:


  1. Ana consulta el equipo 12 y lo ve disponible.

  2. Luis consulta el mismo equipo y también lo ve disponible.

  3. Ana confirma.

  4. Luis confirma inmediatamente después.


Si el sistema registra ambos préstamos, ha fallado una regla fundamental.


La solución requiere que la comprobación y el registro se coordinen de manera atómica, mediante transacciones, restricciones y mecanismos de concurrencia apropiados.


Un flujo conceptual sería:


Iniciar transacción.

Obtener y proteger los datos necesarios
para evaluar las reglas concurrentes.

Comprobar que:
  - el usuario está habilitado;
  - no supera su límite de préstamos;
  - el equipo admite el préstamo;
  - el equipo no tiene otro préstamo activo.

Registrar el préstamo.

Confirmar la transacción.

Si alguna comprobación falla:
  revertir y responder con el error correspondiente.

La forma exacta depende del gestor y del diseño.


Desactivar el botón después del primer clic ayuda a la interfaz, pero no resuelve los conflictos entre distintos usuarios.


1.2.14 Seguridad en la arquitectura


La seguridad debe formar parte de la organización del sistema.


Autenticación: comprobar quién es el usuario.


Autorización: comprobar qué puede hacer y sobre qué recursos.


Un estudiante autenticado puede consultar sus préstamos sin tener permiso para revisar los de todos los demás.


Las sesiones deben protegerse porque un identificador de sesión robado puede permitir actuar como el usuario. OWASP trata su gestión como una parte central de la seguridad de aplicaciones web.


También deben considerarse:


  • Validación del lado del servidor.

  • Consultas parametrizadas.

  • Protección de secretos.

  • Codificación segura de la salida.

  • Prevención de solicitudes no autorizadas.

  • Actualización de dependencias.

  • Registros de auditoría sin contraseñas ni tokens.


Las consultas parametrizadas separan los valores proporcionados por el usuario de la estructura de la consulta SQL y son una defensa principal contra la inyección SQL.



1.3 Tecnologías para el desarrollo de aplicaciones web


Figura 4. Función de HTML, CSS, JavaScript, backend y base de datos.

Figura 4. Función de HTML, CSS, JavaScript, backend y base de datos. Ilustración didáctica original.


1.3.1 Distinguir las categorías


En desarrollo web conviven herramientas de naturaleza diferente:


Categoría

Función

Ejemplos

Lenguaje de marcado

Estructurar documentos

HTML

Lenguaje de estilos

Definir presentación

CSS

Lenguaje de programación

Expresar instrucciones y lógica

JavaScript, PHP, Python, Java, C#

Entorno de ejecución

Ejecutar programas

Node.js, JVM, .NET

Biblioteca

Proporcionar funciones o componentes

React

Framework

Ofrecer estructura y convenciones

Django, Laravel, Angular

Gestor de base de datos

Almacenar y consultar datos

PostgreSQL, MySQL

Servidor HTTP

Atender tráfico HTTP

Apache HTTP Server, Nginx

Control de versiones

Registrar cambios

Git


Esta distinción evita afirmaciones incorrectas como “Node.js es un lenguaje” o “HTML administra la base de datos”.


1.3.2 HTML: estructura y significado


HTML significa HyperText Markup Language.


Describe la estructura y el significado del contenido:


<main>
  <h1>Equipos disponibles</h1>

  <article>
    <h2>Laptop 12</h2>
    <p>Equipo para actividades académicas.</p>
    <button type="button">Solicitar préstamo</button>
  </article>
</main>

Aquí:


  • <main> identifica el contenido principal.

  • <h1> presenta el encabezado principal.

  • <article> agrupa contenido con sentido propio.

  • <h2> identifica un apartado.

  • <button> representa una acción.


Elegir elementos por su significado ayuda a conservar una estructura comprensible y a utilizar el comportamiento que el navegador ya proporciona.


HTML también permite construir formularios:


<form action="/prestamos" method="post">
  <label for="equipo">Número de equipo</label>

  <input
    id="equipo"
    name="equipoId"
    type="number"
    min="1"
    required
  >

  <button type="submit">Solicitar préstamo</button>
</form>

El atributo name identifica el dato que se enviará. El id permite asociar el campo con su etiqueta.


El formulario requiere un servidor que atienda /prestamos; escribirlo en HTML no implementa el registro.


1.3.3 CSS: presentación y adaptación


CSS significa Cascading Style Sheets.


Permite controlar colores, tamaños, espacios y distribución:


body {
  margin: 0;
  font-family: system-ui, sans-serif;
  line-height: 1.6;
  color: #172033;
  background: #f3f5f8;
}

main {
  max-width: 70rem;
  margin: auto;
  padding: 1.5rem;
}

.catalogo {
  display: grid;
  grid-template-columns:
    repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
  gap: 1rem;
}

article {
  padding: 1.25rem;
  background: white;
  border: 1px solid #cbd5e1;
  border-radius: 0.75rem;
}

button {
  padding: 0.7rem 1rem;
  color: white;
  background: #1747a6;
  border: 0;
  border-radius: 0.4rem;
}

button:focus-visible {
  outline: 3px solid #8a3b00;
  outline-offset: 3px;
}

La cuadrícula adapta la cantidad de columnas al espacio disponible. El estilo de foco permite reconocer el botón seleccionado al navegar con teclado.


Una interfaz debe comunicar estados mediante texto y otros recursos; depender solamente de un color puede dificultar su interpretación.


1.3.4 JavaScript: comportamiento


JavaScript permite responder a eventos, procesar información y modificar la interfaz.


Por ejemplo:


const boton = document.querySelector("#mostrar-reglamento");
const reglamento = document.querySelector("#reglamento");

boton.addEventListener("click", () => {
  reglamento.hidden = !reglamento.hidden;

  boton.setAttribute(
    "aria-expanded",
    String(!reglamento.hidden)
  );
});

Este código:


  1. Localiza dos elementos.

  2. Escucha el clic.

  3. Cambia la visibilidad del reglamento.

  4. Actualiza el estado comunicado mediante aria-expanded.


El DOM, o modelo de objetos del documento, es la representación del documento que permite a JavaScript consultar y modificar sus elementos.


1.3.5 Ejemplo completo: catálogo con filtro local


El siguiente ejemplo integra HTML, CSS y JavaScript. Puede guardarse como catalogo.html y abrirse en un navegador.


Permite filtrar una lista local. No consulta un servidor ni registra préstamos: su propósito es mostrar cómo colaboran las tecnologías del frontend.


<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">

  <meta
    name="viewport"
    content="width=device-width, initial-scale=1"
  >

  <title>Catálogo del laboratorio</title>

  <style>
    * {
      box-sizing: border-box;
    }

    body {
      margin: 0;
      font-family: system-ui, sans-serif;
      line-height: 1.6;
      color: #172033;
      background: #f3f5f8;
    }

    main {
      max-width: 60rem;
      margin: auto;
      padding: 1.5rem;
    }

    .filtro {
      display: flex;
      gap: 0.5rem;
      align-items: center;
      margin-block: 1.5rem;
    }

    .catalogo {
      display: grid;
      grid-template-columns:
        repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
      gap: 1rem;
    }

    article {
      padding: 1.25rem;
      background: white;
      border: 1px solid #cbd5e1;
      border-radius: 0.75rem;
    }

    article h2 {
      margin-top: 0;
    }

    input:focus-visible {
      outline: 3px solid #1747a6;
      outline-offset: 3px;
    }
  </style>
</head>

<body>
  <main>
    <h1>Catálogo del laboratorio</h1>

    <p>
      Consulta los equipos y utiliza el filtro
      para mostrar solamente los disponibles.
    </p>

    <label class="filtro">
      <input id="solo-disponibles" type="checkbox">
      Mostrar solamente disponibles
    </label>

    <p id="resumen" role="status"></p>

    <section
      id="catalogo"
      class="catalogo"
      aria-label="Lista de equipos"
    ></section>

    <noscript>
      <p>
        Este ejemplo necesita JavaScript
        para construir el catálogo.
      </p>
    </noscript>
  </main>

  <script>
    const equipos = [
      { id: 1, nombre: "Laptop 01", disponible: true },
      { id: 2, nombre: "Laptop 02", disponible: false },
      { id: 3, nombre: "Proyector 01", disponible: true }
    ];

    const filtro =
      document.querySelector("#solo-disponibles");

    const catalogo =
      document.querySelector("#catalogo");

    const resumen =
      document.querySelector("#resumen");

    function mostrarEquipos() {
      const visibles = equipos.filter((equipo) => {
        return !filtro.checked || equipo.disponible;
      });

      catalogo.replaceChildren();

      for (const equipo of visibles) {
        const tarjeta = document.createElement("article");
        const titulo = document.createElement("h2");
        const estado = document.createElement("p");

        titulo.textContent = equipo.nombre;

        estado.textContent = equipo.disponible
          ? "Estado: disponible"
          : "Estado: prestado";

        tarjeta.append(titulo, estado);
        catalogo.append(tarjeta);
      }

      resumen.textContent =
        `Equipos mostrados: ${visibles.length}`;
    }

    filtro.addEventListener("change", mostrarEquipos);

    mostrarEquipos();
  </script>
</body>
</html>

Cómo funciona:


  • HTML establece las zonas de la página.

  • CSS organiza las tarjetas.

  • JavaScript almacena la lista de ejemplo.

  • El evento change detecta el cambio del filtro.

  • filter() selecciona los equipos correspondientes.

  • createElement() construye los elementos.

  • textContent inserta los nombres como texto.

  • role="status" permite comunicar la actualización del resumen a tecnologías de asistencia.


Si se cambia la disponibilidad en ese arreglo, solamente cambia la información de esa ejecución local. Otros usuarios no recibirían la modificación y, al recargar, se restaurarían los valores escritos en el código.


1.3.6 Consultar una API con JavaScript


Para obtener datos compartidos se puede utilizar fetch():


async function consultarEquipos() {
  const respuesta = await fetch("/api/equipos", {
    headers: {
      Accept: "application/json"
    }
  });

  if (!respuesta.ok) {
    throw new Error(
      `No fue posible consultar los equipos: ${respuesta.status}`
    );
  }

  return await respuesta.json();
}

La ruta es relativa al origen de la página y requiere un backend que la implemente.


await permite esperar el resultado dentro de una función asíncrona sin bloquear el hilo de JavaScript durante la espera de la red.


La comprobación de respuesta.ok es relevante: recibir un estado HTTP de error, como 404, no hace que fetch() rechace automáticamente la promesa.


La interfaz también debe manejar el resultado:


async function cargarCatalogo() {
  try {
    mostrarMensaje("Cargando equipos...");

    const equipos = await consultarEquipos();

    dibujarCatalogo(equipos);
    mostrarMensaje("Catálogo actualizado.");
  } catch (error) {
    mostrarMensaje(
      "No fue posible cargar el catálogo. Intenta nuevamente."
    );

    console.error(error);
  }
}

Las funciones mostrarMensaje() y dibujarCatalogo() representan funciones de la interfaz que deben implementarse.


1.3.7 Lenguajes y entornos del backend


El backend puede desarrollarse con distintas tecnologías.


Lenguaje

Entorno o plataforma

Ejemplos de frameworks

JavaScript o TypeScript

Node.js

Express, NestJS

PHP

PHP

Laravel, Symfony

Python

Python

Django, Flask

Java

JVM

Spring Boot

C#

.NET

ASP.NET Core

Ruby

Ruby

Ruby on Rails


No es necesario dominar todas para desarrollar una aplicación.


Node.js permite ejecutar JavaScript fuera del navegador. Incluye capacidades para trabajar con redes, archivos y otras funciones del sistema. Su documentación lo describe como un entorno de ejecución multiplataforma.


TypeScript incorpora comprobación estática de tipos al desarrollo basado en JavaScript. Su código habitualmente se transforma en JavaScript para ejecutarse. Los tipos no sustituyen la validación de los datos recibidos desde una red.


1.3.8 Bibliotecas y frameworks


Una biblioteca proporciona herramientas que el programa utiliza. Un framework establece una estructura más amplia y coordina parte de la ejecución.


Los frameworks web pueden facilitar:


  • Enrutamiento.

  • Procesamiento de solicitudes.

  • Plantillas.

  • Validación.

  • Acceso a datos.

  • Autenticación.

  • Pruebas.


Estas facilidades reducen trabajo repetitivo, pero deben configurarse y utilizarse correctamente. MDN explica que los frameworks del servidor ofrecen herramientas para resolver operaciones habituales del desarrollo web.


La elección debe considerar el conocimiento del equipo, la documentación, el mantenimiento y las necesidades del proyecto.


1.3.9 Bases de datos relacionales y no relacionales


Las bases de datos relacionales organizan información en tablas relacionadas y suelen utilizar SQL.


Ejemplos: PostgreSQL, MySQL y SQLite.


Un esquema ilustrativo en PostgreSQL sería:


CREATE TABLE usuarios (
    id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    nombre VARCHAR(120) NOT NULL
);

CREATE TABLE equipos (
    id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    codigo VARCHAR(30) NOT NULL UNIQUE,
    nombre VARCHAR(120) NOT NULL
);

CREATE TABLE prestamos (
    id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    usuario_id INTEGER NOT NULL REFERENCES usuarios(id),
    equipo_id INTEGER NOT NULL REFERENCES equipos(id),
    fecha_prestamo TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_devolucion TIMESTAMPTZ,
    CHECK (
        fecha_devolucion IS NULL
        OR fecha_devolucion >= fecha_prestamo
    )
);

CREATE UNIQUE INDEX un_prestamo_activo_por_equipo
ON prestamos (equipo_id)
WHERE fecha_devolucion IS NULL;

En este diseño:


  • PRIMARY KEY identifica cada registro.

  • NOT NULL impide omitir valores obligatorios.

  • UNIQUE evita códigos repetidos.

  • REFERENCES establece relaciones.

  • CHECK verifica una condición.

  • El índice único parcial impide tener dos préstamos activos del mismo equipo.


El ejemplo todavía requiere otras reglas, como el límite de préstamos por usuario y el tratamiento de equipos en mantenimiento.


PostgreSQL documenta restricciones de unicidad, claves primarias, claves foráneas y comprobaciones como mecanismos para preservar la integridad de los datos.


Las bases no relacionales abarcan modelos diferentes:


  • Documentos.

  • Clave-valor.

  • Grafos.

  • Familias de columnas.


No representan una opción universalmente superior o inferior. La elección depende de las consultas, las relaciones, las garantías necesarias y la operación del sistema.


1.3.10 Servidores, alojamiento y servicios de infraestructura


Un proyecto publicado necesita recursos de ejecución y conectividad.


Conviene distinguir:


  • Dominio: nombre utilizado para localizar un servicio.

  • DNS: sistema que publica información para resolver nombres.

  • Alojamiento: recursos donde se almacenan o ejecutan componentes.

  • Servidor HTTP: programa que atiende solicitudes.

  • Servidor de aplicaciones: entorno o proceso que ejecuta la lógica.

  • Certificado TLS: elemento utilizado para acreditar la identidad del servidor en HTTPS.

  • CDN: infraestructura distribuida que puede acercar contenido a los usuarios.


En un despliegue posible, Nginx recibe las solicitudes, sirve archivos y reenvía las operaciones dinámicas al proceso de la aplicación.


En otro, una plataforma administrada se ocupa de buena parte de esa infraestructura. La función sigue existiendo aunque el desarrollador no configure cada componente directamente.


1.3.11 Herramientas de desarrollo


Un entorno de trabajo también necesita herramientas para crear y mantener el sistema:


Herramienta

Utilidad

Editor o IDE

Escribir y revisar código

Herramientas del navegador

Inspeccionar elementos, solicitudes y errores

Git

Registrar cambios y colaborar

Gestor de paquetes

Administrar dependencias

Herramientas de prueba

Verificar comportamiento

Automatización de integración

Ejecutar revisiones de forma repetible

Contenedores

Empaquetar aplicaciones y dependencias


Git ayuda a recuperar versiones del código, pero no sustituye una estrategia de respaldo de la base de datos ni de los archivos subidos por usuarios.


1.3.12 Cómo seleccionar una combinación tecnológica


Una combinación de tecnologías se conoce como stack.


Para el sistema de préstamos podrían plantearse varias opciones:


  • HTML, CSS, JavaScript, PHP y PostgreSQL.

  • HTML, CSS, JavaScript, Python con Django y PostgreSQL.

  • HTML, CSS, JavaScript, Node.js y PostgreSQL.


La selección debería responder preguntas como:


  1. ¿Qué domina el equipo?

  2. ¿Qué infraestructura existe?

  3. ¿Qué funcionalidades se requieren?

  4. ¿Cuánto costará mantenerlo?

  5. ¿Quién atenderá fallas y actualizaciones?

  6. ¿Existen restricciones de integración?


Para un primer sistema pequeño, una aplicación modular con páginas generadas en el servidor y JavaScript puntual puede cubrir las necesidades con una complejidad manejable. Esta es una decisión propuesta para el caso del artículo, no una regla para todos los proyectos.



1.4 Planificación de aplicaciones web


Figura 5. Aspectos de la planificación y el ciclo de vida de la aplicación. El proceso admite revisión e iteración.

Figura 5. Aspectos de la planificación y el ciclo de vida de la aplicación. El proceso admite revisión e iteración. Ilustración didáctica original.


1.4.1 Planificar comienza por el problema


La planificación define qué se necesita construir, por qué, para quién, con qué recursos y cómo se verificará.


Una solicitud inicial podría ser:


“Necesitamos una página para prestar computadoras”.

Esa frase aún no aclara el problema.


Una descripción más útil sería:


El laboratorio registra los préstamos en papel. Esto dificulta conocer la disponibilidad, localizar equipos pendientes de devolución y consultar el historial de cada usuario.

La segunda descripción permite identificar resultados esperados, incluso antes de elegir un lenguaje.


1.4.2 Identificar interesados y usuarios


Los interesados son las personas o áreas que influyen en el proyecto o reciben sus efectos.


En el ejemplo:


Interesado

Necesidad

Estudiante

Consultar y solicitar equipos

Encargado

Controlar préstamos y devoluciones

Docente

Conocer disponibilidad

Dirección

Consultar reportes

Administrador técnico

Mantener y recuperar el sistema


Una misma persona puede desempeñar varios roles.


También conviene observar el proceso real:


  • ¿Cómo se identifica al solicitante?

  • ¿Quién entrega físicamente el equipo?

  • ¿Se necesita aprobación?

  • ¿Qué ocurre si regresa dañado?

  • ¿Cómo se registra un préstamo sin conexión?

  • ¿Quién corrige un error de captura?


Estas preguntas descubren requisitos que una lista de pantallas puede pasar por alto.


1.4.3 Definir objetivos comprobables


Un objetivo general podría ser:


Centralizar el registro de préstamos y devoluciones para conocer la situación de los equipos.

Los objetivos específicos deberían poder verificarse:


  • Mostrar equipos elegibles para préstamo.

  • Registrar quién recibe cada equipo.

  • Impedir préstamos activos duplicados.

  • Conservar el historial.

  • Producir un reporte de préstamos pendientes.


Para evaluar el beneficio, primero conviene medir el proceso actual.


Por ejemplo, si localizar un préstamo en papel toma varios minutos, puede definirse una meta de consulta y comprobarla con usuarios reales.


1.4.4 Delimitar el alcance


El alcance establece qué se entregará en una versión.


Primera versión propuesta:


  • Inicio y cierre de sesión.

  • Catálogo de equipos.

  • Registro de préstamos.

  • Registro de devoluciones.

  • Consulta de préstamos activos.

  • Administración básica de usuarios.


Posibles versiones posteriores:


  • Lectura de códigos QR.

  • Recordatorios.

  • Reservaciones por horario.

  • Reportes avanzados.

  • Integración con otros sistemas.


Esta separación permite entregar una solución útil sin incorporar todas las ideas al mismo tiempo.


Un cambio que parece pequeño puede ampliar considerablemente el proyecto. “Enviar recordatorios” también implica definir destinatarios, horarios, reintentos, plantillas y tratamiento de errores.


1.4.5 Requisitos funcionales


Los requisitos funcionales describen lo que debe hacer el sistema.


Identificador

Requisito

RF-01

Permitir iniciar sesión a usuarios habilitados

RF-02

Mostrar el catálogo según los permisos

RF-03

Registrar préstamos elegibles

RF-04

Registrar devoluciones

RF-05

Impedir dos préstamos activos del mismo equipo

RF-06

Permitir al usuario consultar su historial

RF-07

Permitir al encargado consultar préstamos pendientes


Es preferible describir comportamientos observables.


“Debe ser moderno” no aclara qué implementar ni cómo verificarlo.


1.4.6 Requisitos no funcionales


Los requisitos no funcionales describen cualidades y condiciones de operación.


Categoría

Ejemplo

Seguridad

Verificar permisos en cada operación protegida

Rendimiento

Definir un tiempo de respuesta bajo una carga concreta

Accesibilidad

Permitir completar los flujos principales con teclado

Compatibilidad

Funcionar en los navegadores acordados

Recuperación

Restaurar datos mediante un procedimiento probado

Mantenimiento

Documentar configuración y despliegue

Privacidad

Limitar los datos recopilados a lo necesario


Un requisito de rendimiento debe indicar cómo se medirá.


Por ejemplo:


En un entorno de prueba definido, con un volumen de datos y concurrencia acordados, el percentil 95 de las consultas del catálogo deberá completarse en menos de dos segundos.

El percentil 95 expresa que el 95 % de las mediciones queda en ese valor o por debajo. El número utilizado aquí es ilustrativo y debe ajustarse al contexto.


1.4.7 Historias de usuario y criterios de aceptación


Una historia de usuario expresa una necesidad:


Como encargado del laboratorio, quiero registrar la devolución de un equipo para que pueda volver a prestarse.

Los criterios de aceptación convierten esa necesidad en condiciones comprobables:


  • El préstamo debe existir y estar activo.

  • El usuario debe tener permiso.

  • Debe registrarse la fecha de devolución.

  • Una segunda devolución no debe duplicar la operación.

  • La disponibilidad debe actualizarse de forma coherente.


Ejemplo:


Dado un préstamo activo del equipo 12,
cuando un encargado autorizado registra la devolución,
entonces el préstamo queda finalizado
y el equipo puede volver a solicitarse
si no tiene otra condición que lo impida.

La última condición es necesaria: devolver un equipo dañado no significa que deba quedar inmediatamente disponible.


1.4.8 Analizar factibilidad


Antes de comprometer el proyecto conviene revisar:


Factibilidad técnica: infraestructura, conectividad, conocimientos e integraciones.


Factibilidad económica: desarrollo, dominio, alojamiento, mantenimiento y soporte.


Factibilidad operativa: personas que usarán el sistema y capacidad para incorporarlo al trabajo.


Factibilidad temporal: posibilidad de terminar y verificar el alcance dentro del plazo.


También deben identificarse las obligaciones aplicables al tratamiento de datos y al uso de servicios. La planificación necesita determinar quién será responsable de esa revisión.


Un sistema técnicamente correcto puede fracasar si nadie mantiene actualizado el inventario.


1.4.9 Diseñar procesos, navegación e interfaces


Antes de programar conviene representar el flujo de trabajo.


Solicitud de préstamo:


  1. El usuario inicia sesión.

  2. Consulta equipos.

  3. Selecciona uno.

  4. Revisa condiciones.

  5. Confirma.

  6. El sistema verifica reglas.

  7. Muestra el resultado.


También deben diseñarse las rutas alternativas:


  • Sesión vencida.

  • Equipo recién prestado.

  • Usuario suspendido.

  • Conexión interrumpida.

  • Datos inválidos.


Un wireframe muestra la organización de una pantalla sin necesidad de definir todos sus detalles visuales.


Un prototipo permite explorar interacciones antes de implementar la aplicación completa.


Las pantallas deben contemplar estados vacíos, errores y carga, además del resultado exitoso.


1.4.10 Planificar accesibilidad desde el inicio


La accesibilidad permite que personas con distintas capacidades utilicen el sistema.


Entre las decisiones iniciales se encuentran:


  • Utilizar controles semánticos.

  • Proporcionar etiquetas.

  • Mantener contraste suficiente.

  • Conservar foco visible.

  • Evitar instrucciones basadas solamente en color.

  • Explicar errores junto a los campos correspondientes.

  • Permitir ampliación del contenido.

  • Evaluar navegación con teclado.


WCAG organiza la accesibilidad alrededor de cuatro principios: contenido perceptible, operable, comprensible y robusto. W3C también recomienda incorporarla durante todo el proceso, con responsabilidades y evaluación continua.


Una herramienta automática puede detectar ciertos problemas, pero la evaluación también necesita revisión manual de los flujos.


1.4.11 Diseñar datos, permisos y contratos


La planificación debe resolver decisiones que afectan a toda la aplicación:


  • Qué entidades existen.

  • Cómo se relacionan.

  • Qué estados son válidos.

  • Qué operaciones permite cada rol.

  • Qué información intercambian los componentes.


Una matriz inicial de permisos podría ser:


Operación

Estudiante

Encargado

Administrador

Consultar catálogo

Sí

Sí

Sí

Consultar historial propio

Sí

Sí

Sí

Consultar préstamos de todos

No

Sí

Sí

Registrar devoluciones

No

Sí

Sí

Administrar usuarios

No

No

Sí


Esta matriz es una propuesta del ejemplo. Debe validarse con la institución.


El contrato de una API debe especificar:


  • Método y ruta.

  • Datos de entrada.

  • Autenticación.

  • Reglas.

  • Respuestas exitosas.

  • Errores posibles.


Acordarlo evita que frontend y backend trabajen con interpretaciones diferentes.


1.4.12 Identificar riesgos


Un riesgo es una situación incierta que puede afectar el proyecto.


Riesgo

Consecuencia

Respuesta prevista

Préstamos simultáneos

Duplicación

Transacciones y restricciones

Pérdida de datos

Historial incompleto

Respaldos y restauración probada

Falla de conexión

Operación interrumpida

Procedimiento de contingencia

Uso de cuenta ajena

Operaciones atribuidas incorrectamente

Controles de identidad y sesión

Ampliación continua del alcance

Retraso

Priorización y control de cambios

Falta de capacitación

Registros incorrectos

Guías y acompañamiento


La existencia de un respaldo no demuestra que pueda recuperarse el sistema. Es necesario realizar una restauración de prueba.


1.4.13 Priorizar una primera versión útil


Un producto mínimo viable es una versión limitada que permite resolver una necesidad relevante y obtener evidencia de uso.


Para este sistema, la primera versión necesita registrar préstamos con integridad. Puede posponer gráficos complejos.


La priorización puede considerar:


  • Valor para el usuario.

  • Riesgo.

  • Dependencias.

  • Esfuerzo.

  • Frecuencia de uso.


“Conservar correctamente los préstamos” tiene prioridad sobre “personalizar el color del panel”.


1.4.14 Organizar el trabajo en incrementos


Una secuencia posible sería:


Incremento

Resultado verificable

1

Problema, alcance y reglas acordados

2

Modelo de datos y prototipo revisados

3

Acceso y catálogo funcionales

4

Préstamos y devoluciones funcionales

5

Pruebas, correcciones y recuperación

6

Publicación, capacitación y seguimiento


Esto no significa que cada incremento dure una semana. La duración depende del tamaño del equipo, las horas disponibles y la complejidad.


El trabajo iterativo permite revisar decisiones cuando aparece nueva información. No elimina la necesidad de documentarlas.


1.4.15 Planificar pruebas


Las pruebas deben derivarse de los requisitos y riesgos.


Para el sistema de préstamos resultan especialmente útiles estos casos:


Caso

Resultado esperado

Usuario habilitado solicita equipo libre

Se registra el préstamo

Usuario suspendido intenta solicitarlo

Se rechaza

Dos usuarios solicitan el mismo equipo

Solo uno obtiene el préstamo

Estudiante intenta registrar devolución

Se deniega según la política

Se repite una devolución

No se duplica

Se modifica el identificador de otro usuario

No se expone información sin permiso

Se restaura un respaldo

Se recuperan datos y funcionamiento


Pueden combinarse pruebas de reglas, integración, flujos completos, seguridad, accesibilidad y rendimiento.


Probar solamente las pantallas no demuestra que las restricciones de la base funcionen bajo concurrencia.


1.4.16 Preparar publicación y mantenimiento


Publicar requiere más que copiar archivos.


Debe establecerse:


  • Configuración del entorno.

  • Gestión de secretos.

  • Dominio y HTTPS.

  • Migraciones de base de datos.

  • Monitoreo.

  • Respaldos.

  • Procedimiento de reversión.

  • Responsable de soporte.


Conviene distinguir ambientes:


  • Desarrollo: construcción.

  • Pruebas: verificación.

  • Producción: uso real.


Después de publicar continúan la corrección de errores, actualización de dependencias, revisión de accesos y atención a los usuarios.


1.4.17 Mantener trazabilidad


La trazabilidad conecta una necesidad con su implementación y su verificación.


Necesidad

Requisito

Implementación

Verificación

Evitar duplicación

RF-05

Regla del backend y restricción de datos

Solicitudes simultáneas

Proteger historiales

Acceso por permisos

Autorización por recurso

Intento de consulta ajena

Recuperar información

Requisito de recuperación

Respaldo y procedimiento

Restauración

Facilitar uso con teclado

Requisito de accesibilidad

Controles y foco adecuados

Recorrido manual


Esta relación ayuda a demostrar que el sistema responde al problema original.



Integración del ejemplo: de la pantalla al préstamo registrado


El sistema de préstamos permite reunir los cuatro subtemas.


La evolución explica por qué una página informativa puede transformarse en una aplicación que recibe solicitudes y conserva historiales.


La arquitectura establece que la interfaz recibe la intención del usuario, el backend verifica las reglas y la base de datos conserva el resultado.


Las tecnologías permiten implementar esas responsabilidades: HTML estructura, CSS presenta, JavaScript facilita interacciones y el backend coordina operaciones persistentes.


La planificación determina qué debe construirse, qué límites tendrá y cómo se comprobará su funcionamiento.


Una solicitud completa seguiría este recorrido:


  1. El usuario pulsa “Solicitar préstamo”.

  2. El navegador envía la petición.

  3. El backend identifica al usuario.

  4. Comprueba sus permisos.

  5. Valida el identificador del equipo.

  6. Coordina las comprobaciones y el registro dentro de una operación consistente.

  7. La base de datos aplica sus restricciones.

  8. El servidor confirma o informa un conflicto.

  9. La interfaz presenta el resultado.

  10. El sistema conserva el registro necesario para seguimiento.


Que el botón responda es solamente una parte del funcionamiento. La operación está bien resuelta cuando la respuesta es correcta, los datos quedan consistentes y cada usuario actúa dentro de sus permisos.


Referencias y enlaces de consulta


Las siguientes fuentes incluyen explicaciones conceptuales, documentación técnica y guías para ampliar los temas.


  1. CERN. Historia de la Web. Origen y desarrollo inicial de la World Wide Web. https://home.cern/science/computing/the-birth-of-the-web/

  2. MDN Web Docs. Cómo funciona la Web. Navegadores, servidores, DNS y recursos. https://developer.mozilla.org/es/docs/Learn_web_development/Getting_started/Web_standards/How_the_web_works

  3. MDN Web Docs. Introducción a la programación del lado del servidor. Contenido dinámico y responsabilidades del backend. https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/First_steps/Introduction

  4. MDN Web Docs. Visión general de cliente y servidor. Solicitudes, procesamiento y respuestas. https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Server-side/First_steps/Client-Server_overview

  5. MDN Web Docs. Visión general de HTTP. Fundamentos del protocolo. https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview

  6. Microsoft Learn. Arquitectura de N niveles. Capas lógicas y niveles físicos. https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

  7. Microsoft Learn. Arquitectura de microservicios. Características y compromisos operativos. https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices

  8. MDN Web Docs. Aprende desarrollo web. Formación en HTML, CSS, JavaScript y herramientas. https://developer.mozilla.org/es/docs/Learn_web_development

  9. Node.js. Introducción oficial. Entorno de ejecución de JavaScript. https://nodejs.org/learn/getting-started/introduction-to-nodejs

  10. PostgreSQL. Restricciones. Integridad, unicidad y relaciones entre tablas. https://www.postgresql.org/docs/18/ddl-constraints.html

  11. MDN Web Docs. Aplicaciones web progresivas. Características y desarrollo de PWA. https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps

  12. OWASP. Prevención de inyección SQL. Consultas parametrizadas y otras medidas de protección. https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

  13. OWASP. Gestión de sesiones. Protección de sesiones e identificadores. https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html

  14. W3C WAI. Introducción a WCAG. Estándares de accesibilidad web. https://www.w3.org/WAI/standards-guidelines/wcag/

  15. W3C WAI. Planificación y gestión de la accesibilidad web. Integración de accesibilidad durante el proyecto. https://www.w3.org/WAI/planning-and-managing/


 
 
 

Comentarios


bottom of page

Laboratorio interactivo de ondas

Ajusta la frecuencia y la longitud de onda. Observa cómo cambia la rapidez de propagación y el perfil de la onda.

v = f × λ
v = f λ = 2.0 × 3.0 = 6.0 m/s
Punto de observaciónλ
Un punto del medio oscila mientras la onda transporta energía.