Saltar al contenido
Framework Ecosystems LabsUn contrato, muchos ecosistemas, la misma prueba.

📖 Glosario#

🏠 Repositorio · 🚀 Empezar · 🎓 Clases · 🗺️ Atlas

Todo el vocabulario del programa en un sitio: 138 conceptos con su definición y dónde se enseña, las 138 tecnologías del catálogo y las 9 cadenas de herramientas.

Este archivo se genera. Los conceptos viven en glosario/conceptos.json, las tecnologías en catalog/frameworks.json y las cadenas en scripts/lib/cadenas.mjs. Cada concepto declara la clase o el módulo donde se enseña, y node scripts/generate-glosario.mjs --check falla si esa referencia no resuelve — un glosario cuyos enlaces mienten es peor que no tenerlo.

Las clases marcadas con 🚧 están en esqueleto: el contrato y el elenco están fijados, la prosa todavía no.

🔤 Índice alfabético#

A · Active Record · Almacén por petición · Alternativa real · AOP → Aspecto · application/problem+json → RFC 9457 · Archivo de bloqueo · Argon2 → Función de derivación de clave · Arranque en frío · Aspecto · Auditoría · Autorización por recurso · Autorización por rol

Á · Ámbito

B · bcrypt → Función de derivación de clave · Biblioteca · Breaking change → Cambio incompatible · Bucle de eventos

C · Cabecera · Caché condicional · Cadena de herramientas · Cadena de suministro · Cambio incompatible · Capa → Middleware · Carga anticipada · Carga de datos junto a la ruta · Carga perezosa · Cascada de peticiones · Categoría de catálogo · Chunked transfer encoding → Codificación troceada · Ciclo de vida → Ámbito · Clave de lista · Codificación troceada · Código de estado · Cola de trabajo · Comparación en tiempo constante · Componente · Componente de servidor · Comprobación previa · Configuración por entorno · Conflicto · Consulta parametrizada · Contenedor de dependencias · Contenedor de inversión de control → Contenedor de dependencias · Contrato · Convención · Convención sobre configuración → Convención · Cookie · CORS · Coste total · Cross-Site Scripting → XSS · CSP → Política de seguridad de contenido · CSRF

D · Data Mapper · Decorador · Dependencia · Dependencia transitiva · Doble de prueba · DOM virtual

E · Eager loading → Carga anticipada · Efecto · Elenco · Empaquetado · Entorno de ejecución → Runtime · Enumeración de usuarios · Enviar-redirigir-mostrar · EOL → Fin de vida · Escapado · Esquema · Estado · Estado compartido · Estado del servidor · ETag → Caché condicional · Event loop → Bucle de eventos · Evento · Evento de dominio · Eventos enviados por el servidor

F · Fake → Doble de prueba · Falsificación de petición entre sitios → CSRF · Fijación de sesión · Filtrado · Filtro → Middleware · Fin de vida · Formulario controlado · Framework · Función de derivación de clave

G · Generación estática · Grupo de conexiones

H · Hash de contraseña → Función de derivación de clave · Health check → Salud y preparación · Hidratación · Higuera estranguladora · Hipermedia

I · Idempotencia · Identificador de correlación · Idiomático · Intercambio de recursos entre orígenes → CORS · Interceptor → Middleware · Inversión de control · Inyección SQL · IoC → Inversión de control · Isla

J · JWT → Token de acceso

K · Key → Clave de lista · kind → Categoría de catálogo

L · Lazy loading → Carga perezosa · Librería → Biblioteca · Limitación de tasa · Lockfile → Archivo de bloqueo

M · Manifiesto · Mapeador objeto-relacional → ORM · Medir antes de optimizar · Mejora progresiva · Metaframework · Método HTTP · Método plantilla · Métrica · Micro-frontend · Middleware · Migración · Migrar sin parar · Mock → Doble de prueba

N · Negociación de contenido · Nonce

O · OAuth 2.0 · Offline-first → Sin conexión primero · OpenAPI · OpenID Connect · Origen · ORM

P · Paginación · Percentil · Pirámide de pruebas · Pista · PKCE · Política de seguridad de contenido · Polling → Sondeo · Pool → Grupo de conexiones · POST/Redirect/GET → Enviar-redirigir-mostrar · Preflight → Comprobación previa · Presupuesto de JavaScript · Principio de Hollywood → Inversión de control · Problem Details → RFC 9457 · Problema N+1 · Programación orientada a aspectos → Aspecto · Prop → Propiedad · Propiedad · Prueba de caracterización · Prueba de contrato

R · Rate limiting → Limitación de tasa · Reactividad · Readiness → Salud y preparación · Redirección · Registro estructurado · Reintento · Renderizado en el servidor · Repositorio · Respuesta en flujo · RFC 9457 · Runtime

S · Salud y preparación · Scope → Ámbito · Secreto · Seed → Semilla · Seguro (método) · Semilla · SemVer → Versionado semántico · Señal · Sesión · Signal → Señal · Sin conexión primero · Sincronización · Sondeo · SSE → Eventos enviados por el servidor · SSG → Generación estática · SSR → Renderizado en el servidor · Strangler fig → Higuera estranguladora · Streaming → Respuesta en flujo · Stub → Doble de prueba

T · Tarea programada · Taxonomía · Terminación temprana · Testigo sincronizado · Token CSRF → Testigo sincronizado · Token de acceso · Toolchain → Cadena de herramientas · Transacción · Traza

U · Un hilo por petición

V · Validación · Verbo HTTP → Método HTTP · Verde honesto · Versionado de API · Versionado semántico

W · WebSocket

X · XSS

🧠 Los conceptos, por área#

El método: qué es un framework y cómo se compara#

Alternativa real#

Lo que puede ocupar el sitio de una tecnología sin cambiar de lenguaje ni de ecosistema. No es lo mismo que un competidor: NestJS compite con Spring Boot y no tiene ninguna alternativa dentro de Node. Es la cifra que importa cuando la pregunta es «¿y si esto no funciona, qué pongo en su lugar?».

Se enseña en la clase 004 · se desarrolla en el módulo 00 · ver también Taxonomía, Coste total, Categoría de catálogo.

Biblioteca#

Código de terceros que tú llamas. Tú mantienes el control del programa y le pides cosas cuando las necesitas. node:http implementa HTTP/1.1 entero y sigue siendo una biblioteca: lo que no hace es llamarte.

También: (Librería)

Se enseña en la clase 001 · ver también Framework.

Bucle de eventos#

El modelo de concurrencia de Node.js y de Python asíncrono: un solo hilo que atiende muchas peticiones intercalando el trabajo mientras espera. Nada se bloquea salvo que tú lo bloquees — y si lo bloqueas, se paran todas.

También: (Event loop)

Se enseña en la clase 022 · se desarrolla en el módulo 02 · ver también Un hilo por petición, Runtime.

La etiqueta que dice qué hace una tecnología: web-framework, ui-library, orm, react-metaframework… El repositorio usa treinta y siete y las define en catalog/frameworks.json, junto a los datos que clasifica. Es la columna «Categoría» de todas las clases, y la que decide si dos tecnologías son comparables.

También: (kind)

Se enseña en la clase 004 · se desarrolla en el módulo 00 · ver también Taxonomía, Metaframework.

Convención#

Una regla que el framework da por supuesta sin que la escribas: que la clase RaizController atiende la ruta raiz#mostrar, que las plantillas están en un directorio concreto. Menos código, y más cosas que aprender antes de poder leerlo.

También: (Convención sobre configuración)

Se enseña en la clase 005 · se desarrolla en el módulo 02 · ver también Idiomático.

Coste total#

Lo que cuesta un framework más allá del código: aprenderlo, mantenerlo actualizado, encontrar a quien lo conozca y salir de él. Las cuatro dimensiones se deciden juntas y solo la primera es visible el primer día.

