Na programação de estilo RESTful, devemos usar métodos HTTP como nossos blocos de construção. Estou um pouco confuso sobre quais métodos correspondem aos métodos CRUD clássicos. GET / Read e DELETE / Delete são óbvios o suficiente.
No entanto, qual é a diferença entre PUT / POST? Eles combinam um a um com Criar e Atualizar?
http
rest
crud
http-method
Desenhou
fonte
fonte
A chave toda é se você está fazendo uma alteração idempotente ou não. Ou seja, se executar uma ação duas vezes na mensagem resultará na mesma coisa, como se tivesse sido feita apenas uma vez, você terá uma alteração idempotente e ela deverá ser mapeada para PUT. Caso contrário, ele mapeia para o POST. Se você nunca permitir que o cliente sintetize URLs, o PUT estará bem próximo do Update e o POST poderá lidar com o Create muito bem, mas essa certamente não é a única maneira de fazê-lo; se o cliente sabe que deseja criar
/foo/abc
e sabe qual conteúdo colocar lá, ele funciona muito bem como um PUT.A descrição canônica de um POST é quando você está comprando algo: essa é uma ação que ninguém quer repetir sem saber. Por outro lado, definir o endereço de envio para o pedido com antecedência pode ser feito com PUT: não importa se você é solicitado a enviar
6 Anywhere Dr, Nowhereville
uma vez, duas ou cem vezes: ainda é o mesmo endereço. Isso significa que é uma atualização? Pode ser ... Tudo depende de como você deseja escrever o back-end. (Observe que os resultados podem não ser idênticos: você pode informar o usuário quando ele fez uma PUT pela última vez como parte da representação do recurso, o que garantiria que PUTs repetidas não causassem um resultado idêntico, mas o resultado ainda seria seja "o mesmo" em um sentido funcional.)fonte
POST
ePUT
é interessante e deve responder a "O que é 'create' e qual é 'update'?" muito mais claro. Além disso, com relação à implementação da API, conclui-se que um repetitivoPUT
deve equivaler a uma operação silenciosa, enquanto um repetitivoPOST
pode gerar uma exceção se algum aspecto dos dados enviados permanecer único no armazenamento de dados que apóia o aplicativo.Eu estava procurando a mesma resposta, eis o que a IBM diz. IBM Link
fonte
No momento (2016), os verbos HTTP mais recentes são GET, POST, PATCH , PUT e DELETE
Visão geral
Espero que isto ajude!
Se você estiver interessado em projetar APIs REST, é uma leitura ansewome! site versão online repositório github
fonte
Há uma ótima conversa em vídeo do youtube por stormpath, na verdade explica isso, o URL deve pular para a parte correta do vídeo:
stormpath youtube video
Também vale a pena assistir, são mais de uma hora de conversa, mas muito interessantes se você pensa em investir tempo na construção de uma API REST.
fonte
Depende da situação concreta .. mas em geral:
PUT = atualizar ou alterar um recurso concreto com um URI concreto do recurso.
POST = crie um novo recurso na origem do URI fornecido.
Ou seja,
Edite uma postagem no blog:
PUT: / blog / entrada / 1
Crie um novo:
POST: / blog / entrada
PUT pode criar um novo recurso em algumas circunstâncias em que o URI do novo recurso é limpo antes da solicitação. O POST também pode ser usado para implementar vários outros casos de uso, que não são cobertos por outros (GET, PUT, DELETE, HEAD, OPTIONS)
O entendimento geral dos sistemas CRUD é GET = request, POST = create, Put = update, DELETE = delete
fonte
Os blocos de construção do REST são principalmente os recursos (e URI) e a hipermídia. Nesse contexto,
GET
é a maneira de obter uma representação do recurso (que pode realmente ser mapeado para umSELECT
em termos de CRUD).No entanto, você não deve necessariamente esperar um mapeamento individual entre operações CRUD e verbos HTTP. A principal diferença entre
PUT
ePOST
é sobre sua propriedade idempotente.POST
também é mais comumente usado para atualizações parciais, comoPUT
geralmente implica o envio de uma nova representação completa do recurso.Eu sugiro ler isso:
A especificação HTTP também é uma referência útil:
fonte
De um modo geral, este é o padrão que eu uso:
fonte
O projeto Symfony tenta manter seus métodos HTTP unidos aos métodos CRUD, e sua lista os associa da seguinte forma:
Vale a pena notar que, como eles dizem nessa página, "Na realidade, muitos navegadores modernos não suportam os métodos PUT e DELETE".
Pelo que me lembro, o Symfony "falsifica" PUT e DELETE para os navegadores que não os suportam ao gerar seus formulários, a fim de tentar estar o mais próximo possível de usar o método HTTP teoricamente correto, mesmo quando um navegador não suporta isto.
fonte