Je travaille avec une API REST qui réside sur un serveur qui gère les données pour une multitude de périphériques IoT.
Ma tâche consiste à interroger le serveur à l'aide de l'API pour collecter des informations de performances spécifiques concernant ces périphériques.
Dans un cas, j'obtiens une liste des périphériques disponibles et leurs identifiants correspondants, puis interroge le serveur pour plus de détails à l'aide de ces identifiants (GUID).
Le serveur renvoie un 500 Internal Server Error
pour une requête sur l'un de ces ID. Dans mon application, une exception est levée et je ne vois pas les détails de l'erreur. Si j'examine la réponse de plus près avec Postman , je peux voir que le serveur a renvoyé JSON dans le corps qui contient:
errorMessage: "This ID does not exist"
.
Ne tenez pas compte du fait que le serveur a d'abord fourni l'ID - il s'agit d'un problème distinct pour le développeur.
Une API REST doit-elle renvoyer a 500 Internal Server Error
pour signaler qu'une requête fait référence à un objet qui n'existe pas? À mon avis, les codes de réponse HTTP doivent faire référence strictement au statut de l'appel REST, plutôt qu'aux mécanismes internes de l'API. Je m'attendrais à un 200 OK
avec la réponse contenant l'erreur et la description, qui serait la propriété de l'API en question.
Il me semble qu’il existe une différence potentielle dans les attentes en fonction de la structure de l’appel REST.
Considérez ces exemples:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
Dans le premier cas, l'ID de périphérique est transmis en tant que variable GET. Un 404 ou un 500 indiquerait que le chemin ( /restapi/deviceinfo
) est introuvable ou a entraîné une erreur de serveur.
Dans le second cas, l'ID de périphérique fait partie de l'URL. Je comprendrais mieux un 404 Not Found
, mais je pourrais quand même argumenter en fonction des parties du chemin qui sont interprétées comme des variables par rapport aux points d'extrémité.