Eu tenho o seguinte ponto de extremidade:
a/{id}/b
e deseja criar uma solicitação de b
envio POST
para ele. Se a
com dado {id}
não for encontrado, devo responder com 404 NOT_FOUND
ou talvez com 409 CONFLICT
?
É simples a/{id}
, o truque é que aqui é usado um sub-recurso.
rest
api
api-design
http-request
Opala
fonte
fonte
Respostas:
404 NOT FOUND
parece a resposta apropriada, porque o recurso com esse ID não existe. É muito claro para entender e você espera a mesma resposta sea/{id}
for chamado.409 CONFLICT
não me parece a melhor escolha, porque no seu exemplo você retornará um 409 quando o recurso pai não foi encontrado :).Mas lembra que o mais importante é ser consistente na sua API
fonte
id
), é 404. Mas se a pasta foi passada no corpo, isso poderia ser outra coisa (412, 422 ... algo para representar "a validação falhou: a pasta não não existe"). É uma boa pergunta para perguntar e discutir.Além da resposta de @ Dherik.
URIs são identificadores , portanto, devemos ter em mente que (
/a/{id}/b
é um identificador). O URI não faz sentido para a WWW, assim como para o cliente HTTP.404 é a resposta certa . Em essência, o servidor está respondendo
Se o recurso ausente é pai ou filho , não importa.
Nós, desenvolvedores, vemos hierarquias e caminhos no URI, mas os clientes HTTP não. Em outras palavras, o HTTP deve ser interpretado apenas por clientes HTTP, mas não por humanos (desenvolvedores, usuários finais, etc.).
Em caso de dúvida, não pergunte que código faz sentido para você (humano). Pergunte, qual código faz sentido para o cliente HTTP. Como você deseja que o cliente HTTP se comporte?
Por quê? Porque algum código de status faz com que esses clientes executem determinadas operações. Por exemplo, 302 . Esse código geralmente faz com que os navegadores da web redirecionem para um local específico (URI) informado nos cabeçalhos de resposta.
Pode não ser o seu caso, mas é importante estar ciente. Por fim, os códigos de status HTTP são endereçados aos clientes HTTP. Não para nossas aplicações. Não para pessoas.
1: 409 raramente é implementado como erro de navegação. Geralmente envolve a execução de operações remotas (excluir, atualizar, novo, etc). Mas o URI deve existir. Caso contrário, 404 prevalecerá
fonte