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 Location
dans 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 ETag
s 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 rowversion
ou un numéro de révision incrémenté. Tout ce qui changera lorsque la chose changera.