Comprendere la differenza tra PUT e POST.
PUT è pensato per sostituire la risorsa (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6) indicata dall'URI con una nuova. Ed è idempotente, cioè quante volte lo invochi con lo stesso carico utile, il risultato è lo stesso; renderà la stessa risorsa disponibile attraverso l'URI.
Quindi, se la risorsa non è già presente, ne viene creata una nuova. Anche in questo caso il risultato è lo stesso, cioè renderà disponibile la stessa risorsa attraverso l'URI.
POST si intende creare una sottorisorsa (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5) alla risorsa indicata dall'URI.Se la risorsa è una lista, aggiungerà un elemento ad essa. Se è un oggetto allora dovrebbe aggiungere qualcosa all'elemento, un attributo può essere.
Quindi, idealmente se l'elemento indicato dall'URI non è disponibile, dovrebbe essere una condizione di errore. Può essere un "404". Il POST consiste nell'aggiungere a una risorsa esistente.
Venendo alla tua domanda, è meglio usare POST con "/ entities /" come URI come da descrizione sopra. Non si dovrebbe utilizzare un UUID di risorse inesistente nell'URI con il metodo POST. Se stai usando PUT quindi usa "/ entities /".
POST /entities/ HTTP/1.1
Content-Type: application/json
{
UUID: <UUID>..
OtherStuff: ...
}
PUT /entities/<UUID> HTTP/1.1
Content-Type: application/json
{
UUID: <UUID>..
OtherStuff: ...
}
risposta dovrebbe essere lo stesso
HTTP/1.1 201 Created
Location: http://www.examples.com/entities/<uuid>/
sebbene PUT è idempotente ma se il metodo PUT viene riutilizzato allora dovrebbe usare 200 o 204 in risposta.
La seconda domanda: idealmente i dettagli della risorsa completa devono essere nel payload PUT anziché solo nell'URI.
Si confonde "REST" con "HTTP". Non esiste "REST RFC". C'è un "RFC HTTP", ma al giorno d'oggi non è più RFC 2616. –