Qual é a diferença entre PUT, POST e PATCH? [fechadas]

281

Qual é a diferença entre os métodos PUT, POST e PATCH no protocolo HTTP?

selva kumar
fonte
2
stackoverflow.com/a/2590281/400277
Em nenhum lugar homem
4
possível duplicata de PUT vs POST em REST
Nowhere man
12
Usar algo diferente de GET / POST é insano nas APIs da web modernas. Muitos fazem isso. URIs identificados nos aplicativos mais modernos NÃO SÃO recursos para serem substituídos, atualizados etc. Eles não são documentos. Eles são chamados de PROCEDIMENTOS. O próprio URI raramente identifica um recurso real, além do método que está sendo chamado. Portanto, use GET para solicitações de string de consulta e POSTs quando precisar postar dados ou arquivos JSON no corpo da solicitação. Na IMO, qualquer outra coisa está tentando incluir conceitos obsoletos que envolvem URIs e operações em documentos HTML estáticos em uma nova arquitetura que não se parece com nada.
Triynko 26/10
1
Todas ótimas respostas. Eu só queria compartilhar minha resposta sobre as diferenças e quando você deve usar cada uma.
Treine
@Triynko E os procedimentos aos quais você se refere envolvem criação , exclusão e modificação de recursos. Não há maneira melhor de transmitir essas idéias do que ser RESTful. Por que não?
Константин Ван

Respostas:

200

Diferença entre os verbos PUT, POST, GET, DELETE e PATCH IN HTTP:

Os verbos HTTP mais usados ​​POST, GET, PUT, DELETE são semelhantes às operações CRUD (Criar, Ler, Atualizar e Excluir) no banco de dados. Nós especificar esses verbos HTTP no capital de caso. Então, a seguir está a comparação entre eles.

  1. criar - POST
  2. ler - GET
  3. atualização - PUT
  4. delete - DELETE

PATCH: Envia uma modificação parcial para um recurso. Se você precisar atualizar apenas um campo para o recurso, convém usar o método PATCH.

Nota:
Como POST, PUT, DELETE modifica o conteúdo, os testes com o Fiddler para o URL abaixo apenas imitam as atualizações. Na verdade, ele não exclui ou modifica. Podemos apenas ver os códigos de status para verificar se inserções, atualizações, exclusões ocorrem.

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

1) GET:

GET é o tipo mais simples de método de solicitação HTTP; aquele que os navegadores usam sempre que você clica em um link ou digita um URL na barra de endereços. Instrui o servidor a transmitir os dados identificados pela URL para o cliente. Os dados nunca devem ser modificados no lado do servidor como resultado de uma solicitação GET. Nesse sentido, uma solicitação GET é somente leitura.

Verificando com o Fiddler ou o PostMan: podemos usar o Fiddler para verificar a resposta. Abra o Fiddler e selecione a guia Compor. Especifique o verbo e o URL, como mostrado abaixo, e clique em Executar para verificar a resposta.

Verbo: GET

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

Resposta: Você receberá a resposta como:

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

No caminho "feliz" (ou sem erro), GET retorna uma representação em XML ou JSON e um código de resposta HTTP 200 (OK). Em um caso de erro, geralmente retorna 404 (NÃO ENCONTRADO) ou 400 (PEDIDO MAU).

2) POST:

O verbo POST é utilizado principalmente para criar novos recursos. Em particular, é usado para criar recursos subordinados. Ou seja, subordinado a algum outro recurso (por exemplo, pai).

Na criação bem-sucedida, retorne o status HTTP 201, retornando um cabeçalho de Localização com um link para o recurso recém-criado com o status HTTP 201.

Verificando com o Fiddler ou o PostMan: podemos usar o Fiddler para verificar a resposta. Abra o Fiddler e selecione a guia Compor. Especifique o verbo e o URL, como mostrado abaixo, e clique em Executar para verificar a resposta.

Verbo: POST

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

Organismo de solicitação:

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

Resposta: você receberia o código de resposta como 201.

Se quisermos verificar o registro inserido com Id = 1000, altere o verbo para Get e use o mesmo URL e clique em Execute.

