201 Created: confirmar que se ha creado un recurso
201 Created confirma que la solicitud tuvo éxito y creó un recurso nuevo, que normalmente se identifica con la cabecera Location.
201 Created confirma que la solicitud tuvo éxito y creó algo nuevo: una cuenta, un pedido, un archivo subido, un registro en una API. Es un estado propio de las operaciones de escritura, y la respuesta debe apuntar al nuevo recurso.
Definición
La RFC 9110, sección 15.3.2 dice que la solicitud “se ha cumplido y ha dado lugar a la creación de uno o más recursos nuevos”. El recurso nuevo principal se identifica con la cabecera Location o, si no la hay, con la URL de la solicitud. El cuerpo suele describir el recurso nuevo y enlazarlo. Un 201 suele responder a un POST (crear dentro de una colección) o a un PUT (crear en una URL elegida por el cliente).
POST /api/v1/articles HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"title":"HTTP status codes for SEO"}
HTTP/1.1 201 Created
Location: /api/v1/articles/4821
Content-Type: application/json
{"id":4821,"title":"HTTP status codes for SEO","status":"draft"}
Si el trabajo todavía no ha terminado, 202 Accepted es más honesto. Si el recurso ya existe, plantéate 409 Conflict; si los datos de entrada no superan la validación, 422 Unprocessable Content.
Impacto en el SEO
Las páginas pensadas para buscadores deben responder a GET con 200 OK, no con 201. La documentación de Google indica que, con 201 y 202, Googlebot espera el contenido durante un tiempo limitado y luego pasa lo que haya recibido al proceso de indexación. Así que una página servida con 201 todavía puede procesarse, pero ese estado apunta a un error de enrutamiento o de código; por ejemplo, un controlador pensado para crear registros que se reutiliza para mostrar una página pública. Corrígelo en lugar de confiar en la tolerancia de Google.
Consejos para desarrolladores
- Envía siempre
Locationcon la URL del recurso nuevo. - Devuelve en el cuerpo la representación creada para ahorrarle al cliente una segunda solicitud.
- Haz que los endpoints de creación se puedan reintentar sin riesgo, por ejemplo con una clave de idempotencia, para que una solicitud repetida no cree duplicados.
Cómo comprobarlo
Pasa las URL públicas por el comprobador de códigos de estado HTTP; todo lo que no sea un 200 en una página indexable merece una revisión. En los endpoints de una API, curl con -i muestra la línea de estado y la cabecera Location:
curl -i -X POST https://api.example.com/v1/articles \
-H 'Content-Type: application/json' -d '{"title":"Draft"}' Preguntas frecuentes
¿Cuál es la diferencia entre 200 y 201?
200 OK es un éxito general. 201 Created indica específicamente que se creó un recurso nuevo, y suele incluir una cabecera Location con la URL de ese recurso.
¿Debe una respuesta 201 incluir cuerpo?
No es obligatorio, pero lo normal es que lo lleve: una descripción del recurso nuevo o el propio recurso, junto con un enlace a él. Así el cliente se ahorra una solicitud adicional.
¿Puede una página web devolver 201 a Googlebot?
No debería. Google dice que espera un tiempo limitado el contenido de un 201 y luego procesa lo que haya recibido, pero las páginas públicas deben devolver 200. Un 201 en una solicitud GET suele indicar un error de enrutamiento.