Qual è la differenza tra PUT, POST e PATCH? [chiuso]


280

Qual è la differenza tra i metodi PUT, POST e PATCH nel protocollo HTTP?



4
possibile duplicato di PUT vs POST in REST
Nowhere man

12
L'uso di qualsiasi cosa diversa da GET / POST è folle nelle moderne API Web. Troppi lo fanno. Gli URI identificati nella maggior parte delle app moderne NON SONO risorse da sostituire, aggiornare, ecc. Non sono documenti. Sono PROCEDURE chiamate. L'URI stesso identifica raramente una risorsa effettiva, oltre al metodo invocato. Pertanto, utilizzare GET per richieste di querystring e POST quando è necessario pubblicare dati o file JSON nel corpo della richiesta. IMO, qualsiasi altra cosa sta cercando di trasformare i concetti obsoleti che coinvolgono URI e operazioni su documenti HTML statici in una nuova architettura che non assomiglia per niente.
Triynko,

1
Tutte ottime risposte. Volevo solo condividere la mia risposta alle differenze e quando dovresti usarle tutte.
Treno

@Triynko E le procedure a cui ti riferisci riguardano la creazione , la cancellazione e la modifica delle risorse. Nessun modo migliore per trasmettere tali idee se non essere RESTful. Perchè no?
Константин Ван

Risposte:


201

Differenza tra PUT, POST, GET, DELETE e PATCH IN HTTP Verbi:

I verbi HTTP più comunemente usati POST, GET, PUT, DELETE sono simili alle operazioni CRUD (Crea, Leggi, Aggiorna ed Elimina) nel database. Specifichiamo questi verbi HTTP nella capitale caso. Quindi, il seguito è il confronto tra di loro.

  1. create - POST
  2. leggi - OTTIENI
  3. aggiornamento - PUT
  4. elimina - ELIMINA

PATCH: invia una modifica parziale a una risorsa. Se è necessario aggiornare solo un campo per la risorsa, è possibile utilizzare il metodo PATCH.

Nota:
poiché POST, PUT, DELETE modificano il contenuto, i test con Fiddler per l'URL sottostante imitano solo gli aggiornamenti. In realtà non elimina o modifica. Possiamo solo vedere i codici di stato per verificare se si verificano inserimenti, aggiornamenti, eliminazioni.

URL: http://jsonplaceholder.typicode.com/posts/

1) OTTIENI:

GET è il tipo più semplice di metodo di richiesta HTTP; quello utilizzato dai browser ogni volta che si fa clic su un collegamento o si digita un URL nella barra degli indirizzi. Indica al server di trasmettere al client i dati identificati dall'URL. I dati non devono mai essere modificati sul lato server a seguito di una richiesta GET. In questo senso, una richiesta GET è di sola lettura.

Verifica con Fiddler o PostMan: possiamo usare Fiddler per verificare la risposta. Apri Fiddler e seleziona la scheda Scrivi. Specifica il verbo e l'URL come mostrato di seguito e fai clic su Esegui per verificare la risposta.

Verbo: GET

url: http://jsonplaceholder.typicode.com/posts/

Risposta: otterrai la risposta come:

"userId": 1, "id": 1, "title": "sunt aut ...", "body": "quia et suscipit ..."

Nel percorso "felice" (o senza errori), GET restituisce una rappresentazione in XML o JSON e un codice di risposta HTTP di 200 (OK). In un caso di errore, molto spesso restituisce un 404 (NON TROVATO) o 400 (BAD REQUEST).

2) POST:

Il verbo POST viene utilizzato principalmente per creare nuove risorse. In particolare, viene utilizzato per creare risorse subordinate. Cioè, subordinato ad un'altra risorsa (ad esempio genitore).

Al termine della creazione, restituire lo stato HTTP 201, restituendo un'intestazione di posizione con un collegamento alla risorsa appena creata con lo stato HTTP 201.

Verifica con Fiddler o PostMan: possiamo usare Fiddler per verificare la risposta. Apri Fiddler e seleziona la scheda Scrivi. Specifica il verbo e l'URL come mostrato di seguito e fai clic su Esegui per verificare la risposta.

Verbo: POST

url: http://jsonplaceholder.typicode.com/posts/

Ente richiesta:

data: {title: 'foo', body: 'bar', userId: 1000, Id: 1000}

