2
respostas

Método PUT idempotente?

Ainda não ficou muito claro o que é essa questão de idempotência. Foi dito que o método POST não idempotente pois ele altera o estado do sistema. Em contrapartida, foi dito que o PUT é idempotente, justamente por não alterar o estado do sistema. O que seria altera o estado do sistema? Por que quando fazer um PUT, estamos ALTERANDO alguma informação (ou até mesmo criando) no banco de dados. Se alguém puder ser um pouco mais claro em relação a essa definição.

2 respostas

Pegando o exemplo da alteração de estado que você citou. O negócio é o resultado retornado para o cliente. Se você chamar esse mesmo put 10x, com os mesmos parâmetros, o resultado tende a ser sempre o mesmo :). Diferente da semântica do post. Se você chamar uma url via post 10x, provavelmente você vai criar 10 recursos diferentes.

Claro que você pode ter uma lógica de update que não retorna a mesma coisa sempre, aí você não deveria chamar via put.

Por exemplo, se eu utilizar o método PUT para alterar um estado no banco de dados, seja nome, senha, qualquer coisa... Bom, não consigo imaginar o que poderia ser esse resultado que você citou nessa situação. O que é retornado por exemplo de um PUT que altera alguma informação no servidor? Eu posso assumir que tudo aquilo que não é criação de recurso ou algo do tipo no servidor é idempotente?