Se enseña en la clase 006 · se desarrolla en el módulo 11 · ver también Fin de vida, Dependencia.

Framework#

Código de terceros que te llama a ti. Él tiene el bucle de control del programa y tú rellenas los huecos que deja. La definición no menciona el tamaño: Express son unas pocas líneas de API pública y es un framework.

Se enseña en la clase 001 · ver también Biblioteca, Inversión de control.

Idiomático#

Código escrito como lo escribiría quien conoce ese framework, en lugar de traducido literalmente desde otro. Un Express escrito como si fuera Spring funciona y pierde todo lo que hacía valioso a Express.

Se enseña en la clase 005 · ver también Convención.

Inversión de control#

Que el flujo del programa lo dirija el framework y no tu código. Se resume en «no nos llames, nosotros te llamamos». Es medible desde fuera: un manejador registrado y nunca invocado por tu código que aun así se ejecuta una vez por petición.

También: (IoC, Principio de Hollywood)

Se enseña en la clase 002 · se desarrolla en el módulo 02 · ver también Framework, Contenedor de dependencias, Método plantilla.

Metaframework#

Un framework construido sobre otro que añade enrutado, renderizado en servidor, carga de datos y empaquetado. Next.js sobre React, Nuxt sobre Vue, SvelteKit sobre Svelte. Compite con otros metaframeworks, no con la biblioteca que lleva dentro.

Se enseña en la clase 004 · se desarrolla en el módulo 00 · ver también Taxonomía.

Método plantilla#

El patrón que formaliza la inversión de control: el esqueleto del algoritmo lo pone quien escribió el framework y tú rellenas pasos concretos. Un servidor HTTP es ese esqueleto —aceptar, leer, elegir manejador, responder, cerrar— y tu manejador es el hueco.

Se enseña en la clase 001 · ver también Inversión de control.

Runtime#

El programa que ejecuta tu código: Node.js para JavaScript, CPython para Python, la JVM para Java, el CLR para C#. No es un framework y decide cosas que ningún framework puede cambiar — empezando por el modelo de concurrencia.

También: (Entorno de ejecución)

Se enseña en la clase 001 · ver también Bucle de eventos, Un hilo por petición.

Taxonomía#

Clasificar antes de comparar. React y Next.js no compiten: uno es biblioteca de interfaz y el otro un metaframework que la usa. Comparar piezas de categorías distintas produce conclusiones que no significan nada.

Se enseña en la clase 004 · se desarrolla en el módulo 00 · ver también Metaframework, Elenco, Categoría de catálogo, Alternativa real.

Un hilo por petición#

El modelo de concurrencia de la JVM y de .NET: cada petición ocupa un hilo del grupo mientras dura. Simple de razonar, y el grupo es finito — doscientas peticiones lentas simultáneas agotan un servidor de doscientos hilos.

Se enseña en la clase 022 · se desarrolla en el módulo 02 · ver también Bucle de eventos, Runtime, Grupo de conexiones.

HTTP: la conversación que hay debajo de todo#

Cabecera#

Metadato de una petición o una respuesta: qué formato lleva el cuerpo, quién eres, qué aceptas de vuelta, cuánto se puede cachear. Los nombres no distinguen mayúsculas, y una misma cabecera puede venir repetida.

Se enseña en la clase 016 · ver también Negociación de contenido.

Caché condicional#

Que el cliente pregunte «¿ha cambiado?» enviando la huella que guardó, y el servidor responda 304 sin cuerpo si no. Ahorra ancho de banda sin renunciar a la frescura.

También: (ETag)

Se enseña en la clase 048 · ver también Negociación de contenido.

Codificación troceada#

La forma en que HTTP/1.1 envía un cuerpo sin declarar su longitud: en trozos, cada uno precedido por su tamaño. Es lo que permite que el cliente empiece a leer antes de que el servidor sepa cuánto va a enviar.

También: (Chunked transfer encoding)

Se enseña en la clase 022 · ver también Respuesta en flujo.

Código de estado#

El número de tres cifras de la respuesta. 2xx salió bien, 3xx está en otro sitio, 4xx se equivocó el cliente, 5xx se equivocó el servidor. La frontera entre 4xx y 5xx dice de quién es el problema, y por tanto quién tiene que arreglarlo.

Se enseña en la clase 015 · se desarrolla en el módulo 01 · ver también Método HTTP.

Comprobación previa#

La petición OPTIONS que el navegador envía antes de una petición entre orígenes que no sea trivial, para preguntar si está permitida. Su respuesta se cachea el tiempo que diga Access-Control-Max-Age.

También: (Preflight)

Se enseña en la clase 024 · ver también CORS.

CORS#

El mecanismo por el que un servidor autoriza a páginas de otro origen a leer sus respuestas. No protege al servidor: protege a los usuarios de otras páginas. Su configuración más insegura empieza siendo la más cómoda — reflejar cualquier origen.

También: (Intercambio de recursos entre orígenes)

Se enseña en la clase 024 · ver también Origen, Comprobación previa.

Enviar-redirigir-mostrar#

Responder a un POST con una redirección en lugar de con la página. Sin ese patrón, recargar reenvía el formulario y el navegador pregunta «¿reenviar datos?» — creando otro registro.

También: (POST/Redirect/GET)

Se enseña en la clase 080 · ver también Redirección, Idempotencia.

Idempotencia#

Que repetir la misma petición produzca el mismo estado final. PUT y DELETE lo son por definición; POST no. La idempotencia viene de lo que hace el código, no del verbo: un PUT que acumule en vez de reemplazar rompe la promesa.

Se enseña en la clase 047 · ver también Método HTTP, Reintento.

Método HTTP#

Lo que la petición pretende: GET leer, POST crear, PUT reemplazar entero, PATCH modificar una parte, DELETE borrar. No es decoración: de que GET no cambie nada dependen las cachés, los buscadores y la defensa contra CSRF.

También: (Verbo HTTP)

Se enseña en la clase 014 · se desarrolla en el módulo 01 · ver también Idempotencia, Seguro (método).

Negociación de contenido#

Que el mismo recurso se sirva en el formato que el cliente prefiere, según su cabecera Accept. Obliga a emitir Vary: Accept: sin ella una caché serviría el HTML a quien pidió JSON, porque para ella las dos peticiones son la misma URL.

Se enseña en la clase 018 · ver también Cabecera, Caché condicional.

Origen#

La terna esquema + host + puerto. https://ejemplo.com y https://ejemplo.com:8443 son orígenes distintos. Casi toda la seguridad del navegador está construida sobre esa frontera.

Se enseña en la clase 024 · ver también CORS, CSRF.

Redirección#

Una respuesta que dice «está en otro sitio». Se decide en dos ejes: permanente o temporal, y conservando el método o no. 301 permanente, 302 temporal, 307 temporal conservando el método, 308 permanente conservándolo. El 301 se cachea y cuesta retirarlo.

Se enseña en la clase 019 · ver también Código de estado, Enviar-redirigir-mostrar.

Respuesta en flujo#

Enviar la respuesta a trozos, sin conocer su tamaño total de antemano. Se consigue omitiendo Content-Length, lo que activa la codificación troceada. En modelos de un hilo por petición exige mecanismos propios para no retener el hilo.

También: (Streaming)

Se enseña en la clase 022 · ver también Codificación troceada, Un hilo por petición.

Seguro (método)#

Un método que no cambia el estado del servidor. GET y HEAD lo son. Un GET que transfiera dinero es indefendible: bastaría una etiqueta <img> en cualquier página para dispararlo.

Se enseña en la clase 072 · ver también Método HTTP, CSRF.

La tubería: middleware, filtros e interceptores#

Almacén por petición#

