Estou trabalhando com uma API REST que reside em um servidor que lida com dados de vários dispositivos IoT.
Minha tarefa é consultar o servidor usando a API para coletar informações de desempenho específicas sobre esses dispositivos.
Em uma instância, obtenho uma lista de dispositivos disponíveis e seus identificadores correspondentes e, posteriormente, consulte o servidor para obter mais detalhes usando esses identificadores (GUIDs).
O servidor está retornando um 500 Internal Server Error
para uma consulta em um desses IDs. No meu aplicativo, uma exceção é lançada e não vejo detalhes sobre o erro. Se eu examinar a resposta mais de perto com o Postman , posso ver que o servidor retornou JSON no corpo que contém:
errorMessage: "This ID does not exist"
.
Ignore o fato de que o servidor forneceu o ID para começar - esse é um problema separado para o desenvolvedor.
Uma API REST deve retornar a 500 Internal Server Error
para relatar que uma consulta faz referência a um objeto que não existe? Na minha opinião, os códigos de resposta HTTP devem se referir estritamente ao status da chamada REST, e não à mecânica interna da API. Eu esperaria um 200 OK
com a resposta contendo o erro e a descrição, que seriam proprietários da API em questão.
Ocorre-me que há uma diferença potencial de expectativa, dependendo de como a chamada REST está estruturada.
Considere estes exemplos:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
No primeiro caso, o ID do dispositivo é passado como uma variável GET. Um 404 ou 500 indica que o caminho ( /restapi/deviceinfo
) não foi encontrado ou resultou em um erro do servidor.
No segundo caso, o ID do dispositivo faz parte do URL. Eu entenderia melhor a 404 Not Found
, mas ainda assim poderia argumentar com base em quais partes do caminho são interpretadas como variáveis versus pontos finais.