PUT coloca um arquivo ou recurso em um URI específico e exatamente nesse URI. Se já houver um arquivo ou recurso nesse URI, o PUT substituirá esse arquivo ou recurso. Se não houver arquivo ou recurso, o PUT cria um. PUT é idempotente , mas paradoxalmente as respostas PUT não são armazenáveis em cache.
O POST envia dados para um URI específico e espera que o recurso nesse URI lide com a solicitação. O servidor da Web neste momento pode determinar o que fazer com os dados no contexto do recurso especificado. O método POST não é idempotente , no entanto, as respostas POST são armazenáveis em cache, desde que o servidor defina os cabeçalhos de controle de cache e expira apropriados.
O HTTP RFC oficial especifica POST para:
Anotação de recursos existentes;
Postar uma mensagem em um quadro de avisos, grupo de notícias, lista de discussão ou grupo de artigos semelhante;
Fornecer um bloco de dados, como o resultado do envio de um formulário, para um processo de manipulação de dados;
Estendendo um banco de dados através de uma operação de acréscimo.
A diferença fundamental entre as solicitações POST e PUT é refletida no significado diferente do Request-URI. O URI em uma solicitação POST identifica o recurso que manipulará a entidade fechada. Esse recurso pode ser um processo de aceitação de dados, um gateway para outro protocolo ou uma entidade separada que aceita anotações. Por outro lado, o URI em uma solicitação PUT identifica a entidade anexada à solicitação - o agente do usuário sabe qual URI se destina e o servidor NÃO DEVE tentar aplicar a solicitação a algum outro recurso. Se o servidor desejar que a solicitação seja aplicada a um URI diferente, DEVE enviar uma resposta 301 (Movida permanentemente); o agente do usuário PODE então tomar sua própria decisão sobre se deve ou não redirecionar a solicitação.
O método PUT solicita que o estado do recurso de destino seja
createdou replacedcom o estado definido pela representação incluída na carga útil da mensagem de solicitação.
Usando o método correto, não relacionado à parte:
Um benefício do REST ROA x SOAP é que, ao usar o HTTP REST ROA, ele incentiva o uso adequado dos verbos / métodos HTTP. Assim, por exemplo, você usaria apenas PUT quando desejar criar um recurso naquele local exato. E você nunca usaria GET para criar ou modificar um recurso.
Eu li nas especificações que If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI. Então, uma implementação do PUT que se recusa a criar um recurso, se não presente, seria correta, certo? Se sim, isso acontece na prática? Ou implementações geralmente também criam no PUT?
O que não entendo é como implementar a idempotência do PUT. em geral, a maioria das APIs usará a geração automática de um ID no caso de criar um novo recurso. e em PUT, você deve criar um recurso se ele não existir, mas usar o ID especificado no URI, mas como você pode fazer isso se o método de geração de ID estiver definido como automático ???
Roni Axelrad 16/09
1
Em resumo: o URI em uma solicitação POST identifica o recurso que manipulará a entidade fechada . O URI em uma solicitação PUT identifica a própria entidade .
Drazen Bjelovuk 9/04/19
As respostas ao método POST não são armazenáveis em cache, a menos que a resposta inclua campos de cabeçalho Cache-Control ou Expires
apropriados
211
Apenas semântica.
Um HTTP PUTdeve aceitar o corpo da solicitação e armazená-lo no recurso identificado pelo URI.
Um HTTP POSTé mais geral. É suposto iniciar uma ação no servidor. Essa ação pode ser armazenar o corpo da solicitação no recurso identificado pelo URI, ou um URI diferente ou uma ação diferente.
PUT é como um upload de arquivo. Uma colocação em um URI afeta exatamente esse URI. Um POST para um URI pode ter qualquer efeito.
O que implica uma determinada função não pode realmente
TaylorMac
131
Para dar exemplos de recursos no estilo REST:
"POST / books" com várias informações de livros pode criar um novo livro e responder com a nova URL que identifica esse livro: "/ books / 5".
"PUT / books / 5" teria que criar um novo livro com o ID 5 ou substituir o livro existente pelo ID 5.
No estilo sem recurso, o POST pode ser usado para praticamente qualquer coisa que tenha um efeito colateral. Uma outra diferença é que o PUT deve ser idempotente - vários PUTs dos mesmos dados para o mesmo URL devem ser bons, onde vários POSTs podem criar vários objetos ou qualquer que seja sua ação do POST.
Oi Bhollis, O que acontecerá se eu usar o POST / books / 5? jogará o recurso não encontrado?
ChanGan 15/02
13
Eu sinto a idempotency é a diferença mais marcante e importante entre PUT e POST
Martin Andersson
1
Olá ChanGan, aqui está uma explicação que a Wikipedia fornece sobre o seu caso "POST / books / 5": "Geralmente não é usado. Trate o membro endereçado como uma coleção por si só e crie uma nova entrada nela."
rdiachenko
essa resposta dá a impressão de que PUT e POST podem ser definidos no mesmo recurso; no entanto, a outra diferença próxima à idempotência é quem controla o espaço do ID. Em PUT, o usuário está controlando o espaço do ID criando recursos com um ID específico. No POST, o servidor está retornando o ID que o usuário deve referenciar nas chamadas subseqüentes, como GET. O exposto acima é estranho, porque é uma mistura de ambos.
Tommy
74
GET : Recupera dados do servidor. Não deve ter outro efeito.
POST : envia dados ao servidor para criar uma nova entidade. Geralmente usado ao fazer upload de um arquivo ou ao enviar um formulário da web.
PUT : semelhante ao POST, mas usado para substituir uma entidade existente.
PATCH : Semelhante ao PUT, mas usado para atualizar apenas determinados campos dentro de uma entidade existente.
DELETE : remove os dados do servidor.
TRACE : fornece uma maneira de testar o servidor que recebe. Ele simplesmente retorna o que foi enviado.
OPÇÕES : Permite que um cliente obtenha informações sobre os métodos de solicitação suportados por um serviço. O cabeçalho de resposta relevante é Permitir com métodos suportados. Também usado no CORS como solicitação de comprovação para informar o servidor sobre o método de solicitação real e perguntar sobre cabeçalhos personalizados.
CABEÇA : Retorna apenas os cabeçalhos de resposta.
CONNECT : Usado pelo navegador quando sabe que fala com um proxy e o URI final começa com https: //. A intenção do CONNECT é permitir a sessão TLS criptografada de ponta a ponta, para que os dados sejam ilegíveis para um proxy.
O que é um registro neste contexto? A pergunta é sobre solicitação HTTP.
Kishore 04/02
O que o POST faria se o documento / recurso já estivesse presente? Irá gerar um erro ou simplesmente sairá OK?
Aditya Pednekar
Com base na maior parte do que li, o PUT também pode criar.
aderchox 25/04
19
Outros já postaram respostas excelentes, eu só queria acrescentar que na maioria dos idiomas, estruturas e casos de uso você estará lidando com o POST com muito mais frequência do que o PUT. Até o ponto em que PUT, DELETE etc. são basicamente perguntas triviais.
Ultimamente, tenho ficado bastante irritado com um equívoco popular dos desenvolvedores da Web de que um POST é usado para criar um recurso e um PUT é usado para atualizar / alterar um.
Se você der uma olhada na página 55 da RFC 2616 (“Hypertext Transfer Protocol - HTTP / 1.1”), Seção 9.6 (“PUT”), você verá o que é realmente a PUT:
O método PUT solicita que a entidade fechada seja armazenada no URI de solicitação fornecido.
Há também um parágrafo útil para explicar a diferença entre POST e PUT:
A diferença fundamental entre as solicitações POST e PUT é refletida no significado diferente do Request-URI. O URI em uma solicitação POST identifica o recurso que manipulará a entidade fechada. Esse recurso pode ser um processo de aceitação de dados, um gateway para outro protocolo ou uma entidade separada que aceita anotações. Por outro lado, o URI em uma solicitação PUT identifica a entidade anexada à solicitação - o agente do usuário sabe qual URI se destina e o servidor NÃO DEVE tentar aplicar a solicitação a algum outro recurso.
Ele não menciona nada sobre a diferença entre atualizar / criar, porque não é disso que se trata. É sobre a diferença entre isso:
obj.set_attribute(value) # A POST request.
E isto:
obj.attribute = value # A PUT request.
Então, por favor, pare a propagação desse equívoco popular. Leia seus RFCs.
Isso parece absurdamente rude e pedante de uma maneira menos que útil. No exemplo de um PUT que você cita, a nova entidade é, em uma API RESTful, um registro 'novo' - e acessível nesse local. É questionável se é uma boa opção de design permitir que os sub-membros sejam mutáveis assim (acho que não é o ideal), mas mesmo assim, você está usando uma subespécie para atacar muitas informações úteis. Na maioria das vezes, a descrição como geralmente é afirmada é uma ótima declaração do conteúdo da RFC, resumida, e uma declaração da prática usual e costumeira. Além disso, não fará mal a você ser educado.
tooluser
3
Isso não pode ser votado o suficiente. PUT não tem lugar em uma API REST. Na maioria das vezes, o POST indica a semântica correta.
Beefster
Não disse bem, mas de fato uma interpretação precisa dos RFCs. Parece que o mundo dos desenvolvedores da web é um pântano de informações erradas.
William T Froggard 14/01
@ Beefster Não existe tal coisa como 'POST indica'. Najeebul fez um ótimo ponto aqui. Como você imagina o que isso indica? exceto que você o usa porque sempre o usou dessa maneira desde o primeiro dia em que o aprendeu, mas realmente não sabe por que deveria usá-lo em comparação com os outros?
Mosia Thabo
12
Um POST é considerado um método do tipo fábrica. Você inclui dados para criar o que deseja e o que quer que esteja do outro lado, sabe o que fazer com ele. Um PUT é usado para atualizar os dados existentes em um determinado URL ou para criar algo novo quando você sabe qual será o URI e ele ainda não existe (em oposição a um POST que criará algo e retornará um URL para se necessário).
O REST solicita que os desenvolvedores usem métodos HTTP explicitamente e de maneira consistente com a definição do protocolo. Esse princípio básico de design do REST estabelece um mapeamento individual entre operações de criação, leitura, atualização e exclusão (CRUD) e métodos HTTP. De acordo com este mapeamento:
• Para criar um recurso no servidor, use POST.
• Para recuperar um recurso, use GET.
• Para alterar o estado de um recurso ou atualizá-lo, use PUT.
Post @Beefster para criar, colocar para atualizar, não é mesmo?
Long Nguyen
Não. PUT é para realmente colocar conteúdo literal em uma URL e raramente tem seu lugar em uma API REST. O POST é mais abstrato e abrange qualquer tipo de adição de conteúdo que não tenha a semântica de "Coloque este arquivo exato neste URL exato".
Beefster
7
Deve ser bastante simples quando usar um ou outro, mas formulações complexas são uma fonte de confusão para muitos de nós.
Quando usá-los:
Use PUTquando desejar modificar um recurso singular que já faz parte da coleção de recursos. PUTsubstitui o recurso na sua totalidade. Exemplo:PUT /resources/:resourceId
Nota lateral: use PATCHse você deseja atualizar uma parte do recurso.
Use POSTquando desejar adicionar um recurso filho a uma coleção de recursos.
Exemplo:POST => /resources
Em geral:
Geralmente, na prática, sempre use PUTpara operações UPDATE .
Sempre use POSTpara operações CREATE .
Exemplo:
GET / company / reports => Obter todos os relatórios GET / company / reports / {id} => Obter as informações do relatório identificadas por "id" POST / company / reports => Criar um novo relatório PUT / company / reports / {id} => Atualizar o informações do relatório identificadas por "id" PATCH / empresa / relatórios / {id} => Atualize uma parte das informações do relatório identificadas por "id" DELETE / empresa / relatórios / {id} => Excluir relatório por "id"
A diferença entre POST e PUT é que PUT é idempotente, ou seja, chamar a mesma solicitação PUT várias vezes sempre produzirá o mesmo resultado (sem efeito colateral), enquanto, por outro lado, chamar uma solicitação POST repetidamente pode ter ( adicionais) efeitos colaterais da criação do mesmo recurso várias vezes.
GET : Solicitações usando GET apenas recuperam dados, ou seja, solicitam uma representação do recurso especificado
POST: Envia dados ao servidor para criar um recurso. O tipo do corpo da solicitação é indicado pelo cabeçalho Content-Type. Muitas vezes, causa uma alteração no estado ou efeitos colaterais no servidor
PUT : Cria um novo recurso ou substitui uma representação do recurso de destino pela carga útil da solicitação
PATCH : É usado para aplicar modificações parciais a um recurso
DELETE : Exclui o recurso especificado
TRACE : Executa um teste de loop de mensagem ao longo do caminho para o recurso de destino, fornecendo um mecanismo de depuração útil
OPTIONS : É usado para descrever as opções de comunicação do recurso de destino, o cliente pode especificar uma URL para o método OPTIONS ou um asterisco (*) para se referir a todo o servidor.
HEAD : Solicita uma resposta idêntica à de uma solicitação GET, mas sem o corpo da resposta
CONNECT : Estabelece um túnel para o servidor identificado pelo recurso de destino, pode ser usado para acessar sites que usam SSL (HTTPS)
POST é usado para criar um novo recurso e, em seguida, retorna o recurso URI
EX
REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}
Essa chamada pode criar um novo livro e devolvê-lo URI
Response ...THE-NEW-RESOURCE-URI/books/5
PUT é usado para substituir um recurso, se esse recurso existir, basta atualizá-lo, mas se esse recurso não existir, crie-o,
REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}
Com PUTnós sabemos o identificador de recurso, mas POSTretornará o novo identificador de recurso
Uso não REST-cheio
POST é usado para iniciar uma ação no lado do servidor, essa ação pode ou não criar um recurso, mas essa ação terá efeitos colaterais sempre que mudará algo no servidor
PUT é usado para colocar ou substituir conteúdo literal em um URL específico
Outra diferença nos estilos REST-ful e não REST-ful
POST é Operação Não Idempotente: Causará algumas alterações se executadas várias vezes com a mesma solicitação.
PUT é Operação Idempotente: Não terá efeitos colaterais se executado várias vezes com a mesma solicitação.
Vale ressaltar que POSTestá sujeito a alguns ataques comuns de falsificação de solicitação entre sites (CSRF) enquanto PUTnão estiver.
O CSRF abaixo nãoPUT é possível quando a vítima visita attackersite.com.
O efeito do ataque é que a vítima acidentalmente exclui um usuário só porque ele (a vítima) foi logado como adminem target.site.com, antes de visitar attackersite.com:
Solicitação normal (os cookies são enviados): ( PUTnão é um valor de atributo suportado)
Solicitação XHR (os cookies são enviados): ( PUTacionaria uma solicitação de comprovação, cuja resposta impediria o navegador de solicitar a deleteUserpágina)
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);
Na verdade, não há diferença além do título. Na verdade, há uma diferença básica entre GET e os outros. Com um método "GET" -Request, você envia os dados na linha de endereço de URL, que são separados primeiro por um ponto de interrogação e depois com um sinal de &.
Mas com um método de solicitação "POST", você não pode passar dados pela URL, mas precisa passar os dados como um objeto no chamado "corpo" da solicitação. No lado do servidor, você deve ler o corpo do conteúdo recebido para obter os dados enviados. Mas, por outro lado, não há possibilidade de enviar conteúdo no corpo, quando você envia uma solicitação "GET".
A alegação de que "GET" é apenas para obter dados e "POST" é para postar dados, está absolutamente errada. Ninguém pode impedir que você crie um novo conteúdo, exclua o conteúdo existente, edite o conteúdo existente ou faça o que for necessário no back-end, com base nos dados enviados pela solicitação "GET" ou pela solicitação "POST". E ninguém pode impedir que você codifique o back-end de uma maneira que, com uma solicitação "POST", o cliente solicite alguns dados.
Com uma solicitação, independentemente do método usado, você chama um URL e envia ou não envia alguns dados para especificar, quais informações você deseja passar ao servidor para lidar com sua solicitação e, em seguida, o cliente recebe uma resposta de o servidor. Os dados podem conter o que você deseja enviar, o back-end pode fazer o que quiser com os dados e a resposta pode conter qualquer informação que você queira colocar lá.
Existem apenas esses dois métodos básicos. GET e POST. Mas é a estrutura deles, que os torna diferentes e não o que você codifica no back-end. No back-end, você pode codificar o que quiser, com os dados recebidos. Porém, com a solicitação "POST", é necessário enviar / recuperar os dados no corpo e não na linha de endereço da URL, e com uma solicitação "GET", você deve enviar / recuperar dados na linha de endereço da URL e não em o corpo. Isso é tudo.
Todos os outros métodos, como "PUT", "DELETE" e assim por diante, têm a mesma estrutura que "POST".
O método POST é usado principalmente, se você deseja ocultar um pouco o conteúdo, porque, o que quer que você escreva na linha de endereço da URL, ele será salvo no cache e um método GET é o mesmo que escrever uma linha de endereço da URL com dados. Portanto, se você deseja enviar dados confidenciais, que nem sempre são necessariamente nome de usuário e senha, mas, por exemplo, alguns IDs ou hashes, que você não deseja que sejam mostrados na linha de endereço da URL, use o método POST .
Além disso, o comprimento da linha de endereço da URL é limitado a 1024 símbolos, enquanto o método "POST" não é restrito. Portanto, se você tiver uma quantidade maior de dados, poderá não conseguir enviá-los com uma solicitação GET, mas precisará usar a solicitação POST. Portanto, este também é outro ponto positivo da solicitação POST.
Mas lidar com a solicitação GET é muito mais fácil, quando você não tem texto complicado para enviar. Caso contrário, e este é outro ponto positivo do método POST, é que, com o método GET, você precisa codificar o texto por URL, para poder enviar alguns símbolos dentro do texto ou até mesmo espaços. Mas com um método POST, você não tem restrições e seu conteúdo não precisa ser alterado ou manipulado de forma alguma.
PUT - Se fizermos a mesma solicitação duas vezes usando PUT usando os mesmos parâmetros nas duas vezes, a segunda solicitação não terá efeito. É por isso que o PUT geralmente é usado para o cenário Update, chamando Update mais de uma vez com os mesmos parâmetros não faz nada além da chamada inicial, portanto, o PUT é idempotente.
O POST não é idempotente; por exemplo, o Create criará duas entradas separadas no destino, portanto, ele não é idempotente; portanto, CREATE é amplamente utilizado no POST.
Fazer a mesma chamada usando POST com os mesmos parâmetros todas as vezes fará com que duas coisas diferentes aconteçam, daí o motivo pelo qual o POST é comumente usado no cenário Criar
Respostas:
HTTP PUT:
PUT coloca um arquivo ou recurso em um URI específico e exatamente nesse URI. Se já houver um arquivo ou recurso nesse URI, o PUT substituirá esse arquivo ou recurso. Se não houver arquivo ou recurso, o PUT cria um. PUT é idempotente , mas paradoxalmente as respostas PUT não são armazenáveis em cache.
Local RFC HTTP 1.1 para PUT
POST HTTP:
O POST envia dados para um URI específico e espera que o recurso nesse URI lide com a solicitação. O servidor da Web neste momento pode determinar o que fazer com os dados no contexto do recurso especificado. O método POST não é idempotente , no entanto, as respostas POST são armazenáveis em cache, desde que o servidor defina os cabeçalhos de controle de cache e expira apropriados.
O HTTP RFC oficial especifica POST para:
Localização HTTP 1.1 RFC para POST
Diferença entre POST e PUT:
A própria RFC explica a principal diferença:
Além disso, e de forma um pouco mais concisa, a Seção 4.3.4 da RFC 7231 PUT afirma (grifo nosso),
Usando o método correto, não relacionado à parte:
Um benefício do REST ROA x SOAP é que, ao usar o HTTP REST ROA, ele incentiva o uso adequado dos verbos / métodos HTTP. Assim, por exemplo, você usaria apenas PUT quando desejar criar um recurso naquele local exato. E você nunca usaria GET para criar ou modificar um recurso.
fonte
If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI
. Então, uma implementação do PUT que se recusa a criar um recurso, se não presente, seria correta, certo? Se sim, isso acontece na prática? Ou implementações geralmente também criam no PUT?Apenas semântica.
Um HTTP
PUT
deve aceitar o corpo da solicitação e armazená-lo no recurso identificado pelo URI.Um HTTP
POST
é mais geral. É suposto iniciar uma ação no servidor. Essa ação pode ser armazenar o corpo da solicitação no recurso identificado pelo URI, ou um URI diferente ou uma ação diferente.PUT é como um upload de arquivo. Uma colocação em um URI afeta exatamente esse URI. Um POST para um URI pode ter qualquer efeito.
fonte
Para dar exemplos de recursos no estilo REST:
"POST / books" com várias informações de livros pode criar um novo livro e responder com a nova URL que identifica esse livro: "/ books / 5".
"PUT / books / 5" teria que criar um novo livro com o ID 5 ou substituir o livro existente pelo ID 5.
No estilo sem recurso, o POST pode ser usado para praticamente qualquer coisa que tenha um efeito colateral. Uma outra diferença é que o PUT deve ser idempotente - vários PUTs dos mesmos dados para o mesmo URL devem ser bons, onde vários POSTs podem criar vários objetos ou qualquer que seja sua ação do POST.
fonte
fonte
PUT é um método para "carregar" coisas para um URI específico ou substituir o que já está nesse URI.
POST, por outro lado, é uma maneira de enviar dados RELACIONADOS a um determinado URI.
Consulte o HTTP RFC
fonte
Tanto quanto eu sei, PUT é usado principalmente para atualizar os registros.
POST - Para criar documento ou qualquer outro recurso
PUT - Para atualizar o documento criado ou qualquer outro recurso.
Mas para deixar claro que o PUT geralmente 'substitui' o registro existente, se ele estiver lá, e cria, se não estiver lá.
fonte
Outros já postaram respostas excelentes, eu só queria acrescentar que na maioria dos idiomas, estruturas e casos de uso você estará lidando com o POST com muito mais frequência do que o PUT. Até o ponto em que PUT, DELETE etc. são basicamente perguntas triviais.
fonte
Consulte: http://zacharyvoase.com/2009/07/03/http-post-put-diff/
Ultimamente, tenho ficado bastante irritado com um equívoco popular dos desenvolvedores da Web de que um POST é usado para criar um recurso e um PUT é usado para atualizar / alterar um.
Se você der uma olhada na página 55 da RFC 2616 (“Hypertext Transfer Protocol - HTTP / 1.1”), Seção 9.6 (“PUT”), você verá o que é realmente a PUT:
Há também um parágrafo útil para explicar a diferença entre POST e PUT:
Ele não menciona nada sobre a diferença entre atualizar / criar, porque não é disso que se trata. É sobre a diferença entre isso:
E isto:
Então, por favor, pare a propagação desse equívoco popular. Leia seus RFCs.
fonte
Um POST é considerado um método do tipo fábrica. Você inclui dados para criar o que deseja e o que quer que esteja do outro lado, sabe o que fazer com ele. Um PUT é usado para atualizar os dados existentes em um determinado URL ou para criar algo novo quando você sabe qual será o URI e ele ainda não existe (em oposição a um POST que criará algo e retornará um URL para se necessário).
fonte
O REST solicita que os desenvolvedores usem métodos HTTP explicitamente e de maneira consistente com a definição do protocolo. Esse princípio básico de design do REST estabelece um mapeamento individual entre operações de criação, leitura, atualização e exclusão (CRUD) e métodos HTTP. De acordo com este mapeamento:
• Para criar um recurso no servidor, use POST.
• Para recuperar um recurso, use GET.
• Para alterar o estado de um recurso ou atualizá-lo, use PUT.
• Para remover ou excluir um recurso, use DELETE.
Mais informações: Serviços da Web RESTful: Noções básicas da IBM
fonte
Deve ser bastante simples quando usar um ou outro, mas formulações complexas são uma fonte de confusão para muitos de nós.
Quando usá-los:
Use
PUT
quando desejar modificar um recurso singular que já faz parte da coleção de recursos.PUT
substitui o recurso na sua totalidade. Exemplo:PUT /resources/:resourceId
Nota lateral: use
PATCH
se você deseja atualizar uma parte do recurso.POST
quando desejar adicionar um recurso filho a uma coleção de recursos.Exemplo:
POST => /resources
Em geral:
PUT
para operações UPDATE .POST
para operações CREATE .Exemplo:
GET
/ company / reports => Obter todos os relatóriosGET
/ company / reports / {id} => Obter as informações do relatório identificadas por "id"POST
/ company / reports => Criar um novo relatórioPUT
/ company / reports / {id} => Atualizar o informações do relatório identificadas por "id"PATCH
/ empresa / relatórios / {id} => Atualize uma parte das informações do relatório identificadas por "id"DELETE
/ empresa / relatórios / {id} => Excluir relatório por "id"fonte
A diferença entre POST e PUT é que PUT é idempotente, ou seja, chamar a mesma solicitação PUT várias vezes sempre produzirá o mesmo resultado (sem efeito colateral), enquanto, por outro lado, chamar uma solicitação POST repetidamente pode ter ( adicionais) efeitos colaterais da criação do mesmo recurso várias vezes.
GET
: Solicitações usando GET apenas recuperam dados, ou seja, solicitam uma representação do recurso especificadoPOST
: Envia dados ao servidor para criar um recurso. O tipo do corpo da solicitação é indicado pelo cabeçalho Content-Type. Muitas vezes, causa uma alteração no estado ou efeitos colaterais no servidorPUT
: Cria um novo recurso ou substitui uma representação do recurso de destino pela carga útil da solicitaçãoPATCH
: É usado para aplicar modificações parciais a um recursoDELETE
: Exclui o recurso especificadoTRACE
: Executa um teste de loop de mensagem ao longo do caminho para o recurso de destino, fornecendo um mecanismo de depuração útilOPTIONS
: É usado para descrever as opções de comunicação do recurso de destino, o cliente pode especificar uma URL para o método OPTIONS ou um asterisco (*) para se referir a todo o servidor.HEAD
: Solicita uma resposta idêntica à de uma solicitação GET, mas sem o corpo da respostaCONNECT
: Estabelece um túnel para o servidor identificado pelo recurso de destino, pode ser usado para acessar sites que usam SSL (HTTPS)fonte
Uso REST-ful
POST
é usado para criar um novo recurso e, em seguida, retorna o recursoURI
Essa chamada pode criar um novo livro e devolvê-lo
URI
PUT
é usado para substituir um recurso, se esse recurso existir, basta atualizá-lo, mas se esse recurso não existir, crie-o,Com
PUT
nós sabemos o identificador de recurso, masPOST
retornará o novo identificador de recursoUso não REST-cheio
POST
é usado para iniciar uma ação no lado do servidor, essa ação pode ou não criar um recurso, mas essa ação terá efeitos colaterais sempre que mudará algo no servidorPUT
é usado para colocar ou substituir conteúdo literal em um URL específicoOutra diferença nos estilos REST-ful e não REST-ful
POST
é Operação Não Idempotente: Causará algumas alterações se executadas várias vezes com a mesma solicitação.PUT
é Operação Idempotente: Não terá efeitos colaterais se executado várias vezes com a mesma solicitação.fonte
Vale ressaltar que
POST
está sujeito a alguns ataques comuns de falsificação de solicitação entre sites (CSRF) enquantoPUT
não estiver.O CSRF abaixo não
PUT
é possível quando a vítima visitaattackersite.com
.O efeito do ataque é que a vítima acidentalmente exclui um usuário só porque ele (a vítima) foi logado como
admin
emtarget.site.com
, antes de visitarattackersite.com
:Solicitação normal (os cookies são enviados): (
PUT
não é um valor de atributo suportado)Código em
attackersite.com
:Solicitação XHR (os cookies são enviados): (
PUT
acionaria uma solicitação de comprovação, cuja resposta impediria o navegador de solicitar adeleteUser
página)fonte
Em palavras simples, você pode dizer:
1.HTTP Get: É usado para obter um ou mais itens
2.HTTP Post: É usado para criar um item
Put HTT: É usado para atualizar um item
Patch 4.HTTP: É usado para atualizar parcialmente um item
5.HTTP Delete: É usado para excluir um item
fonte
Na verdade, não há diferença além do título. Na verdade, há uma diferença básica entre GET e os outros. Com um método "GET" -Request, você envia os dados na linha de endereço de URL, que são separados primeiro por um ponto de interrogação e depois com um sinal de &.
Mas com um método de solicitação "POST", você não pode passar dados pela URL, mas precisa passar os dados como um objeto no chamado "corpo" da solicitação. No lado do servidor, você deve ler o corpo do conteúdo recebido para obter os dados enviados. Mas, por outro lado, não há possibilidade de enviar conteúdo no corpo, quando você envia uma solicitação "GET".
A alegação de que "GET" é apenas para obter dados e "POST" é para postar dados, está absolutamente errada. Ninguém pode impedir que você crie um novo conteúdo, exclua o conteúdo existente, edite o conteúdo existente ou faça o que for necessário no back-end, com base nos dados enviados pela solicitação "GET" ou pela solicitação "POST". E ninguém pode impedir que você codifique o back-end de uma maneira que, com uma solicitação "POST", o cliente solicite alguns dados.
Com uma solicitação, independentemente do método usado, você chama um URL e envia ou não envia alguns dados para especificar, quais informações você deseja passar ao servidor para lidar com sua solicitação e, em seguida, o cliente recebe uma resposta de o servidor. Os dados podem conter o que você deseja enviar, o back-end pode fazer o que quiser com os dados e a resposta pode conter qualquer informação que você queira colocar lá.
Existem apenas esses dois métodos básicos. GET e POST. Mas é a estrutura deles, que os torna diferentes e não o que você codifica no back-end. No back-end, você pode codificar o que quiser, com os dados recebidos. Porém, com a solicitação "POST", é necessário enviar / recuperar os dados no corpo e não na linha de endereço da URL, e com uma solicitação "GET", você deve enviar / recuperar dados na linha de endereço da URL e não em o corpo. Isso é tudo.
Todos os outros métodos, como "PUT", "DELETE" e assim por diante, têm a mesma estrutura que "POST".
O método POST é usado principalmente, se você deseja ocultar um pouco o conteúdo, porque, o que quer que você escreva na linha de endereço da URL, ele será salvo no cache e um método GET é o mesmo que escrever uma linha de endereço da URL com dados. Portanto, se você deseja enviar dados confidenciais, que nem sempre são necessariamente nome de usuário e senha, mas, por exemplo, alguns IDs ou hashes, que você não deseja que sejam mostrados na linha de endereço da URL, use o método POST .
Além disso, o comprimento da linha de endereço da URL é limitado a 1024 símbolos, enquanto o método "POST" não é restrito. Portanto, se você tiver uma quantidade maior de dados, poderá não conseguir enviá-los com uma solicitação GET, mas precisará usar a solicitação POST. Portanto, este também é outro ponto positivo da solicitação POST.
Mas lidar com a solicitação GET é muito mais fácil, quando você não tem texto complicado para enviar. Caso contrário, e este é outro ponto positivo do método POST, é que, com o método GET, você precisa codificar o texto por URL, para poder enviar alguns símbolos dentro do texto ou até mesmo espaços. Mas com um método POST, você não tem restrições e seu conteúdo não precisa ser alterado ou manipulado de forma alguma.
fonte
PUT e POST são métodos de repouso.
PUT - Se fizermos a mesma solicitação duas vezes usando PUT usando os mesmos parâmetros nas duas vezes, a segunda solicitação não terá efeito. É por isso que o PUT geralmente é usado para o cenário Update, chamando Update mais de uma vez com os mesmos parâmetros não faz nada além da chamada inicial, portanto, o PUT é idempotente.
O POST não é idempotente; por exemplo, o Create criará duas entradas separadas no destino, portanto, ele não é idempotente; portanto, CREATE é amplamente utilizado no POST.
Fazer a mesma chamada usando POST com os mesmos parâmetros todas as vezes fará com que duas coisas diferentes aconteçam, daí o motivo pelo qual o POST é comumente usado no cenário Criar
fonte