Il POST di un elemento generalmente non è esposto o non è valido nelle API REST?

1

Stavo navigando in wikipedia su REST , leggendo specificamente la sezione su API REST

Leggendo i diversi modi di trattare gli elementi dalle raccolte, leggo che POST è generalmente non usato .

Come funziona in pratica? Quando vengono sviluppate API REST di successo, quando si tratta di elementi, il POST non esiste o restituisce un errore?

C'è un ragionamento dietro che non ho afferrato?

    
posta Crowie 01.10.2013 - 13:48
fonte

3 risposte

7

Secondo RFC per HTTP , su cui si basa la maggior parte delle API REST, il significato dei metodi è:

  • GET: recupera una risorsa
  • POST: aggiungi un'entità secondaria a una risorsa
  • PUT: crea o sostituisce una risorsa
  • DELETE: rimuovi una risorsa

Nell'uso comune, anche il POST viene spesso utilizzato per modificare una risorsa indicando le modifiche che devono essere applicate.

La distinzione principale tra POST e PUT è che dovresti usare PUT se conosci già l'URI esatto della risorsa che stai creando e POST se conosci solo la collezione che manterrà la risorsa.

Per quanto riguarda l'utilizzo nelle API REST, consiglierei di utilizzare il POST per aggiungere risorse a una raccolta e per modificare le risorse a tratti. Se nessuno dei due ha senso, è necessario restituire un errore 405 (metodo non consentito).

    
risposta data 01.10.2013 - 15:02
fonte
5

Ho visto molta confusione da parte delle persone su cosa POST significhi realmente. Fa non significa creare, e fa non significa aggiornamento. POST significa "inviare un messaggio a una risorsa senza l'aspettativa di idempotenza". Gli altri metodi HTTP di base sono tutti idempotenti: se si fa la stessa cosa due volte, si ottiene (moralmente) lo stesso risultato.

Facciamo chiarezza. Quando usi POST due volte di seguito, inviando il messaggio stesso alla risorsa stessa , stai comunque anticipando diversi risultati dalle due operazioni. Questo può mappare abbastanza bene alla creazione in cui il server sta creando nuovi URI di risorse in risposta ai messaggi: diversi URI, non idempotenti. D'altra parte, se il client sta creando l'URI (un caso comune in cui si sta modellando un filesystem), il POST è la cosa sbagliata per la creazione: PUT alla risorsa che si desidera creare è più tipicamente corretto lì (e PUTting the lo stesso contenuto dello stesso URI genera due volte la stessa cosa: il contenuto esiste in seguito a quell'URI anche se non esisteva prima).

È importante rendersi conto che REST non consiste semplicemente nel disporre di collezioni e valori in queste raccolte. Può fare molto di più (anche se in questo caso devi fare più lavoro per renderlo tutto rintracciabile).

    
risposta data 01.10.2013 - 16:31
fonte
0

Filosoficamente, è una domanda difficile ... Ci sono scuole di pensiero su REST e nessuno ha ragione o torto.

Il modo in cui sviluppo le mie API di riposo è semplice:

  • OTTIENI - Leggi un elemento
  • PUT - Aggiorna un elemento
  • POST - crea un elemento
  • DELETE - Elimina un elemento

La voce di Wikipedia dice che PUT può essere usato per creare o sostituire. Certo, può essere fatto in questo modo, ma lo trovo più chiaro (ed è soggettivo), quindi separa le 2 azioni.

Tutto si riduce a una questione di gusti.

    
risposta data 01.10.2013 - 14:33
fonte

Leggi altre domande sui tag