DRF +
pip install drf-spectacular. No mires solutions.md hasta entregar.
Ejercicio 1 — El serializer con límites
- Escribe
ReserveInputSerializercompleto (event UUID, seats 1-8 con sector/row/number, promo_code opcional write_only). - Prueba desde shell con
serializer.is_valid(): 0 asientos, 9 asientos, seats mal formado, uuid inexistente. ¿Mensajes útiles en cada caso? - Añade
validate_eventque comprueba existencia (forma/referencia) y justifica por qué el "evento pasado" (negocio) va en el servicio y no aquí.
Ejercicio 2 — Las capas en acción
- Envía un POST con JSON malformado, otro con tipos mal y otro con negocio imposible (asiento ocupado). Documenta qué capa responde cada uno y con qué status.
- Mueve (hipotéticamente) la comprobación "asiento libre" al serializer: ¿qué raza reintroduce? (conéctalo con la 10).
Ejercicio 3 — El contrato vivo
- Instala drf-spectacular, publica
/api/schema/y/api/docs/. Descarga el YAML y revisa qué adivinó mal (responses sin documentar, request bodies ambiguos). - Anota
@extend_schemaen tus 3 endpoints más complejos (reservar, webhook, redeem tarjeta) con request/responses/errores documentados. - Añade al pipeline (o script local)
spectacular --fail-on-warny hazlo pasar.
Ejercicio 4 — El contrato como test
- Escribe un test que: llame a tu endpoint de reserva, tome la respuesta JSON y valide que su status/estructura coincide con lo declarado en el schema (mínimo: status code y claves del body).
- Extrae los
examplesdel schema y valida una respuesta real contra el example (a mano o con jsonschema). ¿Cuántas veces has visto docs que mienten? Este test es la vacuna.
Entrega
Pega serializer, schema recortado y resultados del CI. Después: Lección 16 — gRPC, GraphQL, WebSockets/SSE.