web-dev-qa-db-fra.com

Code de statut HTTP pour "aucune donnée disponible" à partir d'une source de données externe

Scénario:

Une demande POST est envoyée pour traiter une commande qui entraînera la récupération de données à partir d'une source de données externe.

Il y a trois résultats possibles:

  1. La source de données a renvoyé des données pour la demande
  2. Aucune donnée n'était disponible pour la demande (ceci est considéré comme une erreur)
  3. Impossible d'accéder à la source de données (peut être en panne pour maintenance)

Une réponse évidente pour 1 est 200: OK ou 201: Created (une entité est créée à partir de cette requête).

Quels codes de statut conviendraient pour 2 et 3?

Codes d'état que j'ai pris en compte:

  • 503: Service Unavailable quand la source de données est en panne
  • 500: Internal Server Error quand la source de données est en panne
  • 502: Bad Gateway quand "aucune donnée disponible"
  • 404: Not Found quand "aucune donnée disponible"
  • 403: Forbidden quand "aucune donnée disponible"
  • 412: Precondition Failed quand "aucune donnée disponible"
24
Trey Hunner

2) En regardant en arrière, je conviens qu’il devrait probablement s'agir soit d'un 204 sans contenu, soit d'un 200 avec un corps indiquant qu'aucun enregistrement ni aucune ressource ne pourraient être trouvés en fonction de la structure renvoyée n'existe pas ou une ressource dans l'URI n'est pas trouvée dans le cas d'un service reposant.

3) Service 503 non disponible

Le serveur est actuellement incapable de traiter la demande en raison d'une surcharge ou d'une maintenance temporaire du serveur. L'implication est qu'il s'agit d'une condition temporaire qui sera soulagée après un certain délai. Si elle est connue, la longueur du délai PEUT être indiquée dans un en-tête Retry-After. Si aucune nouvelle tentative n'est donnée, le client DEVRAIT traiter la réponse comme il le ferait pour une réponse 500.

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.
16
Dan675

3) Je suis d'accord avec 503 pour cela

2) Franchement, je pense qu'un bon argument pourrait être avancé en faveur de l'utilisation de 204 dans le cas 2 Vous pouvez inclure métainfo dans l'en-tête pour indiquer spécifiquement ce qui a mal tourné. Cela dépend vraiment de combien vous considérez ce cas comme une "erreur" au niveau de l'API.

Si l'API elle-même fonctionne comme prévu et que la demande était adressée à un noeud final valide, par un utilisateur authentifié et autorisé et que le serveur ne fonctionnait pas correctement, très peu des erreurs des séries 400 ou 500 sembleraient réellement s'appliquer. 

par exemple, 404 signifie généralement que l'URI que vous avez appelé n'existe pas. S'il existe, utiliser ce code est trompeur, du moins à mon humble avis.

**10.2.5 204 No Content**

Le serveur a répondu à la demande mais n'a pas besoin de renvoyer un entité-corps, et peut vouloir renvoyer la métainformation mise à jour. Le response PEUT inclure des métainformations nouvelles ou mises à jour sous la forme de en-têtes d'entité, qui, le cas échéant, DEVRAIENT être associés au variante demandée.

Si le client est un agent d'utilisateur, il NE DEVRAIT PAS changer sa vue de document de celui qui a provoqué l'envoi de la demande. Cette réponse est principalement destiné à permettre la saisie d’actions sans que provoquant une modification de la vue de document active de l'agent d'utilisateur, bien que toute métainformation nouvelle ou mise à jour DEVRAIT être appliquée au document actuellement dans la vue active de l'agent d'utilisateur.

La réponse 204 NE DOIT PAS inclure de corps de message et est donc toujours terminé par la première ligne vide après les champs d’en-tête.

26

HTTP 404 - Avec votre propre message d'erreur du type "Aucune donnée trouvée".

Twitter utilise 404 . Référence: https://developer.Twitter.com/en/docs/basics/response-codes.html

0
Jay