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


15

Sto creando un'API REST che consenta richieste di inserimenti (POST, non idempotenti) e aggiornamenti (PUT, idempotent) di aggiungere / aggiornare il database alla nostra applicazione.

Mi chiedo se ci sono standard o best practice riguardo a quali dati restituiamo al cliente nella risposta per un'operazione POST (insert). Dobbiamo restituire almeno un valore ID record (ad es. Il tuo nuovo record è il record # 1234).

Dovremmo rispondere con l'intero oggetto? (ad es. 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 ottenere il record completo)

Un'intestazione di reindirizzamento che li punta all'URL per l'oggetto completo?

Qualcos'altro del tutto?


Non sono sicuro delle migliori pratiche, ma per me personalmente probabilmente prenderei in considerazione la possibilità di restituire l'ID appena creato in caso di successo altrimenti -1 ecc
Ti

Risposte:


13

Bene, in un'interfaccia REST, seguendo HTTP ove possibile, restituirei 201 e un URI nel campo dell'intestazione Posizione alla risorsa appena creata. Ecco cosa dice la definizione del codice di stato :

10.2.2 201 Creato

La richiesta è stata soddisfatta e ha portato alla creazione di una nuova risorsa. La risorsa appena creata può essere referenziata dagli URI restituiti nell'entità della risposta, con l'URI più specifico per la risorsa fornita da un campo di intestazione Ubicazione. La risposta DOVREBBE includere un'entità contenente un elenco di caratteristiche e ubicazioni delle risorse da cui l'utente o l'agente utente possono scegliere quello più appropriato. Il formato dell'entità è specificato dal tipo di supporto indicato nel campo di intestazione Tipo di contenuto. Il server di origine DEVE creare la risorsa prima di restituire il codice di stato 201. Se l'azione non può essere eseguita immediatamente, il server DOVREBBE rispondere invece con una risposta 202 (accettata).

Se qualcosa è andato storto, direi che non dovresti tornare -1come hanno detto gli altri, ma semplicemente un codice di errore client o server (4xx o 5xx). Ad esempio, se un utente non è autorizzato a creare alcune nuove risorse, si restituisce semplicemente un "401 non autorizzato", niente di più e niente di meno.


E il corpo? vuoto o l'intero oggetto appena creato in risposta?
Sviluppatore

Due opzioni comuni che conosco sono 1) impostare l'intestazione della posizione su dove è possibile trovare la nuova entità, oppure, 2) inclusa la nuova entità nel corpo. Personalmente vado con quest'ultimo per motivi pratici. A volte le cose si sono unite per una sensazione più riposante;)
Bruno Schäpper,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.