L'idea è che il corpo della risposta ti dia una pagina che ti collega alla cosa:
201 Creato
Il codice di stato 201 (Creato) indica che la richiesta è stata soddisfatta e ha portato alla creazione di una o più nuove risorse. La risorsa primaria creata dalla richiesta viene identificata da un campo di intestazione Posizione nella risposta o, se non viene ricevuto alcun campo Posizione, dall'URI della richiesta effettiva.
Questo significa che si dovrebbe includere una Location
nella risposta di intestazione che dà l'URL dove è possibile trovare la nuova creazione cosa :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Corpo di risposta
Quindi continuano a menzionare cosa dovresti includere nel corpo della risposta :
Il payload della risposta 201 in genere descrive e collega alle risorse create.
Per le persone che utilizzano il browser, dai loro qualcosa che possono guardare e fare clic per accedere alla loro risorsa appena creata:
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.
Se la pagina verrà utilizzata solo da un robot, ha senso che la risposta sia leggibile dal computer:
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>
Oppure, se preferisci:
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 risposta dipende interamente da te; è arbitrariamente quello che vorresti.
Cache friendly
Infine c'è l'ottimizzazione che posso pre-memorizzare nella cache la risorsa creata (perché ho già il contenuto; l'ho appena caricato). Il server può restituire una data o ETag che posso memorizzare con il contenuto che ho appena caricato:
Vedere la Sezione 7.2 per una discussione sul significato e lo scopo dei campi di intestazione del validatore, come ETag e Last-Modified, in una risposta 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.
E ETag
sono valori puramente arbitrari. Tutto ciò che conta è averli diversi quando una risorsa cambia (e le cache devono essere aggiornate). L'ETag è solitamente un hash (ad esempio SHA2). Ma può essere un database rowversion
o un numero di revisione crescente. Qualunque cosa cambierà quando la cosa cambierà.