Hoy · Hoja de ruta
- 1. Aprende: Qué compone el contrato de una API y por qué no se rompe a la ligera.
- 2. Haz: Escribe el contrato completo de tu API antes de implementarlo.
- 3. Comprueba: Otra persona podría escribir el cliente solo con tu contrato.
Antes de empezar · 5 minutos, sin apuntes
- Si cambias el nombre de un campo de la respuesta, ¿qué se rompe?
- ¿Cómo sabría un cliente distinguir «no existe» de «se rompió»?
- ¿Qué debe devolver una creación correcta?
Lo que forma el contrato
| Pieza | Qué fija |
|---|---|
| Ruta y método | Cómo se pide cada operación |
| Cuerpo de la petición | Qué campos se envían y de qué tipo |
| Código de estado | Qué ha pasado |
| Cuerpo de la respuesta | Qué campos vuelven y con qué nombre |
| Formato de error | La misma forma, siempre |
La tabla de tu API
| Método | Ruta | Éxito | Errores |
|---|---|---|---|
| GET | /api/productos |
200 | 500 |
| GET | /api/productos/:id |
200 | 400, 404 |
| POST | /api/productos |
201 | 400 |
| PUT | /api/productos/:id |
200 | 400, 404 |
| PATCH | /api/productos/:id |
200 | 400, 404 |
| DELETE | /api/productos/:id |
204 | 400, 404 |
El 400 de las rutas con identificador no es un capricho: /api/productos/abc es una petición mal formada, y responder 404 a eso confunde «no existe» con «no me has pedido bien».
El formato de error
{
"error": "Los datos no son válidos",
"codigo": "VALIDACION",
"detalles": [
{ "campo": "precio", "mensaje": "Debe ser un número mayor que cero" },
{ "campo": "nombre", "mensaje": "Es obligatorio" }
]
}
Un solo formato de error, en toda la API
Si un error llega a veces como texto plano, a veces como { error } y a veces como { mensaje }, el cliente necesita un tratamiento distinto para cada ruta, y ninguno para las que todavía no existen.
Con una forma única, el cliente escribe una función de tratamiento de errores y vale para toda la API, hoy y cuando crezca. El campo codigo permite además reaccionar por programa sin depender del texto, que puede traducirse o reescribirse.
Métodos: qué se puede repetir
| Método | Repetirlo dos veces |
|---|---|
| GET | No cambia nada |
| PUT | Deja el mismo resultado |
| DELETE | El segundo no borra nada nuevo |
| POST | Crea otro |
Esa propiedad —que repetir la operación no cambie el resultado— es la que permite que un cliente reintente sin miedo cuando la red falla. Con POST no se puede, y por eso los formularios que se envían dos veces crean dos pedidos.
Tarea 2 · El contrato escrito
- Escribe la tabla completa de tu API, con éxitos y errores por ruta.
- Define el objeto que representa un producto: campos, tipos y cuáles son obligatorios.
- Define el formato único de error, con sus códigos.
- Escribe
peticiones.httpcon un ejemplo de cada caso, incluidos los que fallan. - Dale el contrato a un compañero y que escriba, sobre papel, cómo llamaría a tres rutas.
Checkpoint · fin de la sesión 2
- Tu contrato cubre método, ruta, cuerpo, estado y respuesta.
- Todos los errores tienen la misma forma.
- Distingues 400 de 404 en la misma ruta.
- Sabes qué operaciones se pueden repetir sin consecuencias.
Antes de cerrar · 2 minutos, sin mirar
- ¿Qué código devuelve una creación correcta?
- ¿Qué responde
/api/productos/abc? - ¿Por qué un formato único de error facilita el cliente?
Ver respuestas
1 · Un 201, con la cabecera Location.
2 · Un 400: la petición está mal formada, no es que el recurso no exista.
3 · Porque permite escribir un solo tratamiento válido para toda la API.