Optimiza tu API en Django REST Framework con un endpoint que lista y crea pacientes en la misma URL, valida datos con serializadores y responde con códigos HTTP claros como 201 Created y 404 Not Found. Aprende a usar la variable request, el atributo method y a estructurar URLs por aplicación con include y parámetros int:pk.
¿Cómo crear y listar pacientes en un endpoint REST con GET y POST?
Un mismo recurso puede listar con GET y crear con POST usando la misma ruta. La clave está en leer request.method y aplicar un condicional por método para ejecutar la lógica correcta.
¿Qué hace la misma URL según el método?
En GET: se consulta la base de datos y se serializa con many=True.
En POST: se recibe request.data y se intenta crear un paciente.
La variable request expone el atributo method para decidir la acción.
¿Cómo validar y guardar con el serializador?
Se instancia el serializador con el parámetro data=request.data.
Se valida con isValid (en DRF se usa con excepciones para manejar errores automáticamente).
Si es válido, se guarda con serializer.save() como si fuera un ModelSerializer.
Se puede retornar sin body y comunicar éxito solo con status=HTTP_201_CREATED.
Los campos de solo lectura (como id) no se toman del body: el backend asigna el valor.
¿Cómo manejar errores y validaciones con serializadores y códigos HTTP?
Validar entradas del usuario es crítico. Un dato inválido (por ejemplo, una fecha con formato incorrecto) no debe causar un 500, sino una respuesta JSON con errores de campo.
¿Qué pasa con datos inválidos y raisedException?
Al usar raisedException en la validación, DRF captura los errores y los formatea en JSON.
El cliente recibe el detalle del campo y el formato esperado, evitando caídas del servidor.
¿Por qué eliminar el if tras las excepciones?
Si se lanza una excepción de validación, el flujo se detiene.
Por eso, se puede omitir el if “si es válido” y dejar la secuencia: validar → guardar → responder.
¿Cómo implementar detalle y rutas en Django con include y parámetros?
Para el detalle, el mismo recurso admite ver con GET y modificar con PUT (el reto propuesto). Es necesario capturar el pk desde la URL y manejar el caso de un paciente inexistente.
¿Cómo obtener un paciente o responder 404 not found?
Intentar con get y capturar la excepción Patient.DoesNotExist.