El sitio donde una capa deja datos para las siguientes sin usar variables globales: peticion.traza en Express, contexto.Items en .NET, peticion.state en Starlette, los atributos de la petición en el mundo de los servlets. Cuatro nombres, un problema.

Se enseña en la clase 027 · ver también Middleware, Identificador de correlación.

Ámbito#

Cuánto vive un objeto que construye el contenedor: uno para todo el proceso, uno por petición, o uno por cada vez que se pide. Un objeto de vida larga que depende de uno de vida corta es un error con nombre — dependencia cautiva.

También: (Scope, Ciclo de vida)

Se enseña en la clase 037 · ver también Contenedor de dependencias.

Aspecto#

Comportamiento transversal enganchado a la ejecución de un método, no al transporte. A diferencia de un middleware, no sabe nada de HTTP: el mismo aspecto sirve para una petición web, una tarea programada o una prueba.

También: (Programación orientada a aspectos, AOP)

Se enseña en la clase 038 · ver también Middleware, Decorador.

Contenedor de dependencias#

La pieza que construye tus objetos y les entrega lo que necesitan. Es la consecuencia inevitable de la inversión de control: si el framework llama a tu función, alguien tiene que darle sus dependencias, porque tú ya no puedes.

También: (Contenedor de inversión de control)

Se enseña en la clase 036 · se desarrolla en el módulo 02 · ver también Inversión de control, Ámbito.

Decorador#

Una función que recibe otra función, la envuelve y devuelve la envoltura. En Python y TypeScript tiene sintaxis propia; en JavaScript es una llamada corriente. Registrar una ruta con un decorador y con una llamada a método es el mismo mecanismo.

Se enseña en la clase 038 · ver también Aspecto, Middleware.

Identificador de correlación#

Un identificador que acompaña a una petición por todos los servicios que atraviesa, para poder seguirla en los registros. Se respeta si viene y se genera si falta, y se limita en longitud: entra en los registros y lo controla el cliente.

Se enseña en la clase 030 · se desarrolla en el módulo 08 · ver también Almacén por petición, Traza.

Limitación de tasa#

Poner un tope de peticiones por cliente y ventana de tiempo. Su respuesta 429 debe llevar Retry-After: sin ella el cliente reintenta en bucle, que es lo que se quería evitar. Con varias instancias, el estado tiene que ser compartido.

También: (Rate limiting)

Se enseña en la clase 034 · ver también Middleware.

Middleware#

Una pieza que envuelve al manejador: recibe la petición, hace su parte y llama —o no— a la siguiente. La cadena se recorre hacia dentro y se deshace hacia fuera. Cada ecosistema le da un nombre distinto y el mecanismo es el mismo.

También: (Capa, Filtro, Interceptor)

Se enseña en la clase 026 · se desarrolla en el módulo 02 · ver también Terminación temprana, Aspecto.

Terminación temprana#

Cortar la cadena respondiendo sin llamar a la siguiente capa. No necesita ningún mecanismo especial: cortar es simplemente no continuar. Es cómo se implementa una comprobación de autenticación.

Se enseña en la clase 028 · ver también Middleware.

Validación, contrato y API#

Cambio incompatible#

Un cambio que hace fallar a un cliente que funcionaba. Quitar un campo lo es; añadir uno opcional, no. Saber cuál es cuál es lo que permite evolucionar una API sin coordinar despliegues.

También: (Breaking change)

Se enseña en la clase 050 · ver también Versionado de API, Prueba de contrato.

Esquema#

Una descripción declarativa de la forma que deben tener unos datos. Un mismo esquema puede servir para validar la entrada, generar la documentación y tipar el código — tres usos de una sola declaración.

Se enseña en la clase 041 · ver también Validación, OpenAPI.

Filtrado#

Acotar una lista por criterios que llegan del cliente. El riesgo no es la sintaxis: es aceptar como campo de ordenación cualquier texto que llegue, que es una inyección con otro nombre.

Se enseña en la clase 046 · ver también Paginación, Inyección SQL.

OpenAPI#

El formato estándar para describir una API HTTP: rutas, parámetros, cuerpos y respuestas. Cuando se deriva del código en lugar de escribirse aparte, no puede quedarse desactualizado.

Se enseña en la clase 043 · se desarrolla en el módulo 01 · ver también Esquema.

Paginación#

Devolver los resultados por tramos en lugar de todos. Por desplazamiento es fácil y se desordena cuando alguien inserta mientras paginas; por cursor es estable y no permite saltar a la página 37.

Se enseña en la clase 045 · ver también Filtrado.

RFC 9457#

El formato estándar de los errores de una API HTTP: un objeto con type, title, status y detail, más los campos propios que hagan falta. Un 422 que solo diga «datos inválidos» impide construir una interfaz accesible.

También: (Problem Details, application/problem+json)

Se enseña en la clase 040 · se desarrolla en el módulo 01 · ver también Validación, Código de estado.

Validación#

Rechazar entradas que no cumplen las reglas, antes de que lleguen al dominio. No es lo mismo que escapar: validar rechaza entradas, escapar neutraliza salidas, y se necesitan las dos en momentos distintos.

Se enseña en la clase 039 · se desarrolla en el módulo 01 · ver también Esquema, Escapado.

Versionado de API#

Cómo se publica un cambio que rompe a los clientes existentes. En la ruta, en una cabecera o por negociación de contenido; lo que no cambia es la obligación de decidir cuánto tiempo se mantiene la versión anterior.

Se enseña en la clase 044 · se desarrolla en el módulo 11 · ver también Cambio incompatible.

Datos y persistencia#

Active Record#

El patrón en que el objeto de dominio sabe guardarse: tarea.save(). Rápido de escribir y difícil de probar sin base de datos, porque el dominio y el almacenamiento son la misma clase.

Se enseña en la clase 053 · se desarrolla en el módulo 06 · ver también Data Mapper, ORM.

Carga anticipada#

Pedir los datos relacionados en la misma consulta o en una segunda planificada. Cada ORM la resuelve a su manera —una unión o dos consultas— y las dos son correctas: lo que importa es que el número no crezca con las filas.

También: (Eager loading)

Se enseña en la clase 056 · ver también Problema N+1.

Carga perezosa#

Traer los datos relacionados solo cuando se acceden. Cómodo, y el origen habitual del problema N+1: la consulta extra ocurre dentro de un bucle donde nadie la ve.

También: (Lazy loading)

Se enseña en la clase 056 · ver también Problema N+1, Carga anticipada.

Data Mapper#

El patrón en que el objeto de dominio no sabe nada del almacenamiento y una pieza aparte lo traduce. Más ceremonia, y el dominio se puede instanciar y probar sin base de datos.

Se enseña en la clase 054 · se desarrolla en el módulo 06 · ver también Active Record, Repositorio.

Grupo de conexiones#

Un conjunto de conexiones a la base de datos que se reutilizan en lugar de abrirse y cerrarse por petición. Abrir una conexión es caro; el tamaño del grupo es un límite duro de concurrencia que casi nadie mira hasta que se agota.

También: (Pool)

Se enseña en la clase 061 · se desarrolla en el módulo 06 · ver también Transacción.

Migración#

Un cambio en el esquema de la base de datos, escrito como código, versionado y aplicado en orden. Sin migraciones, el esquema de producción es una suma de comandos que alguien ejecutó a mano y nadie recuerda.

Se enseña en la clase 058 · se desarrolla en el módulo 06 · ver también Semilla, Migrar sin parar.

ORM#

Una capa que traduce entre filas de una base de datos relacional y objetos del lenguaje. Su valor no es escribir menos SQL: es que la API de consulta no acepte SQL como cadena, lo que cierra la inyección por construcción.

También: (Mapeador objeto-relacional)

Se enseña en la clase 051 · se desarrolla en el módulo 06 · ver también Active Record, Data Mapper, Inyección SQL.

