Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Biblioteca FastAPIFundamentos HTTP

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.

  • Escribir y ejecutar código
  • Implementación de validación JSON
  • Inicial
  • Apoyo alto
  • Starter ejecutable

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

2. Escribe y prueba

  1. Ejecuta el baseline y conserva qué casos fallan en parsing y cuáles llegan a la validación de contrato.
  2. Implementa `validate_document` sin coerciones silenciosas y con rutas de error como `owner.name` o `tags[1]`.
  3. Conecta el validador a `POST /documents/validate` y devuelve 400 para JSON malformado y 422 para contrato incumplido.
  4. 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

  1. Clasifica A–D antes de intentar corregirlos.
  2. Nombra el primer problema concreto que encuentres en cada fragmento.
  3. 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.