Risposta corretta per un inserto REST: nuovo record completo o solo il valore ID del record?

14

Sto costruendo un'API REST che consente di inserire (POST, non idempotente) e aggiornamenti (PUT, idempotent) richieste di aggiungere / aggiornare database alla nostra applicazione.

Mi chiedo se esistano standard o best practice relativi ai dati che inviamo al client nella risposta per un'operazione POST (inserimento). Dobbiamo restituire almeno un valore ID del record (ad es. Il tuo nuovo record è il record n. 1234).

Dovremmo rispondere con l'oggetto completo? (Ad esempio, essenzialmente la stessa risposta che avrebbero ricevuto da una richiesta "GET / object_type / 1234")

Dovremmo rispondere solo con il nuovo valore ID? (ad esempio "{id: 1234}", il che significa che se vogliono recuperare l'intero record devono fare una richiesta HTTP GET aggiuntiva per prendere il record completo)

Un'intestazione di reindirizzamento che li indirizza all'URL per l'intero oggetto?

Qualcos'altro interamente?

    
posta Keith Palmer Jr. 24.10.2012 - 05:48
fonte

1 risposta

12

Bene, in un'interfaccia REST, seguendo HTTP dove mai possibile, restituirei 201 e un URI nel campo dell'intestazione Location alla risorsa appena creata. Ecco cosa Definizioni dei codici di stato dice:

10.2.2 201 Created

The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.

Se qualcosa è andato storto, direi che non dovresti restituire -1 come altri hanno detto, ma semplicemente un codice di errore del client o del server (4xx o 5xx). Ad esempio, se a un utente non è consentito creare una nuova risorsa, sarà sufficiente restituire un "401 Non autorizzato", niente di più e niente di meno.

    
risposta data 24.10.2012 - 08:15
fonte

Leggi altre domande sui tag