Problema N+1#

Hacer una consulta para la lista y una más por cada elemento. No se detecta con diez filas y tumba el sistema con diez mil. Se resuelve con carga anticipada, y se mide por el crecimiento del número de consultas, no por su valor absoluto.

Se enseña en la clase 056 · se desarrolla en el módulo 06 · ver también Carga anticipada, Carga perezosa.

Repositorio#

Una interfaz que el dominio usa para guardar y recuperar sin saber cómo. Su prueba de fuego es que la implementación en memoria y la real sean intercambiables — y que el dominio no importe nada del ORM.

Se enseña en la clase 064 · se desarrolla en el módulo 06 · ver también Data Mapper.

Semilla#

Datos de partida que se cargan de forma repetible: los mínimos para que la aplicación funcione, o un juego de prueba. Repetible significa que ejecutarla dos veces no duplica nada.

También: (Seed)

Se enseña en la clase 059 · ver también Migración.

Transacción#

Un grupo de operaciones que ocurren todas o ninguna. Su frontera es una decisión de diseño: demasiado estrecha deja estados a medias, demasiado ancha retiene bloqueos y conexiones.

Se enseña en la clase 057 · se desarrolla en el módulo 06 · ver también Grupo de conexiones.

Identidad y seguridad#

Auditoría#

El rastro de quién cambió qué y cuándo. Tres reglas: un solo lugar por donde pasa cada cambio, el instante lo pone el servidor, y el almacén es de solo apéndice y está aparte — si quien borró el dato puede borrar su rastro, el rastro no protege.

Se enseña en la clase 076 · ver también Registro estructurado.

Autorización por recurso#

Decidir si este dato concreto es tuyo. Ninguna configuración declarativa puede responderlo, porque la respuesta depende del dato: se resuelve poniendo al propietario en la consulta, no comprobando después.

Se enseña en la clase 071 · ver también Autorización por rol.

Autorización por rol#

Decidir qué puede hacer alguien según su clase de usuario. Responde «qué clase de usuario eres» y se puede expresar de forma declarativa, en la configuración o en la ruta.

Se enseña en la clase 070 · se desarrolla en el módulo 07 · ver también Autorización por recurso.

Cadena de suministro#

Todo el código que ejecutas y no escribiste, incluidas las dependencias de tus dependencias y los scripts que se ejecutan al instalarlas. Este repositorio instala con --ignore-scripts por eso.

Se enseña en la clase 078 · se desarrolla en el módulo 08 · ver también Dependencia transitiva, Archivo de bloqueo.

Comparación en tiempo constante#

Comparar dos secretos tardando lo mismo coincidan o no. Un == corriente se detiene en el primer carácter distinto, y esa diferencia de microsegundos permite adivinar el valor carácter a carácter.

Se enseña en la clase 068 · ver también Función de derivación de clave, CSRF.

Consulta parametrizada#

Una consulta cuyo texto y cuyos valores viajan por caminos distintos, unidos por marcadores (?, :nombre, @titulo). Por eso el motor nunca puede confundir un dato con una instrucción.

Se enseña en la clase 074 · ver también Inyección SQL.

Un dato que el servidor pide al navegador que guarde y le devuelva en cada petición. Sus atributos no son decoración: HttpOnly la esconde del script de la página y SameSite evita que viaje en peticiones que provoca otra página.

Se enseña en la clase 066 · ver también Sesión, CSRF.

CSRF#

El ataque en que una página del atacante provoca una petición a tu sitio y el navegador adjunta la cookie — es su trabajo. Se corta con un testigo que el atacante no puede leer ni adivinar, y con SameSite.

También: (Falsificación de petición entre sitios)

Se enseña en la clase 072 · se desarrolla en el módulo 07 · ver también Testigo sincronizado, Cookie, Origen.

Enumeración de usuarios#

Deducir qué cuentas existen a partir de respuestas distintas. Se cierra respondiendo lo mismo a «no existe» y «clave mala» — y tardando lo mismo, verificando contra un resumen señuelo. La respuesta y su tiempo son el mismo mensaje.

Se enseña en la clase 068 · ver también Función de derivación de clave.

Escapado#

Neutralizar los caracteres que tendrían significado en el destino, sin destruir el dato: < se convierte en &lt; y el texto sigue entero. Escapar no es filtrar, y dónde vive el escapado —en el motor, en el framework o en el tipo— decide qué se puede olvidar.

Se enseña en la clase 079 · ver también XSS, Validación.

Fijación de sesión#

El ataque en que alguien planta un identificador de sesión antes del inicio de sesión y luego lo reutiliza ya autenticado. Se cierra emitiendo un identificador nuevo al autenticar.

Se enseña en la clase 066 · ver también Sesión.

Función de derivación de clave#

Una función deliberadamente lenta para guardar contraseñas: bcrypt, scrypt, Argon2, PBKDF2. Escribe sus parámetros dentro del resumen, así que verificar no necesita configuración y subirlos mañana no rompe los de ayer.

También: (Hash de contraseña, bcrypt, Argon2)

Se enseña en la clase 068 · se desarrolla en el módulo 07 · ver también Comparación en tiempo constante, Enumeración de usuarios.

Inyección SQL#

Conseguir que datos de un usuario se interpreten como instrucciones de la consulta. Se cierra por construcción: el valor viaja separado del texto de la consulta, unido solo por un marcador. Concatenar es lo único que la abre.

Se enseña en la clase 074 · se desarrolla en el módulo 07 · ver también Consulta parametrizada, ORM.

Nonce#

Un valor aleatorio por respuesta que autoriza a un script concreto dentro de una política de seguridad de contenido. Un nonce fijo en la configuración no es un nonce: el atacante lo lee en el HTML de ayer.

Se enseña en la clase 077 · ver también Política de seguridad de contenido.

OAuth 2.0#

El protocolo por el que una aplicación obtiene permiso para actuar en nombre de un usuario sin conocer su contraseña. En un protocolo de seguridad, la creatividad es el fallo: lo que hay que hacer es implementar exactamente lo que dice.

Se enseña en la clase 069 · se desarrolla en el módulo 07 · ver también OpenID Connect, PKCE.

OpenID Connect#

La capa de identidad sobre OAuth 2.0: añade un id_token firmado que dice quién es el usuario. OAuth autoriza; OpenID Connect autentica.

Se enseña en la clase 069 · ver también OAuth 2.0, Token de acceso.

PKCE#

La defensa que impide canjear un código de autorización interceptado: quien inicia el flujo envía el resumen de un secreto y solo él puede presentar el original. Sin PKCE, un código robado por el camino se puede canjear.

Se enseña en la clase 069 · ver también OAuth 2.0.

Política de seguridad de contenido#

Una cabecera que le dice al navegador qué puede cargar y ejecutar. Es la red que hay debajo cuando el escapado falla: el script inyectado está en el marcado y el navegador se niega a ejecutarlo.

También: (CSP)

Se enseña en la clase 077 · se desarrolla en el módulo 07 · ver también XSS, Nonce.

Secreto#

Un valor que no puede aparecer en el código, ni en el registro, ni en una respuesta: claves de firma, contraseñas de base de datos, credenciales. Un endpoint de configuración reporta su presencia, nunca su valor.

Se enseña en la clase 075 · se desarrolla en el módulo 07 · ver también Configuración por entorno.

Sesión#

Estado de un usuario guardado en el servidor, identificado por una cookie opaca. Es lo que permite cerrar sesión de verdad: se borra la entrada del almacén y la cookie robada deja de abrir.

Se enseña en la clase 066 · se desarrolla en el módulo 07 · ver también Cookie, Token de acceso, Fijación de sesión.

Testigo sincronizado#

Un valor aleatorio que vive en la sesión y viaja en el cuerpo o en una cabecera —nunca en una cookie sola, que el navegador también adjuntaría—. La página del atacante no puede leerlo porque no puede leer respuestas de otro origen.

