web-dev-qa-db-fra.com

Statut HTTP 424 ou 500 pour erreur sur les dépendances externes

J'essaie de créer un service qui a 2 dépendances. L'une des dépendances est gérée en interne tandis que la seconde nécessite un appel sortant http externe vers une API tierce. La séquence nécessite la mise à jour de la ressource, puis l'exécution de l'appel sortant http.

Donc ma question est, en cas d'échec à la 2ème étape, quel est le bon code d'état http à retourner?

La réponse doit-elle être 424 ou 500 avec un corps de message expliquant l'erreur rencontrée?

  • 424: Échec de la méthode - Indique que la méthode n'a pas été exécutée sur une ressource particulière dans sa portée car une partie de l'exécution de la méthode a échoué, entraînant l'abandon de la méthode entière.
  • 500: Erreur de serveur interne.
44
geneqew

L'échec dont vous parlez est celui qui s'est produit dans les internes du service lui-même, donc une plage de codes d'état 5xx est le bon choix. Le service 503 non disponible semble parfait pour la situation que vous avez décrite.

Les codes 5xx permettent d'indiquer au client que même si la demande était correcte, le serveur a rencontré une sorte de problème pour répondre à la demande. D'un autre côté, les codes 4xx sont utilisés pour dire au client qu'il a fait quelque chose de mal (et que le serveur est très bien, merci). sections 10.4 et 10.5 de la spécification HTTP 1.1 expliquer les différents objectifs des codes 4xx et 5xx.

Le code d'état 424 est défini dans norme WebDAV et est destiné au cas où le client doit changer ce qu'il fait - le serveur ne rencontre aucun problème ici.

41
Andrew Herbert

Comme la deuxième opération est un appel de service externe, vous devez choisir 502 ou 504 selon les situations.

Cité de: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.

10.5.3 502 Bad Gateway

Le serveur, tout en agissant en tant que passerelle ou proxy, a reçu une réponse non valide du serveur en amont auquel il a accédé pour tenter de répondre à la demande.

10.5.4 503 Service non disponible

Le serveur n'est actuellement pas en mesure de gérer 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 atténuée après un certain retard. Si elle est connue, la longueur du retard 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.

10.5.5 Délai d'expiration de la passerelle 504

Le serveur, tout en agissant en tant que passerelle ou proxy, n'a pas reçu de réponse en temps opportun du serveur en amont spécifié par l'URI (par exemple HTTP, FTP, LDAP) ou d'un autre serveur auxiliaire (par exemple DNS) auquel il devait accéder pour tenter de terminer la demande.

  Note: Note to implementors: some deployed proxies are known to
  return 400 or 500 when DNS lookups time out.
25
mustafaturan

Le service 503 non disponible est approprié si le problème est un problème que le serveur s'attend à résoudre (par exemple, s'il obtient un 503 du serveur en amont, par exemple). 502 Bad Gateway doit être utilisé pour les erreurs inconnues d'un serveur en amont, où vous ne savez pas comment répondre.

8
coppro