La idea es que el cuerpo de respuesta te dé una página que te vincule a la cosa:
201 Creado
El código de estado 201 (Creado) indica que la solicitud se ha cumplido y se ha creado uno o más recursos nuevos. El recurso primario creado por la solicitud se identifica mediante un campo de encabezado de Ubicación en la respuesta o, si no se recibe ningún campo de Ubicación, mediante el URI de solicitud efectivo.
Esto significa que se incluiría una Location
en la respuesta de cabecera que da a la URL de donde se puede encontrar la recién creada cosa :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Cuerpo de respuesta
Luego mencionan lo que debe incluir en el cuerpo de respuesta :
La carga útil de 201 respuestas generalmente describe y enlaza a los recursos creados.
Para los humanos que usan el navegador, les das algo que pueden mirar y hacer clic para acceder a su recurso recién creado:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: text/html
Your answer has been saved!
Click <A href="https://stackoverflow.com/a/36373586/12597">here</A> to view it.
Si la página solo será utilizada por un robot, tiene sentido que la respuesta sea legible por computadora:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586</resource>
<resource>http://stackoverflow.com/a/1962757/12597</resource>
</additional>
</createdResource>
O, si lo prefieres:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586",
"http://stackoverflow.com/a/36373586/12597"
]
}
La respuesta es totalmente suya; es arbitrariamente lo que te gustaría.
Caché amigable
Finalmente, está la optimización de que puedo almacenar previamente en caché el recurso creado (porque ya tengo el contenido; lo acabo de cargar). El servidor puede devolver una fecha o ETag que puedo almacenar con el contenido que acabo de cargar:
Consulte la Sección 7.2 para una discusión sobre el significado y el propósito de los campos de encabezado del validador, como ETag y Last-Modified, en una respuesta 201.
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/23704283/12597
Content-Type: text/html
ETag: JF2CA53BOMQGU5LTOQQGC3RAMV4GC3LQNRSS4
Last-Modified: Sat, 02 Apr 2016 12:22:39 GMT
Your answer has been saved!
Click <A href="https://stackoverflow.com/a/36373586/12597">here</A> to view it.
Y ETag
s son valores puramente arbitrarios. Lo único que importa es que sean diferentes cuando un recurso cambia (y las memorias caché deben actualizarse). El ETag suele ser un hash (por ejemplo, SHA2). Pero puede ser una base de datos rowversion
o un número de revisión incremental. Cualquier cosa que cambie cuando la cosa cambie.