También: (Token CSRF)

Se enseña en la clase 072 · ver también CSRF.

Token de acceso#

Un dato firmado que el cliente presenta en cada petición y que el servidor verifica sin consultar nada. Su cuerpo va codificado, no cifrado: cualquiera que lo tenga puede leerlo. Y lo que no se guarda no se puede revocar.

También: (JWT)

Se enseña en la clase 067 · se desarrolla en el módulo 07 · ver también Sesión, OAuth 2.0.

XSS#

Texto de un usuario que el navegador acaba ejecutando como código. La defensa moderna no es filtrar lo malo: es escapar todo por omisión y dejar la vía insegura como una puerta explícita con nombre de peligro.

También: (Cross-Site Scripting)

Se enseña en la clase 073 · se desarrolla en el módulo 07 · ver también Escapado, Política de seguridad de contenido.

Interfaz, componentes y estado#

Clave de lista#

El identificador estable que se le da a cada elemento de una lista para que el framework sepa cuál es cuál al actualizar. Usar el índice como clave produce errores visibles al reordenar o insertar.

También: (Key)

Se enseña en la clase 085 · ver también Componente.

Componente#

Una unidad de interfaz con sus datos de entrada, su marcado y su comportamiento. Los datos entran por propiedades y los avisos salen por eventos: hacia abajo datos, hacia arriba eventos.

Se enseña en la clase 082 · se desarrolla en el módulo 03 · ver también Propiedad, Estado.

DOM virtual#

Pintar en una estructura en memoria, compararla con la anterior y aplicar solo las diferencias al DOM real. Simplifica el modelo mental a cambio de un coste de comparación en cada actualización.

Se enseña en la clase 092 · ver también Reactividad, Señal.

Efecto#

Trabajo que ocurre fuera del renderizado: pedir datos, suscribirse, tocar el DOM. Su parte difícil no es lanzarlo: es limpiarlo cuando el componente desaparece o sus dependencias cambian.

Se enseña en la clase 087 · se desarrolla en el módulo 03 · ver también Estado del servidor.

Estado#

Un dato que el componente posee y puede cambiar. Cuando cambia, la interfaz se vuelve a pintar. La pregunta difícil no es cómo se declara: es dónde debe vivir.

Se enseña en la clase 084 · se desarrolla en el módulo 03 · ver también Estado compartido, Reactividad.

Estado compartido#

Estado que necesitan varios componentes que no son padre e hijo. Se resuelve subiéndolo al ancestro común, con un contexto o con un almacén externo — y cada opción cambia qué se vuelve a pintar.

Se enseña en la clase 088 · se desarrolla en el módulo 03 · ver también Estado, Componente.

Estado del servidor#

Datos que viven en el servidor y de los que el cliente guarda una copia. No es estado local: es una caché, y sus problemas son de caché — frescura, invalidación, reintentos y peticiones duplicadas.

Se enseña en la clase 089 · ver también Estado, Efecto.

Evento#

El aviso que un componente emite hacia arriba para que quien lo usa decida qué hacer. Es la otra mitad de «hacia abajo datos, hacia arriba eventos»: el hijo no cambia lo que recibe, avisa de que algo pasó.

Se enseña en la clase 083 · ver también Propiedad, Componente.

Formulario controlado#

Un campo cuyo valor lo dicta el estado del componente en lugar del DOM. Da control total sobre lo que se puede escribir, y obliga a que cada pulsación pase por el estado.

Se enseña en la clase 086 · ver también Estado.

Propiedad#

Un dato que un componente recibe de quien lo usa. Es de solo lectura desde dentro: modificarla rompe la dirección única del flujo de datos.

También: (Prop)

Se enseña en la clase 083 · ver también Componente, Evento.

Reactividad#

Cómo un framework se entera de que algo cambió para volver a pintar. Hay tres modelos: comparar el resultado (DOM virtual), observar el dato (señales) o compilar las dependencias (compilador). Deciden el rendimiento y el estilo del código.

Se enseña en la clase 092 · se desarrolla en el módulo 03 · ver también DOM virtual, Señal.

Señal#

Un valor que sabe quién lo está leyendo, así que al cambiar puede avisar exactamente a lo que depende de él. Evita la comparación del DOM virtual y devuelve la reactividad al dato.

También: (Signal)

Se enseña en la clase 092 · ver también Reactividad, DOM virtual.

Renderizado y full-stack#

Carga de datos junto a la ruta#

Declarar qué datos necesita una pantalla al lado de su ruta, no dentro del componente. Permite que el framework los pida en paralelo antes de pintar, en lugar de descubrirlos uno a uno al renderizar.

Se enseña en la clase 097 · se desarrolla en el módulo 04 · ver también Cascada de peticiones, Componente de servidor.

Cascada de peticiones#

Peticiones que solo pueden empezar cuando termina la anterior, porque cada una necesita el resultado de la previa. Es la causa más común de una pantalla lenta que en el perfilador parece rápida.

Se enseña en la clase 099 · ver también Carga de datos junto a la ruta.

Componente de servidor#

Un componente que se ejecuta solo en el servidor y cuyo resultado viaja ya pintado. Su código y sus dependencias no llegan al navegador — puede leer de la base de datos directamente.

Se enseña en la clase 096 · ver también Hidratación, Isla.

Generación estática#

Generar el HTML una vez, al construir, y servirlo como archivo. Lo más rápido y lo más barato, y solo vale si el contenido no depende de quién mira.

También: (SSG)

Se enseña en la clase 093 · ver también Renderizado en el servidor.

Hidratación#

Volver interactivo un HTML que ya llegó pintado, adjuntándole el JavaScript del componente. Es trabajo duplicado —el servidor pintó y el cliente vuelve a recorrer— y es lo que las islas y la resumibilidad intentan reducir.

Se enseña en la clase 094 · se desarrolla en el módulo 04 · ver también Isla, Renderizado en el servidor.

Hipermedia#

La alternativa en que el servidor devuelve HTML en lugar de datos y el cliente solo lo inserta. Reduce el JavaScript a una biblioteca pequeña y devuelve el renderizado al servidor.

Se enseña en la clase 103 · ver también Mejora progresiva.

Isla#

Un trozo interactivo dentro de una página que por lo demás es HTML estático. Solo se hidrata la isla, así que el JavaScript que llega es proporcional a lo que de verdad se mueve.

Se enseña en la clase 095 · ver también Hidratación, Presupuesto de JavaScript.

Mejora progresiva#

Construir primero el caso que funciona sin JavaScript y añadir comportamiento encima. La propiedad que la define: si el JavaScript no llega, lo que queda sigue funcionando — la mejora es mejora, no requisito.

Se enseña en la clase 081 · se desarrolla en el módulo 04 · ver también Hipermedia, Enviar-redirigir-mostrar.

Presupuesto de JavaScript#

Un límite declarado de cuántos bytes de JavaScript puede enviar una página, comprobado automáticamente. Sin límite, el peso solo crece — nadie quita una dependencia por su cuenta.

Se enseña en la clase 102 · se desarrolla en el módulo 08 · ver también Isla.

Renderizado en el servidor#

Generar el HTML en el servidor en cada petición. La página se ve antes y el servidor trabaja más; el JavaScript llega después para darle vida.

También: (SSR)

Se enseña en la clase 093 · se desarrolla en el módulo 04 · ver también Hidratación, Generación estática.

Tiempo real y trabajo en segundo plano#

Cola de trabajo#

Sacar de la petición el trabajo que no tiene que ocurrir ahora: enviar el correo, generar el informe. La petición responde antes y el trabajo se ejecuta después, con reintentos.

Se enseña en la clase 110 · se desarrolla en el módulo 05 · ver también Reintento, Tarea programada.

