Laboratorio ejecutable · Bloque 1
EX-B1-04
JSON que parece válido
Un importador rechaza varios payloads por motivos distintos. Algunos ni siquiera son JSON; otros son JSON válido pero contradicen el contrato esperado.
Cómo abordarla
Observa el fundamento construyendo una API
Descarga el starter, predice un resultado, ejecuta, modifica la API y vuelve a observar. La explicación breve acompaña al código; no lo sustituye.
Abrir laboratorio de código
1. Descarga y arranca
- Starter ejecutable de validación JSONAPI parcial, cuatro fixtures y tests para sintaxis, tipos, null y anidación.
- Colección de payloadsFragmentos sin modificar, incluidos los que contienen sintaxis inválida.
- Hoja de diagnósticoPlantilla para validez sintáctica, cumplimiento del contrato y cambio mínimo propuesto.
2. Escribe y prueba
- Ejecuta el baseline y conserva qué casos fallan en parsing y cuáles llegan a la validación de contrato.
- Implementa `validate_document` sin coerciones silenciosas y con rutas de error como `owner.name` o `tags[1]`.
- Conecta el validador a `POST /documents/validate` y devuelve 400 para JSON malformado y 422 para contrato incumplido.
- Añade un caso propio para campo ausente y otro para `summary: null`; ejecuta pytest y una petición HTTP real.
3. Demuestra el comportamiento
- Código del validador y endpoint, sin solución incrustada en los fixtures.
- Tests verdes para parser, contrato, null, ausencia y documento válido.
- Dos respuestas HTTP capturadas con status y ruta del error.
La respuesta principal es tu código y sus pruebas. Usa este espacio solo para anotar la predicción inicial y el resultado observado.
Predicción breve antes de ejecutar
Antes de ejecutar, ¿en qué frontera esperas que falle cada fragmento y qué status debe producir tu API?
Información que necesitas
Fragmento A
{'id': 'doc-7', 'title': 'Quarterly report', 'published': True,}
Fragmento B
{"id": 7, "title": "Quarterly report", "tags": "api,http", "published": "false",
"summary": null, "owner": {"id": "u-3", "name": "Ada"}}
Fragmento C
{"id": "doc-8", "title": "Board minutes", "tags": ["archive", 2026],
"published": false, "owner": null}
Fragmento D
{"id": "doc-9", "title": "Release notes", "tags": [],
"published": true, "owner": {"id": "u-8", "name": "Lin"}}Comprueba estas tres cosas
- Clasifica A–D antes de intentar corregirlos.
- Nombra el primer problema concreto que encuentres en cada fragmento.
- Explica por qué null y un campo ausente no significan necesariamente lo mismo.
Anota predicción, comando ejecutado y diferencia observada; el código vive en tu workspace.
Sin respuesta guardada.
Pistas opcionales
Pista 1 · Dos preguntas distintas
- Primero pregunta si un parser JSON podría leer el texto.
- Después pregunta si el valor obtenido satisface el contrato.
Pista 2 · Revisa literales y comillas
- JSON no utiliza exactamente los mismos literales ni las mismas reglas de comillas que Python.
Pista 3 · Recorre la estructura
- No te detengas en los campos de primer nivel: revisa elementos de arrays y objetos anidados.
Profundización opcional
Implementar una API que distinga sintaxis JSON inválida de un documento válido que incumple el contrato, con errores localizables.
Contexto adicional
- Contrato de referencia: id es string requerido; title es string requerido; tags es array de strings; published es boolean; summary puede ser string o null; owner es un objeto con id y name.
- La ausencia de summary está permitida. La ausencia de id, title u owner no lo está.
- No corrijas automáticamente los datos: primero clasifica y explica cada fallo.
Cómo revisar tu respuesta
- No se valida el contrato de un fragmento antes de resolver su sintaxis JSON.
- String, número, boolean y array no se consideran intercambiables por su apariencia.
- Null no se interpreta como ausencia.
- Un fragmento válido y conforme se reconoce sin introducir cambios innecesarios.
- La API diferencia 400 y 422 mediante ejecución, no solo mediante una tabla teórica.
Evidencia, revisión y reinicio
- Parser y endpoint de validación implementados por el alumno.
- Tests que separan JSON inválido de payload JSON no conforme.
Revisión: con Codex, utilizando la evidencia y los criterios anteriores; no se publica una solución oficial.
Reinicio: Eliminar el workspace temporal y volver a extraer el ZIP.