Registro de cambios
Cambios técnicos enviados a Quickmock: funciones, correcciones, refuerzo de la seguridad. La fuente de la verdad es el historial de git; esta página es la vista seleccionada de cara al desarrollador.
2026-10-17 — Protección contra abusos
Seguridad
- Se rechazan los valores de cabecera con caracteres de control. Un valor de cabecera de un mock con un salto de línea u otro carácter de control (un intento de colar una cabecera extra) ahora falla la validación con un error claro en todos los lugares donde se definen cabeceras: respuesta, variantes, rutas, pasos de secuencia y respuesta de error. En la respuesta ya se neutralizaban.
- Se bloquean los mocks que se hacen pasar por una API de LLM para que un agente de IA ejecute comandos de shell. El filtro antispam ahora rechaza llamadas a herramientas de ejecución de shell (OpenAI
tool_calls / function_call, Anthropic tool_use) y el reconocimiento de red dentro del sandbox. Los mocks normales con llamadas a herramientas, como get_weather, siguen funcionando.
2026-10-02 — Interior más ligero; borrar registros reinicia el contador
Cambiado
- robots.txt es un solo grupo de reglas en lugar de las mismas reglas repetidas para 23 rastreadores con nombre: todos los bots, incluidos los de IA, siguen teniendo exactamente el mismo acceso. Las listas de guías y plantillas de
llms.txt ahora se generan desde el mismo registro que las páginas y el sitemap, así que ya no pueden quedar desactualizadas.
- La protección contra peticiones entre sitios al crear mocks ahora usa la protección CSRF integrada de Go. Las peticiones de navegador desde otro sitio —incluido un subdominio hermano— se rechazan; curl, CI y otros clientes que no son navegadores no se ven afectados. El endpoint del selector de idioma solo acepta su propio formulario, ya no un cuerpo JSON.
- Limpieza interna: unas 700 líneas de código hecho a mano se sustituyeron por la biblioteca estándar de Go y el driver de la base de datos, sin cambios en la API ni en el comportamiento de los mocks.
Corregido
- Borrar los registros de un mock ahora también reinicia su contador de peticiones. Antes la lista quedaba vacía, pero el resumen seguía mostrando el número de peticiones y la hora de la última.
GET /api/mocks/:id/logs devuelve "logs": [] para un mock sin peticiones registradas, en lugar de null.
- El inspector de peticiones en vivo transmite desde la primera visita. En un mock privado la página abría la conexión en vivo antes de que existiera la sesión del inspector, era rechazada y pasaba en silencio a consultar al servidor cada 2 segundos; ahora conecta cuando la sesión está lista, y un inspector bloqueado ya no consulta nada. «Borrar registros» también actualiza la lista al instante, y la página ya no registra un error de htmx en cada carga.
2026-09-26 — Sin solicitudes de pago; arreglo del sondeo del inspector
Seguridad
- Quickmock ya no aloja solicitudes de pago x402 en redes reales. Un mock no puede verificar un pago, así que una respuesta
402 que pedía stablecoins reales era una trampa para cualquier agente que pagara — y alguien había empezado a publicar esos mocks en un catálogo de descubrimiento x402. Crear o editar un mock con un requisito de pago x402 en una mainnet (Base, Ethereum, Solana…) ahora falla con 422 payment_blocked. x402 en testnets como base-sepolia sigue permitido, igual que un simple estado 402.
Corregido
- Una pestaña del inspector abierta sobre un mock eliminado o caducado ya no consulta al servidor indefinidamente. La lista de peticiones y el contador pedían datos cada 2–5 segundos y recibían un 404 que la página ignoraba en silencio: una sola pestaña olvidada hizo más de dos mil peticiones en unos días. Ahora el servidor indica a la página que deje de consultar, y la página avisa de que el mock ya no existe.
2026-09-20 — IPs de cliente fiables
Seguridad
- El origen ahora solo acepta tráfico web de Cloudflare, en dos capas independientes: una lista de permitidos en el cortafuegos con los rangos publicados por Cloudflare, actualizada semanalmente por un temporizador, y Authenticated Origin Pulls, donde el servidor web exige el certificado TLS de cliente de Cloudflare. Esto es lo que hace fiable la dirección del visitante: Cloudflare sobrescribe la cabecera que la transporta, pero solo para el tráfico que realmente pasa por Cloudflare. Mientras la vía directa estuvo abierta, cualquiera que encontrara el origen podía conectarse y declararse cualquier IP.
Corregido
- El límite de mocks activos por IP, el límite de peticiones y la lista de bloqueo del operador se apoyaban en una dirección interna en lugar de la del visitante, lo que reducía tres controles por IP a un único cubo global: una lista de bloqueo que no coincidía con nadie y un solo llamante capaz de gastar la cuota de todos. Los registros de peticiones mostraban esa misma dirección inútil. Ahora todo resuelve a la IP real del cliente.
- Los comandos dentro de las secciones extensas de una guía se mostraban como texto de párrafo normal — sin estilo de código ni botón de copiar — pese a ser exactamente las líneas que el lector debe escribir. Ahora se ven como cualquier otro bloque de código de la página y se copian con un clic.
Añadido
- Los scripts y la explicación completa están en el repositorio, en
deploy/cloudflare/: por qué hace falta cada capa, en qué orden activarlas para no tumbar el sitio, cómo falla de forma segura la sincronización semanal y qué trampas conviene conocer si tú mismo tienes algo detrás de un CDN.
2026-09-19 — Filtrado por estado y nuevas configuraciones regionales
Añadido
- Filtro de estado: El inspector de solicitudes ahora captura el estado HTTP realmente servido para cada solicitud y permite filtrar la vista de registro por código de estado. Las exportaciones de registros incluyen el nuevo campo.
- Configuraciones regionales: Se agregaron traducciones completas para español, portugués y chino simplificado, lo que hace que Quickmock sea accesible para una audiencia global más amplia según las tendencias de tráfico.
- API pública y CLI:
go install .../cmd/quickmock@latest te da un comando quickmock create que imprime la URL pública de un mock y su token de administrador de un solo uso, de modo que un trabajo de CI puede conseguir un endpoint desechable sin navegador. La nueva guía API pública y CLI cubre la instalación, los flags y el equivalente en curl para pipelines que prefieren no instalar nada.
Corregido
- El filtrado por estado llegó con tres asperezas, ya limadas: la insignia de estado no tenía colores definidos, así que un 500 se veía exactamente igual que un 200; un estado fuera de la lista corta del desplegable dejaba el control marcando todos los estados sobre una lista que sí estaba filtrada; y
?status= en la exportación de registros ignoraba en silencio los valores inválidos en lugar de responder 422 como ya hacía ?method=.
- Autoalojamiento: la columna
response_status añadida en esta versión admitía nulos, lo que hacía fallar toda lectura de registros sobre las peticiones capturadas antes de la actualización. Ahora es NOT NULL DEFAULT 0, y una migración posterior repara una instancia que ya aplicó la primera versión.
2026-09-18 — Cuerpos de respuesta que pueden referenciarse a sí mismos
Añadido
- El nuevo token
{{mock.url}} se expande a la propia URL base del mock — https://quickmock.dev/m/<slug> — de modo que el cuerpo de la respuesta puede apuntar a sí mismo. Eso era imposible antes.
- El nuevo token de eco
{{request.host}} devuelve el Host al que iba dirigida la petición. Go guarda ese valor fuera del mapa de cabeceras, así que {{request.header.host}} nunca pudo sustituirlo.
Cambiado
- Tres plantillas dejan de venir con marcadores de posición que había que editar a mano. El documento de discovery de OIDC anuncia ahora un
issuer, un authorization_endpoint, un token_endpoint y un jwks_uri que resuelven al propio mock; el enlace next de la colección paginada se puede seguir; y el instance del error problem+json nombra una dirección real. No queda nada que diga YOUR-SLUG.
2026-09-08 — Guías de formato largo y profundidad de plantillas
Añadido
- Tres guías — simular un endpoint de API REST, probar un receptor de webhook y probar la lógica de reintento — ahora son artículos completos en lugar de un fragmento de código con una leyenda.
- Cada página de plantilla se abre ahora con una respuesta llana a para qué sirve la plantilla y qué deja fuera a propósito, y termina con enlaces a la documentación del proveedor o al RFC que reproduce — Stripe, Slack, GitHub, Shopify, Telegram, RFC 6749, RFC 7517, RFC 9457 — en lugar de nombrarlos de pasada.
- Las páginas de guías y plantillas llevan el marcado
FAQPage, y el marcado de una plantilla cita las fuentes a partir de las que está construida.
Cambiado
- Las páginas de guías y plantillas ahora muestran cuándo se actualizaron por última vez, y publican la misma fecha como
dateModified.
- Las guías sobre la lógica de reintento y los receptores de webhooks ganaron secciones sobre cuándo dejar de reintentar y sobre la creación de una clave de idempotencia a partir de una ID de entrega.
2026-09-08 — Enlaces internos y metadatos del centro
Añadido
- Cada página de guía y de plantilla termina ahora con enlaces a páginas relacionadas, y una guía enlaza de vuelta a las plantillas construidas sobre ella: las dos secciones quedan enlazadas en ambas direcciones en lugar de colgar solo de su índice.
- La página de inicio enlaza directamente con cinco guías y cinco plantillas en lugar de apuntar solo al índice.
- Las páginas de guías, documentación y registro de cambios llevan ahora marcado de schema.org: un
ItemList, un TechArticle y un SoftwareApplication con notas de versión y número de versión.
Cambiado
- Las páginas de índice de guías y plantillas encabezan sus títulos con lo que realmente listan.
/llms.txt ha ganado una sección de Documentación, de modo que la referencia de la API, el contrato OpenAPI y el registro de cambios quedan agrupados donde un asistente de IA los busca, en vez de quedar en mitad de una lista de datos sueltos.
2026-09-05 — IP de cliente de confianza y redireccionamientos solo relativos
Seguridad
- La IP de cliente detrás del límite de mocks por IP y otras listas ya no se lee de un encabezado
X-Forwarded-For autoinformado. Ahora proviene del propio encabezado del proxy inverso inmediato.
- Cambio incompatible: la cabecera de respuesta
Location de un mock debe ser ahora una ruta relativa simple (por ejemplo /m/abc123), y se comprueba igual en la respuesta principal, en las variantes con nombre, en las rutas, en los pasos de secuencia y en la respuesta de error. Las URLs absolutas, las relativas al protocolo //host y las variantes con barra invertida se rechazan con 422 validation_failed al crear y al actualizar; a un registro existente que todavía lleve una se le descarta la cabecera al servir.
- Las respuestas del mock servidas desde
/m/:slug ahora envían Cross-Origin-Resource-Policy: same-origin, por lo que un mock ya no puede cargarse como un script, imagen o iframe desde otro origen.
- El filtro antispam incorporado obtuvo patrones para lecturas de archivos de bandera, búsquedas de entorno con secretos y más.
Cambiado
- El token de administrador es ahora obligatorio en toda llamada que modifique algo — editar, eliminar, extender, y exportar o borrar registros — sin que quede ninguna excepción para los mocks creados antes de que existieran los tokens.
2026-08-22 — Go 1.27 y actualización de CI
Cambiado
- El backend y la imagen de producción ahora se construyen con Go 1.27.0.
- GitHub Actions ahora usa las versiones compatibles de Node.js 24.
2026-08-19 — Escenarios deterministas, espacios de trabajo de API y registros privados
Añadido
- Las variantes de respuesta nombradas ahora se pueden seleccionar explícitamente con
X-Quickmock-Variant o __quickmock_variant.
- Las reglas condicionales ordenadas seleccionan variantes del método de solicitud, ruta, consulta, encabezados o cuerpo JSON.
- Un mock ahora puede exponer hasta 50 rutas de método y ruta. Pega un documento OpenAPI 3.x JSON o YAML para generar las rutas del espacio de trabajo.
- La nueva documentación de la API y un contrato OpenAPI 3.1 cubren la creación, variantes, reglas y más.
Seguridad
- Los registros de peticiones son privados por defecto en los mocks nuevos. El token de administrador desbloquea una sesión de inspector HttpOnly limitada a la ruta del mock; quien lo crea puede además desactivar el almacenamiento de los cuerpos de petición o de las IPs de origen.
Cambiado
- Los metadatos SEO/GEO publican ahora entradas de sitemap recíprocas entre idiomas, incluyen la página de documentación y señales de actualización revisadas, y marcan como no indexables las URLs de mocks, workspaces, enlaces compartidos e inspector.
2026-08-15 — Resistencia al abuso y respuestas mock más seguras
Seguridad
- Los puntos finales de sondeo del inspector de solicitudes ahora tienen su propio presupuesto por IP.
- Las respuestas del mock ya no pueden ampliar el alcance de un service worker.
- El filtro de abuso incorporado ahora rechaza las primitivas SSRF comunes.
Corregido
- Los registros del contenedor ahora rotan de forma predeterminada.
2026-08-10 — Creación de mocks endurecida desde el navegador
Seguridad
- Crear un mock desde el sitio — el formulario de la página de inicio y el botón de un clic de una página de plantilla — se rechaza ahora cuando ha sido otro sitio el que lo ha disparado en tu navegador. El acceso por script no se ve afectado:
curl, los trabajos de CI y la API pública no envían cabeceras de origen del navegador y siguen funcionando exactamente igual que antes.
- Esas mismas dos acciones tienen ahora su propio presupuesto de límite de peticiones, separado del que atiende el tráfico de los mocks, de modo que un script descontrolado no pueda gastar tu cuota de mocks activos.
Cambiado
- La cabecera ya no se desborda en el móvil: la sección Plantillas dejaba seis enlaces, demasiados para una sola línea, así que el enlace de GitHub bajó al pie junto a los demás enlaces del autor, y el resto de la navegación pasa a su propia fila en lugar de salirse de la pantalla.
- Si ejecutas tu propia instancia: el servidor ahora avisa al arrancar sobre las variables de entorno que quedaron del antiguo prefijo
MOCKAPI_. Nada las lee desde el cambio de nombre, así que hasta ahora una clave obsoleta dejaba el valor por defecto en su sitio sin decir nada, incluida QUICKMOCK_BASE_URL, de la que depende la nueva comprobación de origen.
2026-08-09 — Galería de plantillas de mocks
Añadido
- Nueva sección /templates: diez configuraciones de mock listas para usar en cuatro categorías (pagos, herramientas para desarrolladores, autenticación e identidad, uso general) — webhooks de Stripe y Shopify, eventos push de GitHub, el handshake
url_verification de Slack, discovery de OAuth2/OIDC y JWKS, cuerpos de error RFC 9457 y más.
- El botón «Crear este mock» de cada plantilla lo crea con un solo clic, y el enlace «Ábrelo en el constructor de mocks para ajustarlo antes» abre esa misma configuración precargada en el formulario habitual, para que puedas retocar campos, cabeceras o códigos de estado antes de guardar.
- La página de cada plantilla desglosa los campos clave del payload y detalla exactamente en qué se diferencia el mock del servicio real que imita: nada de fingir que un mock estático es la API auténtica.
Corregido
- El banner de la página de inicio «has alcanzado el límite de mocks activos» mostraba el límite de tamaño del cuerpo de la petición en lugar del límite real de número de mocks, además de una cola suelta
%!(EXTRA int=…). Ahora muestra el número correcto y nada más.
2026-07-26 — Límite de TTL, extensión del mock y exportación de registros
Añadido
- El tiempo de vida de un mock ahora está limitado a 30 días.
- La página del mock gana un botón «Extender» que aleja la fecha de expiración, hasta ese mismo tope de 30 días desde la fecha de creación del mock; requiere el token de administrador, igual que editarlo o eliminarlo.
- Las plantillas de cuerpo de respuesta ganaron cuatro tokens:
{{random.pick:a|b|c}}, {{seq}}, {{faker.price}} y {{faker.lorem}}.
- El inspector de peticiones puede filtrar por método HTTP, y su enlace «Descargar JSON» exporta ahora todo el historial capturado de peticiones y respuestas (incluidas las IPs de origen): requiere el token de administrador, a diferencia de la exportación de configuración.
2026-07-17 — Token de administrador por mock
Añadido
- Crear un mock ahora devuelve un token de administrador de un solo uso, mostrado una única vez en un banner copiable de la página del mock: guárdalo, porque no se puede volver a mostrar.
- Editar un mock, eliminarlo o borrar sus registros requiere ahora ese token: envíalo como
Authorization: Bearer <token>. Leer un mock, sus registros y el inspector en vivo siguen funcionando solo con el slug, sin token.
- Los mocks creados antes de este lanzamiento siguen funcionando sin un token hasta que expiran.
2026-07-05 — Inspector en vivo, exportación e importación, antispam
Añadido
- El inspector de peticiones transmite por Server-Sent Events: las peticiones nuevas aparecen al instante, sin sondeo, y la página vuelve automáticamente al sondeo allí donde SSE no esté disponible.
- Exporta la configuración de un mock como JSON desde su página (sin registros, sin IPs) e impórtala en el formulario de creación, desde un archivo o pegando el texto, enteramente en tu navegador. El formato coincide con
POST /api/mocks, así que las exportaciones se pueden reproducir vía API.
- Un filtro de contenido antispam bloquea la creación abusiva de mocks. Los operadores pueden sustituir la lista de patrones integrada (
QUICKMOCK_SPAM_PATTERNS_FILE), desactivarla o permitir IPs concretas (QUICKMOCK_SPAM_ALLOW_IPS).
2026-06-19 — Botón de CORS
Añadido
- Una casilla en el formulario de creación activa un preajuste de CORS permisivo y sin credenciales (
Access-Control-Allow-Origin: * y compañía) y responde al preflight OPTIONS con 204: llama a un mock desde el JavaScript del navegador en cualquier origen, sin proxy.
- Nueva guía de caso de uso: Simular una API con CORS.
2026-06-13 — Guías de casos de uso
Añadido
- Nueva sección /guide: páginas de destino centradas en escenarios para tareas habituales — simular una API REST, probar la lógica de reintentos, simular APIs inestables o lentas, inspeccionar webhooks, devolver datos falsos, hacer eco de la petición. Cada página trae un ejemplo de curl listo para ejecutar y todas figuran en el sitemap.
- Cada guía tiene ahora un botón copiar en sus ejemplos de curl y un CTA de un clic, Crear un mock, que abre el formulario de inicio precargado con la configuración de esa receta — método, cuerpo, retardo, tasa de error, secuencia — listo para enviar.
2026-06-11 — Simulación de API inestable
Añadido
- Secuencias de respuesta: un mock puede contener ahora una lista ordenada de hasta 10 respuestas adicionales (cada una con estado, cuerpo y cabeceras) que se recorren por petición: 1.ª llamada → respuesta principal, 2.ª → paso 2, … y vuelta a empezar. La prueba clásica de lógica de reintentos. La posición es un contador compartido por mock (Redis, con respaldo en memoria), así que todos los llamantes avanzan por la misma secuencia.
- Tasa de error y jitter de retardo: una proporción configurable de peticiones (0–100 %, sorteada en cada una) puede responder con un estado y un cuerpo alternativos, y el retardo de respuesta puede ser un rango mín–máx para simular latencia aleatoria en vez de un valor fijo. Los tres ajustes se combinan, y una nueva cabecera de respuesta
X-Mockapi-Variant (default, error o seq-i/n) indica qué rama sirvió cada petición. Se configura desde el formulario de creación (nueva sección «Simulación de inestabilidad») y desde la API.
- La sección 'Quién construyó esto' en la página de inicio ahora tiene enlaces al sitio del creador.
2026-06-10 — Tokens de solicitud eco
Añadido
- Los nuevos tokens dinámicos
request.* devuelven la petición entrante dentro del cuerpo de la respuesta: {{request.method}}, {{request.path}}, {{request.ip}}, {{request.query.id}}, {{request.header.x-request-id}}, {{request.body}} y rutas de punto en JSON como {{request.body.user.name}}. Los valores se insertan literalmente y no se almacena nada adicional: un mock estático ya puede responder con datos de la propia petición.
Corregido
- La entrada del 2026-05-20 que aparece más abajo mostraba el escapado de plantillas de Go (
{{`…`}}) alrededor de cada token en lugar del token en sí, un resto de haber copiado el marcado desde una plantilla HTML. Ahora muestra {{faker.uuid}} y compañía en limpio.
2026-06-08 — Enlace de autor
Añadido
- El crédito del pie de página ahora enlaza el nombre del autor con su sitio personal.
2026-05-25 — Pase de contenido del sitio
Añadido
- Esta página del registro de cambios en EN y RU.
- Página de inicio: sección de glosario rápido.
- Página de inicio: un bloque Quién construyó esto con la biografía del autor y enlaces directos a GitHub, LinkedIn y Telegram, además de una sección personal Por qué creé Quickmock, para que la página no sea la landing anónima de una herramienta más.
- Fecha de actualización visible.
Corregido
- El parámetro
?lang=<código> de la URL ahora sirve de verdad ese idioma. Antes los enlaces canónicos y hreflang apuntaban a ?lang=ru, pero el resolutor solo leía la cookie y Accept-Language, así que un bot que siguiera el enlace hreflang veía contenido en inglés: la señal multilingüe era mentira.
Seguridad
- Endurecimiento del origen en
/m/*: el enrutador público de mocks ahora elimina las cabeceras que alteran la petición y que un llamante malicioso podría usar para confundir a los proxies intermedios, los slugs se alargaron (más entropía) y los mensajes de error internos se redactan antes de salir a la red: ni fragmentos de DSN ni trazas de pila.
- El selector de idioma (
POST /language) ahora acepta Referers absolutos del mismo origen, de modo que la redirección de vuelta funciona detrás de proxies inversos que reescriben la cabecera Referer. Los Referers de otro origen se siguen rechazando.
Corregido
- El middleware RealIP ahora confía en
X-Forwarded-For / X-Real-IP cuando el par inmediato es loopback o una dirección privada o link-local. Antes solo se respetaba XFF para pares loopback, así que detrás de Docker Compose todas las peticiones se atribuían a la puerta de enlace del puente (por ejemplo 172.18.0.1), lo que dejaba creator_ip y request_ip sin valor y convertía el límite de mocks por IP en un límite global.
- Almacenamiento de encabezados entrantes normalizados.
- Ejemplos de slug en la interfaz de usuario actualizados.
2026-05-21 — Exención de responsabilidad UGC
Añadido
- Aviso legal en el pie de página y modal de Términos de uso: los mocks son contenido generado por los usuarios, se detallan las categorías prohibidas (malware, phishing, CSAM, infraestructura de ataque) y se publica un canal para denunciar abusos.
- Mejora visual en dispositivos móviles.
2026-05-20 — Tokens dinámicos
Añadido
- Sustitución de tokens Faker / now en los cuerpos de respuesta:
{{faker.uuid}}, {{faker.email}}, {{faker.name}}, {{now.iso8601}} y 18 más (personas, identificadores, red, texto, tiempo). El mock almacena la plantilla tal cual y genera valores aleatorios nuevos en cada petición, de modo que un solo mock puede servir datos distintos en cada llamada. La lista completa está en Tokens dinámicos, en el formulario de creación.
2026-05-18 — Reforzamiento y mejoras de calidad de vida
Corregido
- El despliegue con Docker Compose ahora espera al healthcheck
--wait en lugar de sondear /healthz en un bucle de shell, así que los despliegues ya no imprimen el cosmético curl: (52) Empty reply mientras el proxy y el proceso de Go terminan de competir entre sí.
- Recomendaciones de configuración de contraseñas de Postgres.
2026-05-17 — Lanzamiento público inicial
Añadido
- Motor central del mock.
- Enrutador público /m/:slug.
- Inspector de solicitudes en vivo.
- Importación con comandos cURL.
- Fragmentos de código listos para su uso.
- Vistas previas de solo lectura.
- Límites por IP y cuotas por hora.
- Límite de tamaño del cuerpo de 512 KB.
- Soporte de Docker Compose.
- Localización y traducciones (EN + RU).
- Privacidad y ausencia total de tracking o analíticas de terceros.
Historial de git completo en GitHub →
← Volver al inicio