Evento de dominio#

Un hecho del negocio que ya ocurrió —«tarea completada»— publicado para que otros reaccionen. Desacopla a quien lo produce de quien lo consume, y hace más difícil seguir el flujo completo.

Se enseña en la clase 113 · se desarrolla en el módulo 06 · ver también Cola de trabajo.

Eventos enviados por el servidor#

Un canal HTTP de una sola dirección por el que el servidor empuja mensajes. Reconecta solo y reanuda desde el último identificador recibido, y no necesita otro protocolo.

También: (SSE)

Se enseña en la clase 106 · ver también WebSocket, Sondeo.

Reintento#

Volver a ejecutar un trabajo que falló. Solo es seguro si el trabajo es idempotente: reintentar un cobro no idempotente cobra dos veces. Y necesita espera creciente, o el reintento tumba lo que ya estaba caído.

Se enseña en la clase 112 · ver también Idempotencia, Cola de trabajo.

Sondeo#

Preguntar cada cierto tiempo si hay novedades. Simple, funciona en todas partes y desperdicia peticiones; el sondeo largo reduce el desperdicio manteniendo la petición abierta.

También: (Polling)

Se enseña en la clase 105 · se desarrolla en el módulo 05 · ver también Eventos enviados por el servidor, WebSocket.

Tarea programada#

Trabajo que se ejecuta a una hora, no ante una petición. Con varias instancias hace falta decidir quién la ejecuta, o se ejecuta tantas veces como instancias haya.

Se enseña en la clase 111 · ver también Cola de trabajo.

WebSocket#

Un canal bidireccional que empieza como una petición HTTP y cambia de protocolo. Da más y cuesta más: la reconexión, el estado de la conexión y el reparto entre instancias son tuyos.

Se enseña en la clase 107 · se desarrolla en el módulo 05 · ver también Eventos enviados por el servidor.

Móvil, escritorio y sin conexión#

Conflicto#

Dos cambios sobre el mismo dato hechos sin verse. Alguien tiene que decidir cuál gana, y «el último que escribe» es una decisión, no la ausencia de una.

Se enseña en la clase 119 🚧 · ver también Sincronización, Sin conexión primero.

Sin conexión primero#

Diseñar para que la aplicación funcione sin red y sincronice cuando la haya. Cambia el modelo de datos entero: el estado local pasa a ser la fuente y el servidor, un par que reconcilia.

También: (Offline-first)

Se enseña en la clase 118 🚧 · se desarrolla en el módulo 09 · ver también Sincronización, Conflicto.

Sincronización#

Reconciliar el estado local con el remoto después de trabajar sin conexión. Necesita saber qué cambió, en qué orden y qué hacer cuando las dos partes cambiaron lo mismo.

Se enseña en la clase 119 🚧 · ver también Conflicto, Sin conexión primero.

Calidad, rendimiento y operación#

Arranque en frío#

El tiempo desde que el proceso empieza hasta que puede atender. Irrelevante en un servidor que vive semanas y decisivo cuando el entorno escala a cero — y es donde más se nota lo que un framework hace al arrancar.

Se enseña en la clase 136 🚧 · se desarrolla en el módulo 08 · ver también Salud y preparación, Empaquetado.

Configuración por entorno#

Que lo que cambia entre desarrollo y producción venga de fuera del artefacto —variables de entorno— y no de un if. Y que falte una variable obligatoria haga fallar el arranque, no la primera petición.

Se enseña en la clase 075 · se desarrolla en el módulo 08 · ver también Secreto, Empaquetado.

Doble de prueba#

Un sustituto de una dependencia real durante una prueba. El riesgo no es usarlos: es que el doble se comporte como nadie, y la prueba pase mientras el sistema real falla.

También: (Mock, Stub, Fake)

Se enseña en la clase 126 🚧 · se desarrolla en el módulo 08 · ver también Pirámide de pruebas, Prueba de contrato.

Empaquetado#

Convertir el código en un artefacto desplegable: un .jar, una imagen de contenedor, un directorio con sus dependencias. El mismo artefacto debe poder ir a todos los entornos, cambiando solo la configuración.

Se enseña en la clase 135 🚧 · se desarrolla en el módulo 08 · ver también Configuración por entorno, Arranque en frío.

Medir antes de optimizar#

No tocar el rendimiento sin una medición previa que diga dónde está el coste. La intuición sobre qué es lento acierta poco, y optimizar lo que no era el cuello de botella cuesta lo mismo y no mejora nada.

Se enseña en la clase 137 🚧 · se desarrolla en el módulo 08 · ver también Percentil.

Métrica#

Un número agregado en el tiempo: peticiones por segundo, latencia por percentil, errores por minuto. Responde «¿cómo va el sistema?», no «¿qué le pasó a esta petición?».

Se enseña en la clase 131 🚧 · se desarrolla en el módulo 08 · ver también Traza, Registro estructurado.

Percentil#

El valor por debajo del cual queda un porcentaje de las mediciones. La media esconde a los usuarios lentos; el p95 y el p99 son los que describen lo que la gente sufre.

Se enseña en la clase 007 · se desarrolla en el módulo 08 · ver también Métrica, Medir antes de optimizar.

Pirámide de pruebas#

La proporción entre pruebas rápidas y aisladas, pruebas de integración y pruebas de extremo a extremo. Muchas de las primeras y pocas de las últimas: no por dogma, sino porque el coste de mantenerlas crece hacia arriba.

Se enseña en la clase 125 🚧 · se desarrolla en el módulo 08 · ver también Doble de prueba.

Prueba de contrato#

Una prueba que comprueba que dos partes siguen entendiéndose: lo que el productor emite es lo que el consumidor espera. Detecta el cambio incompatible antes del despliegue, sin levantar los dos sistemas.

Se enseña en la clase 129 🚧 · se desarrolla en el módulo 08 · ver también Cambio incompatible, Doble de prueba.

Registro estructurado#

Emitir los registros como datos —un objeto por línea— en lugar de como frases. Es lo que permite buscar, filtrar y agregar sin escribir expresiones regulares sobre prosa.

Se enseña en la clase 130 🚧 · se desarrolla en el módulo 08 · ver también Métrica, Traza, Identificador de correlación.

Salud y preparación#

Dos preguntas distintas: salud es «¿el proceso está vivo?» y preparación es «¿puede atender ya?». Confundirlas hace que un orquestador reinicie un proceso sano o mande tráfico a uno que aún no puede responder.

También: (Health check, Readiness)

Se enseña en la clase 133 🚧 · se desarrolla en el módulo 08 · ver también Arranque en frío.

Traza#

El recorrido de una petición por todos los servicios que atraviesa, con el tiempo de cada tramo. Responde «¿dónde se fue el tiempo?», que es la pregunta que ni las métricas ni los registros contestan.

Se enseña en la clase 132 🚧 · se desarrolla en el módulo 08 · ver también Métrica, Identificador de correlación.

Legado, migración y decisión#

Fin de vida#

La fecha a partir de la cual una versión deja de recibir correcciones, incluidas las de seguridad. Es un dato público y comprobable, y es la variable que más pesa al elegir con horizonte de años.

También: (EOL)

Se enseña en la clase 146 🚧 · se desarrolla en el módulo 11 · ver también Coste total, Versionado semántico.

Higuera estranguladora#

Migrar sustituyendo el sistema viejo poco a poco, con las dos versiones conviviendo detrás de una fachada que decide a cuál va cada petición. Evita la reescritura total, que es donde mueren los proyectos de migración.

También: (Strangler fig)

Se enseña en la clase 140 🚧 · se desarrolla en el módulo 10 · ver también Prueba de caracterización, Micro-frontend.

Micro-frontend#

