Estou criando uma API RESTful que processará várias interações do usuário, incluindo fazer pedidos usando cartões de crédito armazenados.
No caso de um pedido bem-sucedido, estou retornando um 200 OK e, no caso de o pedido de pedido ser malformado ou inválido, estou retornando um 400 Bad Request. Mas o que devo devolver se houver um problema durante o processamento real do pedido?
- Cliente POSTS pedido para servidor para um recurso de usuário. Se o usuário não existir, 404 Not Found é retornado.
- O formato e as informações do pedido são validados. Se não for válido, 400 Bad Request é retornado.
- O pedido é processado. Se o pedido for bem-sucedido, um 201 Created é retornado para o pedido. Se um erro inesperado for encontrado, um 500 Server Error será retornado.
A última etapa é o problema - o que devo retornar se o pedido não for concluído por qualquer outro motivo? Os possíveis cenários podem incluir:
- Produto esgotado
- Limite máximo de pedido do usuário atingido
- Falha na transação do cartão de crédito (fundos insuficientes, etc.)
Isso não parece apropriado para um 400 ou 500. Eu poderia ver como um 400 se não houvesse um código melhor - a solicitação era inválida de acordo com as regras de negócios. Simplesmente não parece preciso.
Edit: Também encontrou esta discussão existente do mesmo tópico. Todas as respostas lá parecem apontar para o uso de códigos de status para este tipo de violação, com alguma discussão entre o uso de 400, 409 ou o ramal 422.