Como dito anteriormente, o URL acima permite apenas leituras (GET), não podemos ler os dados atualizados em real.

3) COLOCAR:

O PUT é utilizado com mais frequência para recursos de atualização , colocando-o em um URI de recurso conhecido com o corpo da solicitação que contém a representação recém-atualizada do recurso original.

Verificando com o Fiddler ou o PostMan: podemos usar o Fiddler para verificar a resposta. Abra o Fiddler e selecione a guia Compor. Especifique o verbo e o URL, como mostrado abaixo, e clique em Executar para verificar a resposta.

Verbo: PUT

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

Organismo de solicitação:

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

Resposta: Na atualização bem-sucedida, ele retorna 200 (ou 204, se não retornar nenhum conteúdo no corpo) de uma PUT.

4) EXCLUIR:

DELETE é muito fácil de entender. É usado para excluir um recurso identificado por um URI.

Na exclusão bem-sucedida, retorne o status HTTP 200 (OK) junto com um corpo de resposta, talvez a representação do item excluído (geralmente exige muita largura de banda) ou uma resposta agrupada (consulte Valores de retorno abaixo). Ou retorne o status HTTP 204 (SEM CONTEÚDO) sem corpo de resposta. Em outras palavras, um status 204 sem corpo ou a resposta no estilo JSEND e o status HTTP 200 são as respostas recomendadas.

Verificando com o Fiddler ou o PostMan: podemos usar o Fiddler para verificar a resposta. Abra o Fiddler e selecione a guia Compor. Especifique o verbo e o URL, como mostrado abaixo, e clique em Executar para verificar a resposta.

Verbo: DELETE

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

Resposta: Na exclusão bem-sucedida, ele retorna o status HTTP 200 (OK) junto com um corpo de resposta.

Exemplo entre PUT e PATCH

COLOCAR

Se eu tivesse que mudar meu primeiro nome, envie uma solicitação PUT para atualização:

{"first": "Nazmul", "last": "hasan"} Então, aqui, para atualizar o primeiro nome, precisamos enviar todos os parâmetros dos dados novamente.

FRAGMENTO:

A solicitação de patch diz que enviaríamos apenas os dados que precisamos modificar sem modificar ou afetar outras partes dos dados. Ex: se precisarmos atualizar apenas o primeiro nome, passamos apenas o primeiro nome.

Consulte os links abaixo para obter mais informações:

https://jsonplaceholder.typicode.com/

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

Qual é a principal diferença entre a solicitação PATCH e PUT?

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

Krishna
fonte
62
PUT não é atualizado. PUT é criar ou substituir a entidade no URI fornecido. De acordo com a especificação HTTP, PUT é idempotente. Sim, pode ser usado para atualizar, mas pensar apenas como atualização não está correto.
Maladon 11/01/19
2
Eu concordo que PUT não é atualizado, ele pode ser mapeado com substituição, porque quando você envia PUT, ele substitui o recurso existente. Mas se enviarmos PATCH, ele substituirá apenas as entradas especificadas.
Atul Chavan
1
Como o PUT também pode ser usado para criar, não tenho certeza de como sua resposta indica qual devo usar?
Rob P.
1
Esta resposta é muito melhor, mas não se compara com PATCH: stackoverflow.com/a/630475/2391795
Vadorequest
11

A definição abaixo é do exemplo do mundo real.

Visão geral do exemplo
Para todos os dados do cliente, estamos armazenando um identificador para encontrar esses dados e enviaremos esse identificador de volta para esse cliente para referência.

  1. POSTAR

    • Se o Cliente enviar dados sem nenhum identificador usando o método POST, nós os armazenaremos e atribuiremos um novo identificador.
    • Se o cliente enviar novamente o mesmo dados sem nenhum identificador usando o método POST, nós os armazenaremos e atribuiremos um novo identificador.
    • Nota : A duplicação é permitida aqui
  2. COLOCAR

    • Se o cliente enviar dados com um identificador, verificaremos se esse identificador existe. Se o identificador existir, atualizaremos os dados, caso contrário, criaremos e atribuiremos um novo identificador.
  3. FRAGMENTO

    • Se o cliente enviar dados com um identificador, verificaremos se esse identificador existe. Se o identificador existir, atualizaremos os dados, caso contrário, lançaremos uma exceção.