Partir una interfaz en aplicaciones independientes que se despliegan por separado. Resuelve un problema de organización a cambio de un coste técnico real: duplicación, coherencia visual y rendimiento.

Se enseña en la clase 142 🚧 · se desarrolla en el módulo 10 · ver también Higuera estranguladora.

Migrar sin parar#

Cambiar el esquema o el sistema sin cortar el servicio, en pasos que siempre dejan un estado válido: escribir en los dos sitios, copiar lo viejo, leer del nuevo, retirar el antiguo.

Se enseña en la clase 143 🚧 · se desarrolla en el módulo 10 · ver también Migración, Higuera estranguladora.

Prueba de caracterización#

Una prueba que documenta lo que el sistema hace hoy, sin juzgar si está bien. Es la red de seguridad antes de tocar código que nadie entiende: si el comportamiento cambia, se entera alguien.

Se enseña en la clase 139 🚧 · se desarrolla en el módulo 10 · ver también Higuera estranguladora.

Herramientas, archivos y comandos#

Archivo de bloqueo#

El archivo que la herramienta genera junto al manifiesto con la versión exacta de cada dependencia y de las dependencias de tus dependencias. Es lo que hace que la instalación de hoy sea igual a la de dentro de seis meses. Se versiona; no se edita a mano.

También: (Lockfile)

Se enseña en la clase 078 · ver también Manifiesto, Dependencia transitiva.

Cadena de herramientas#

El conjunto de ejecutables que una implementación necesita para arrancar: node y pnpm, python, java y mvn, dotnet, php y composer, ruby y bundle, o go. Cada implementación la declara en su ejecutar.json.

También: (Toolchain)

ver también Verde honesto, Manifiesto.

Dependencia#

Código de terceros que tu programa necesita para funcionar. Se declara en el manifiesto y se descarga con un comando. Cada una es una decisión que alguien tendrá que entender, actualizar y auditar.

Se enseña en la clase 001 · ver también Dependencia transitiva, Coste total.

Dependencia transitiva#

Una dependencia que no elegiste: la trajo otra que sí elegiste. Una aplicación que declara dos suele ejecutar seis, y un aviso de seguridad sobre una transitiva no se arregla actualizándola a ella — o subes a quien la trajo, o fuerzas la versión.

Se enseña en la clase 078 · ver también Archivo de bloqueo, Cadena de suministro.

Manifiesto#

El archivo donde se declaran las dependencias de un proyecto: package.json, requirements.txt, pom.xml, composer.json, Gemfile, go.mod, *.csproj. Cada ecosistema tiene el suyo y todos hacen lo mismo.

Se enseña en la clase 001 · ver también Archivo de bloqueo, Dependencia.

Versionado semántico#

La convención MAYOR.MENOR.PARCHE: el primer número anuncia una ruptura, el segundo una función nueva compatible y el tercero una corrección. Los rangos del manifiesto —^5.1.0— declaran hasta dónde aceptas actualizaciones automáticas.

También: (SemVer)

Se enseña en la clase 078 · se desarrolla en el módulo 11 · ver también Fin de vida.

El vocabulario de este laboratorio#

Contrato#

El comportamiento exigido, escrito antes que las implementaciones y idéntico para todas. Vive en el contrato.json de cada clase y es lo que convierte una comparación en una medición. Adaptarlo a un framework la invalida.

Se enseña en la clase 003 · se desarrolla en el módulo 01 · ver también Elenco, Verde honesto.

Elenco#

Los frameworks para los que el problema de una clase existe de verdad. Los lenguajes son intercambiables y los frameworks no: Spring Boot no implementa reactividad en el cliente. Si un framework no lo hace de verdad, sale del elenco con su explicación — no se simula.

Se enseña en la clase 009 · ver también Taxonomía, Contrato.

Pista#

El grupo temático al que pertenece una clase —backend, frontend, fullstack, datos, plataforma— y que define su elenco por omisión. Está declarada en classes/_manifest.json.

ver también Elenco.

Verde honesto#

Un resultado que distingue tres estados y nunca los mezcla: verificada (se ejecutó y pasó), fallo (se ejecutó y falló) y omitida (no se ejecutó, y se dice por qué). Un informe que dijera «todo bien» habiendo ejecutado tres de diez estaría mintiendo.

Se enseña en la clase 010 · ver también Contrato, Cadena de herramientas.

🧰 Las cadenas de herramientas#

Los ejecutables que hace falta tener para ejecutar cada ecosistema del laboratorio. La receta completa de instalación está en empezar/, y node scripts/doctor.mjs dice cuáles tienes.

Cadena Versión de referencia Se comprueba con Qué desbloquea
Node.js 22 o superior node --version Es el requisito del propio laboratorio: los verificadores, el generador del sitio y el ejecutor de clases son scripts de Node sin dependencias.
Node.js + pnpm Node 22 · pnpm 10 pnpm --version Es el gestor de paquetes admitido para JavaScript y TypeScript. Instala una sola copia de cada dependencia y enlaza el resto, que es lo que hace viable tener decenas de implementaciones con node_modules propio.
Python 3.11 o superior python --version Ejecuta las implementaciones de Flask, Django, FastAPI y SQLAlchemy — el ecosistema con más clases del laboratorio junto a Node.
JDK + Apache Maven JDK 21 · Maven 3.9 java -version Compila y ejecuta Spring Boot e Hibernate. Maven no es opcional: las implementaciones declaran sus dependencias en pom.xml y se empaquetan antes de arrancar.
.NET SDK 8 o superior dotnet --version Compila y ejecuta ASP.NET Core, Entity Framework Core y Dapper. Un único ejecutable —dotnet— restaura, compila y arranca.
PHP + Composer PHP 8.2 · Composer 2 php --version Ejecuta Laravel y Eloquent. Composer aporta además el autocargador PSR-4, que es lo que permite que el controlador frontal de la clase 011 encuentre las clases sin un solo require.
Ruby + Bundler Ruby 3.3 · Bundler 2 ruby --version Ejecuta Ruby on Rails y Active Record — el origen de casi todas las convenciones que el resto del catálogo copió después.
Go 1.22 o superior go version Ejecuta Gin. Es la única cadena que no necesita paso de preparación: go run resuelve dependencias, compila y arranca en un solo comando.
Rust 1.80 o superior cargo --version Ejecuta axum. Es la única cadena donde el modo de compilación cambia los números de rendimiento en un orden de magnitud: cargo build a secas compila sin optimizar, y medir eso no compara nada.

Las 138 tecnologías que el programa sitúa, con su categoría y su ecosistema. Cada una tiene su ficha a fondo en el Atlas. Estar en el catálogo no es una recomendación, y el número de descargas o de estrellas no aparece en ninguna entrada.

JavaScript/TypeScript · 32#

Tecnología Qué es Desde Estado Ficha
Astro web-metaframework 2021 activo ficha
Bun entorno de ejecución 2022 activo ficha
Capacitor runtime-bridge 2019 activo ficha
Deno entorno de ejecución 2018 activo ficha
Docusaurus documentation-framework 2017 activo ficha
Drizzle ORM ORM 2022 activo ficha
Electron desktop-runtime 2013 activo ficha
Gatsby react-metaframework 2015 mantenimiento ficha
Hono framework web 2021 activo ficha
Ionic ui-toolkit 2013 activo ficha
Lit web-components-library 2021 activo ficha
NativeScript framework de interfaz 2014 activo ficha
Next.js react-metaframework 2016 activo ficha
Nitro server-toolkit 2021 activo ficha
Nuxt vue-metaframework 2016 activo ficha
Preact biblioteca de interfaz 2015 activo ficha
Prisma ORM ORM 2021 activo ficha
Qwik framework de interfaz 2021 activo ficha
React biblioteca de interfaz 2013 activo ficha
React Native framework de interfaz 2015 activo ficha
React Router routing-library 2014 activo ficha
RedwoodJS full-stack-framework 2020 activo ficha
Remix react-metaframework 2021 activo ficha
SolidJS biblioteca de interfaz 2018 activo ficha
SolidStart solid-metaframework 2024 activo ficha
Svelte framework de interfaz 2016 activo ficha
SvelteKit svelte-metaframework 2022 activo ficha
tRPC rpc-library 2020 activo ficha
TypeORM ORM 2016 activo ficha
Vite herramienta de construcción 2020 activo ficha
VitePress documentation-framework 2022 activo ficha
Vue framework de interfaz 2014 activo ficha