Risposta: riceverai il codice di risposta come 201.

Se vogliamo controllare il record inserito con Id = 1000, modifica il verbo in Get e usa lo stesso URL e fai clic su Esegui.

Come detto in precedenza, l'URL di cui sopra consente solo letture (GET), non possiamo leggere i dati aggiornati in tempo reale.

3) PUT:

Il PUT viene spesso utilizzato per le funzionalità di aggiornamento , inserendo un URI di risorsa noto con il corpo della richiesta contenente la rappresentazione appena aggiornata della risorsa originale.

Verifica con Fiddler o PostMan: possiamo usare Fiddler per verificare la risposta. Apri Fiddler e seleziona la scheda Scrivi. Specifica il verbo e l'URL come mostrato di seguito e fai clic su Esegui per verificare la risposta.

Verbo: PUT

url: http://jsonplaceholder.typicode.com/posts/1

Ente richiesta:

data: {title: 'foo', body: 'bar', userId: 1, Id: 1}

Risposta: Se l' aggiornamento ha esito positivo, restituisce 200 (o 204 se non restituisce alcun contenuto nel corpo) da un PUT.

4) ELIMINA:

ELIMINA è abbastanza facile da capire. Viene utilizzato per eliminare una risorsa identificata da un URI.

In caso di cancellazione riuscita, restituire lo stato HTTP 200 (OK) insieme a un corpo di risposta, forse la rappresentazione dell'elemento eliminato (spesso richiede troppa larghezza di banda) o una risposta a capo (vedere Valori di ritorno di seguito). O quello o restituisce lo stato HTTP 204 (NESSUN CONTENUTO) senza corpo di risposta. In altre parole, uno stato 204 senza corpo o la risposta in stile JSEND e lo stato HTTP 200 sono le risposte consigliate.

Verifica con Fiddler o PostMan: possiamo usare Fiddler per verificare la risposta. Apri Fiddler e seleziona la scheda Scrivi. Specifica il verbo e l'URL come mostrato di seguito e fai clic su Esegui per verificare la risposta.

Verbo: ELIMINA

url: http://jsonplaceholder.typicode.com/posts/1

Risposta: in caso di cancellazione riuscita restituisce lo stato HTTP 200 (OK) insieme a un corpo di risposta.

Esempio tra PUT e PATCH

METTERE

Se dovessi cambiare il mio nome, invia la richiesta PUT per l'aggiornamento:

{"first": "Nazmul", "last": "hasan"} Quindi, qui per aggiornare il nome dobbiamo inviare nuovamente tutti i parametri dei dati.

PATCH:

La richiesta di patch afferma che invieremo solo i dati che è necessario modificare senza modificare o rendere effettive altre parti dei dati. Es .: se dobbiamo aggiornare solo il nome, passiamo solo il nome.

Per ulteriori informazioni, consultare i collegamenti seguenti:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

Qual è la differenza principale tra la richiesta PATCH e PUT?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT non è aggiornato. PUT è creare o sostituire l'entità nell'URI specificato. Secondo le specifiche HTTP, PUT è idempotente. Sì, può essere utilizzato per l'aggiornamento, ma pensare solo come aggiornamento non è corretto.
Maladon

2
sono d'accordo che PUT non è aggiornato, può essere mappato con sostituzione, perché quando si invia PUT, sostituisce la risorsa esistente. Ma se inviamo PATCH, sostituirà solo le voci specificate.
Atul Chavan

1
Poiché PUT può essere utilizzato anche per creare, non sono sicuro di come la tua risposta indica quale dovrei usare?
Rob P.

1
Questa risposta è molto meglio, ma non regge il confronto con la patch: stackoverflow.com/a/630475/2391795
Vadorequest


11

La definizione che segue è dall'esempio del mondo reale.

Panoramica degli esempi
Per ogni dato del cliente, stiamo memorizzando un identificatore per trovare tali dati del cliente e rispediremo tale identificativo a quel cliente per riferimento.

  1. INVIARE

    • Se il Cliente invia dati senza identificatore utilizzando il metodo POST, li memorizzeremo e assegneremo un nuovo identificatore.
    • Se il Cliente invia nuovamente gli stessi dati senza alcun identificatore utilizzando il metodo POST, li memorizzeremo e assegneremo un nuovo identificatore.
    • Nota : la duplicazione è consentita qui
  2. METTERE

    • Se il cliente invia i dati con un identificatore, controlleremo se tale identificatore esiste. Se l'identificatore esiste, aggiorneremo i dati altrimenti lo creeremo e assegneremo un nuovo identificatore.
  3. PATCH

    • Se il cliente invia i dati con un identificatore, controlleremo se tale identificatore esiste. Se l'identificatore esiste, aggiorneremo i dati altrimenti genereremo un'eccezione.

