L'idée est que le corps de la réponse vous donne une page qui vous relie à l'objet:
201 Créé
Le code d'état 201 (Créé) indique que la demande a été satisfaite et a entraîné la création d'une ou plusieurs nouvelles ressources. La ressource principale créée par la demande est identifiée par un champ d'en-tête Location dans la réponse ou, si aucun champ Location n'est reçu, par l'URI de demande effective.
Cela signifie que vous incluez un Locationdans l'en- tête de réponse qui donne l'URL de l'endroit où vous pouvez trouver l' élément nouvellement créé :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Corps de réponse
Ils continuent ensuite en mentionnant ce que vous devez inclure dans le corps de la réponse :
La charge utile de réponse 201 décrit et lie généralement à la ou aux ressources créées.
Pour l'humain qui utilise le navigateur, vous lui donnez quelque chose qu'il peut consulter et cliquez pour accéder à sa ressource nouvellement créée:
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 page ne sera utilisée que par un robot, il est logique que la réponse soit lisible par ordinateur:
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>
Ou, si vous préférez:
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 réponse dépend entièrement de vous; c'est arbitrairement ce que vous voudriez.
Cache convivial
Enfin, il y a l'optimisation que je peux pré-mettre en cache la ressource créée (car j'ai déjà le contenu; je viens de le télécharger). Le serveur peut renvoyer une date ou un ETag que je peux stocker avec le contenu que je viens de télécharger:
Voir la section 7.2 pour une discussion sur la signification et le but des champs d'en-tête du validateur, tels que ETag et Last-Modified, dans une réponse 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.
Et les ETags sont des valeurs purement arbitraires. Tout ce qui compte, c'est de les avoir différents lorsqu'une ressource change (et que les caches doivent être mis à jour). L'ETag est généralement un hachage (par exemple SHA2). Mais cela peut être une base de données rowversionou un numéro de révision incrémenté. Tout ce qui changera lorsque la chose changera.