Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Utilizei POST ao invés de PUT

Antes de ver a solução, criei a adoção utilizando POST

router.post("/:pet_id/adota/:adotante_id",(req,res)=>petController.adotaPet(req,res));

O resultado foi o mesmo, a adoção acontece e persiste no banco de dados corretamente. Minha dúvida é se utilizar o POST nesse contexto é errado, tanto faz ou o correto (ou mais indicado) seria o PUT mesmo?

2 respostas
solução!

Olá, Leonardo. Tudo bem?

Vou falar um pouco sobre a diferença entre os métodos POST e PUT e qual seria mais apropriado para o seu caso.

POST vs PUT

POST:

  • É utilizado para criar um novo recurso.
  • Cada requisição POST para o mesmo endpoint pode resultar na criação de um novo recurso.
  • Não é idempotente, ou seja, múltiplas requisições POST podem resultar em diferentes resultados.

PUT:

  • É utilizado para atualizar um recurso existente ou criar um recurso se ele não existir.
  • É idempotente, ou seja, múltiplas requisições PUT para o mesmo endpoint e com os mesmos dados resultam no mesmo estado do recurso.

No contexto da adoção de um pet:

  • POST: Você está criando uma nova relação de adoção cada vez que a requisição é feita. Isso faz sentido se você considerar cada adoção como uma nova entidade ou evento.
  • PUT: Você estaria atualizando o estado de um recurso específico (neste caso, a relação entre o pet e o adotante). Isso faria mais sentido se você estivesse modificando uma relação existente.

Qual usar?

No seu caso, ambos podem funcionar, mas a escolha depende de como você enxerga a operação de adoção:

  • Se você vê a adoção como a criação de uma nova entidade (um evento de adoção), o POST faz sentido.
  • Se você vê a adoção como uma atualização do estado de um pet (associando um adotante a um pet), o PUT seria mais apropriado.

Os dois métodos podem funcionar corretamente, mas escolher o método que melhor representa a semântica da operação em sua API é uma boa prática de design.

Um abraço e bons estudos.

Oi, Lorena. Obrigado pelos esclarecimentos! :)