Nota: nel metodo Put , non generiamo un'eccezione se non viene trovato un identificatore. Ma nel metodo Patch , stiamo generando un'eccezione se l'identificatore non viene trovato.

Fammi sapere se hai domande su quanto sopra.


8

Tipi di richiesta

  • create - POST
  • leggi - OTTIENI
  • crea o aggiorna - PUT
  • elimina - ELIMINA
  • aggiornamento - PATCH

GET / PUT è idempotente PATCH può essere talvolta idempotente

Cosa è idempotente - Significa che se la query viene lanciata più volte non dovrebbe influire sul risultato di essa (stesso risultato. Supponiamo che una mucca sia incinta e se la riproduciamo di nuovo non può essere in gravidanza più volte)

get : -

get semplice. Ottieni i dati dal server e mostrali all'utente

{
id:1
name:parth
email:x@x.com
}

post : -

creare una nuova risorsa nel database. Significa che aggiunge nuovi dati. Non è idempotente.

put : -

Crea nuova risorsa altrimenti aggiungi a esistente. Idempotente perché aggiornerà sempre la stessa risorsa e l'output sarà lo stesso. ex. - dati iniziali

{
id:1
name:parth
email:x@x.com
}
  • esegui put-localhost / 1 put email: ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

così ora è arrivata la richiesta di patch PATCH può essere talvolta idempotente

id:1
name:parth
email:x@x.com
}

nome patch: w

{
id:1
name:w
email:x@x.com
}
Metodo HTTP
OTTIENI sì
POST no
Metti sì
PATCH no *
OPZIONI sì
TESTA sì
ELIMINA si

Risorse: idempotente - Che cos'è l'idempotenza?


Cosa significa veramente "a volte" idempotente? Cosa determina l'idempotenza?
Polv,

7

ecco una semplice descrizione di tutto:

  • POST è sempre per la creazione di una risorsa (non importa se è stata duplicata)
  • PUT serve per verificare se esiste una risorsa, quindi aggiorna, altrimenti crea una nuova risorsa
  • PATCH è sempre per aggiornare una risorsa

5

Differenza principale tra richieste PUT e PATCH :

Supponiamo di avere una risorsa che contiene il nome e il cognome di una persona.

Se vogliamo cambiare il nome, inviamo una richiesta put per l'aggiornamento

{ "first": "Michael", "last": "Angelo" }

Qui, sebbene stiamo solo cambiando il nome, con la richiesta PUT dobbiamo inviare sia i parametri che il cognome.
In altre parole, è obbligatorio inviare nuovamente tutti i valori, l'intero payload.

Quando inviamo una richiesta PATCH, tuttavia, inviamo solo i dati che vogliamo aggiornare. In altre parole, inviamo solo il nome per l'aggiornamento, non è necessario inviare il cognome.


2

Abbastanza logica la differenza tra PUT e PATCH che inviano rispettivamente dati completi e parziali per la sostituzione / aggiornamento. Tuttavia, solo un paio di punti come di seguito

  1. A volte POST è considerato come per gli aggiornamenti rispetto a PUT per la creazione
  2. Mandati / controlli HTTP per l'invio di dati completi o parziali in PATCH? Altrimenti, PATCH potrebbe essere lo stesso dell'aggiornamento di PUT / POST

2

Pensare in questo modo...

POST: crea

PUT - sostituire

PATCH - aggiornamento

Essere letto

ELIMINA - elimina


2
Probabilmente aggiungerei questa distinzione : " PUT se il client determina l'indirizzo della risorsa risultante, POST se il server lo fa. "
ruffin

1

Spiegazione più semplice:

POST - Crea NUOVO record

PUT - Se il record esiste, aggiorna altro, crea un nuovo record

PATCH - aggiornamento

Essere letto

ELIMINA - elimina


In che modo è sostanzialmente diverso dalla risposta di Kwame pubblicata circa due settimane prima della tua?
ruffin
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.