JavaScript · 21#

Tecnología Qué es Desde Estado Ficha
Alpine.js dom-library 2019 activo ficha
AngularJS framework de interfaz 2010 historico ficha
Apache Cordova runtime-bridge 2009 mantenimiento ficha
Aurelia framework de interfaz 2015 mantenimiento ficha
Backbone.js mv-library 2010 mantenimiento ficha
Dojo Toolkit ui-toolkit 2004 mantenimiento ficha
Eleventy static-site-generator 2018 activo ficha
Ember.js framework de interfaz 2011 activo ficha
Ext JS ui-toolkit 2007 activo ficha
htmx hypermedia-library 2020 activo ficha
jQuery dom-library 2006 mantenimiento ficha
Knockout mvvm-library 2010 mantenimiento ficha
Marko framework de interfaz 2014 activo ficha
Mithril framework de interfaz 2014 mantenimiento ficha
MooTools dom-library 2006 historico ficha
Node.js entorno de ejecución 2009 activo ficha
Prototype dom-library 2005 historico ficha
Rollup herramienta de construcción 2015 activo ficha
Stimulus dom-library 2018 activo ficha
Turbo (Hotwire) hypermedia-library 2021 activo ficha
webpack herramienta de construcción 2012 activo ficha

JVM · 12#

Tecnología Qué es Desde Estado Ficha
Apache Struts framework web 2000 mantenimiento ficha
Dropwizard framework de aplicación 2011 activo ficha
Eclipse Vert.x reactive-toolkit 2012 activo ficha
Grails full-stack-framework 2006 activo ficha
Hibernate ORM ORM 2001 activo ficha
Jakarta Faces (JSF) component-framework 2004 mantenimiento ficha
Ktor framework web 2018 activo ficha
Micronaut framework de aplicación 2018 activo ficha
Play Framework framework web 2007 activo ficha
Quarkus framework de aplicación 2019 activo ficha
Spring Boot framework de aplicación 2014 activo ficha
Spring Framework framework de aplicación 2003 activo ficha

PHP · 12#

Tecnología Qué es Desde Estado Ficha
CakePHP full-stack-framework 2005 activo ficha
CodeIgniter framework web 2006 activo ficha
Drupal cms 2001 activo ficha
Eloquent (Laravel) ORM 2011 activo ficha
Laminas framework de aplicación 2019 activo ficha
Laravel full-stack-framework 2011 activo ficha
Phalcon full-stack-framework 2012 activo ficha
Slim framework web 2010 activo ficha
Symfony framework web 2005 activo ficha
WordPress cms 2003 activo ficha
Yii full-stack-framework 2008 activo ficha
Zend Framework framework de aplicación 2006 historico ficha

Python · 12#

Tecnología Qué es Desde Estado Ficha
aiohttp http-toolkit 2014 activo ficha
Bottle framework web 2009 mantenimiento ficha
Django framework web 2005 activo ficha
FastAPI framework web 2018 activo ficha
Flask framework web 2010 activo ficha
Kivy framework de interfaz 2011 activo ficha
Litestar framework web 2021 activo ficha
Pyramid framework web 2010 activo ficha
Sanic framework web 2016 activo ficha
SQLAlchemy ORM 2006 activo ficha
Starlette asgi-toolkit 2018 activo ficha
Tornado framework web 2009 mantenimiento ficha

.NET · 8#

Tecnología Qué es Desde Estado Ficha
.NET MAUI framework de interfaz 2022 activo ficha
ASP.NET Core framework web 2016 activo ficha
Avalonia framework de interfaz 2020 activo ficha
Blazor component-framework 2018 activo ficha
Dapper micro-ORM 2011 activo ficha
Entity Framework Core ORM 2016 activo ficha
WPF framework de interfaz 2006 mantenimiento ficha
Xamarin framework de interfaz 2011 historico ficha

Go · 7#

Tecnología Qué es Desde Estado Ficha
Beego full-stack-framework 2012 activo ficha
chi routing-library 2015 activo ficha
Echo framework web 2015 activo ficha
esbuild herramienta de construcción 2020 activo ficha
Fiber framework web 2020 activo ficha
Gin framework web 2014 activo ficha
Hugo static-site-generator 2013 activo ficha

Node.js · 6#

Tecnología Qué es Desde Estado Ficha
Express framework web 2010 activo ficha
Fastify framework web 2016 activo ficha
hapi framework web 2011 activo ficha
Koa framework web 2013 activo ficha
Sails.js full-stack-framework 2012 mantenimiento ficha
Socket.IO realtime-library 2010 activo ficha

Rust · 6#

Tecnología Qué es Desde Estado Ficha
Actix Web framework web 2017 activo ficha
axum framework web 2021 activo ficha
Leptos framework de interfaz 2022 activo ficha
Rocket framework web 2016 activo ficha
Tauri desktop-runtime 2022 activo ficha
Yew framework de interfaz 2017 activo ficha

Ruby · 5#

Tecnología Qué es Desde Estado Ficha
Active Record (Rails) ORM 2004 activo ficha
Hanami full-stack-framework 2014 activo ficha
Jekyll static-site-generator 2008 activo ficha
Ruby on Rails full-stack-framework 2004 activo ficha
Sinatra framework web 2007 activo ficha

Apple · 2#

Tecnología Qué es Desde Estado Ficha
SwiftUI ui-toolkit 2019 activo ficha
UIKit ui-toolkit 2008 activo ficha

BEAM · 2#

Tecnología Qué es Desde Estado Ficha
Phoenix full-stack-framework 2014 activo ficha
Phoenix LiveView realtime-ui-framework 2019 activo ficha

.NET Framework · 2#

Tecnología Qué es Desde Estado Ficha
ASP.NET MVC framework web 2009 historico ficha
ASP.NET Web Forms component-framework 2002 historico ficha

Node.js/TypeScript · 2#

Tecnología Qué es Desde Estado Ficha
AdonisJS full-stack-framework 2015 activo ficha
NestJS framework de aplicación 2017 activo ficha

TypeScript · 2#

Tecnología Qué es Desde Estado Ficha
Analog angular-metaframework 2023 activo ficha
Angular framework de interfaz 2016 activo ficha

Cloud · 1#

Tecnología Qué es Desde Estado Ficha
Kubernetes plataforma 2014 activo ficha

Dart · 1#

Tecnología Qué es Desde Estado Ficha
Flutter ui-sdk 2017 activo ficha

Bun/TypeScript · 1#

Tecnología Qué es Desde Estado Ficha
Elysia framework web 2022 activo ficha

Android · 1#

Tecnología Qué es Desde Estado Ficha
Jetpack Compose ui-toolkit 2021 activo ficha

Kotlin · 1#

Tecnología Qué es Desde Estado Ficha
Compose Multiplatform ui-toolkit 2021 activo ficha

C · 1#

Tecnología Qué es Desde Estado Ficha
GTK ui-toolkit 1998 activo ficha

C++ · 1#

Tecnología Qué es Desde Estado Ficha
Qt framework de interfaz 1995 activo ficha

🎓 Las partes del programa#

¿Falta una palabra? Se añade a glosario/conceptos.json con su definición y la clase donde se enseña, y se regenera con node scripts/generate-glosario.mjs.