Nota: No método Put , não lançamos uma exceção se um identificador não for encontrado. Mas no método Patch , estamos lançando uma exceção se o identificador não for encontrado.

Deixe-me saber se você tiver alguma dúvida sobre o acima.

Yokesh Waran
fonte
8

Tipos de solicitação

  • criar - POST
  • ler - GET
  • criar ou atualizar - PUT
  • delete - DELETE
  • update - PATCH

GET / PUT é idempotente Às vezes, PATCH pode ser idempotente

O que é idempotente - significa que, se dispararmos a consulta várias vezes, ela não deve afetar o resultado dela. (Mesma saída. Suponha que uma vaca esteja grávida e se a reproduzirmos novamente, ela não poderá engravidar várias vezes)

get : -

obter simples. Obtenha os dados do servidor e mostre-os ao usuário

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

post : -

crie um novo recurso no banco de dados. Isso significa que ele adiciona novos dados. Não é idempotente.

put : -

Crie um novo recurso, caso contrário, adicione ao existente. Idempotente porque atualizará o mesmo recurso toda vez e a saída será a mesma. ex. - Dados iniciais

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

patch

agora veio o pedido de patch PATCH às vezes pode ser idempotente

id:1
name:parth
email:[email protected]
}

nome do patch: w

{
id:1
name:w
email:x@x.com
}
Método HTTP
OBTER sim
POST no
PUT sim
PATCH no *
OPÇÕES sim
CABEÇA sim
EXCLUIR sim

Recursos: Idempotent - O que é Idempotency?

Parth Patel
fonte
O que "às vezes" idempotente realmente significa? O que determina a idempotência?
Polv 11/03
7

Aqui está uma descrição simples de tudo:

  • O POST é sempre para criar um recurso (não importa se ele foi duplicado)
  • PUT é para verificar se o recurso existe e atualizar; caso contrário, crie um novo recurso
  • PATCH é sempre para atualizar um recurso
a_m_dev
fonte
5

Principal diferença entre PUT e PATCH solicitações :

Suponha que tenhamos um recurso que contém o nome e o sobrenome de uma pessoa.

Se quisermos mudar o primeiro nome, enviaremos uma solicitação de atualização

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

Aqui, embora estejamos apenas alterando o primeiro nome, com a solicitação PUT, temos que enviar os dois parâmetros, primeiro e último.
Em outras palavras, é obrigatório enviar todos os valores novamente, a carga útil completa.

Quando enviamos uma solicitação PATCH, no entanto, enviamos apenas os dados que queremos atualizar. Em outras palavras, enviamos apenas o primeiro nome para atualização, sem a necessidade de enviar o sobrenome.

iniciantes
fonte
2

É bastante lógica a diferença entre PUT e PATCH wrt enviando dados completos e parciais para substituição / atualização, respectivamente. No entanto, apenas alguns pontos, como abaixo

  1. Às vezes, o POST é considerado como para atualizações wrt PUT para create
  2. O HTTP exige / verifica o envio de dados completos x parciais no PATCH? Caso contrário, PATCH pode ser o mesmo que atualizar como em PUT / POST
manish agrawal
fonte
2

Pense desta maneira ...

POST - criar

PUT - substituir

PATCH - atualização

GET - ler

DELETE - excluir

Kwame Opare Asiedu
fonte
2
Eu provavelmente adicionaria esta distinção : " PUT se o cliente determinar o endereço do recurso resultante, POST se o servidor o fizer. "
ruffin
1

Explicação mais simples:

POST - Criar novo registro

PUT - Se o registro existir, atualize mais, crie um novo registro

PATCH - atualização

GET - ler

DELETE - excluir

Sahibzada Abdul Hadi
fonte
Como isso é substancialmente diferente da resposta de Kwame publicada cerca de duas semanas antes da sua?
ruffin 5/03