Code d'erreur de l'API REST 500 traitement
Nous construisons une nouvelle API REST.
Je discutais que le code d'erreur 500 (Erreur Interne du Serveur) ne doit jamais être retourné.
Maintenant, bien sûr, si vous savez que le client paramètres sont mauvais ou quelque chose que vous avez tout sous contrôle et peut retourner un code d'erreur (par exemple, 422).
Donc, si une erreur inattendue se produit, le serveur pourrait:
- PAS la capture des erreurs inattendues, de sorte que les 500 bulles pour le client
- Capture des erreurs inattendues et retourner un code d'erreur de signalisation d'un "imprévu" (honnêtement, je ne pouvais pas trouver un tel code d'erreur!)
Existe-il d'autres options?
source d'informationauteur faboolous
Vous devez vous connecter pour publier un commentaire.
C'est une erreur du serveur, pas une erreur du client. Si des erreurs de serveur n'ont pas à être retournés au client, il n'aurait pas été créé tout un code de statut de classe pour eux (c'est à dire 5xx).
Vous ne pouvez pas cacher le fait que vous avez fait une erreur de programmation ou un service, vous misez sur n'est pas disponible, et qui n'est certainement pas la faute du client. Le retour de toute autre gamme de code dans ces cas que le 5xx série n'aurait aucun sens.
RFC 7231 mentionne dans la section 6.6. Erreur de serveur 5xx:
C'est exactement le cas. Il n'y a rien "interne" sur le code "500 Internal Server Error" dans le sens où il ne devrait pas être exposée au client.
La vraie question est pourquoi est-il générer une erreur 500. Si elle est liée à tous les paramètres d'entrée, alors je dirais qu'il doit être géré à l'interne et retourné comme une série 400 erreur. Généralement, 400, 404 ou 406 serait approprié de prendre en compte la mauvaise entrée depuis la convention générale est que une bonne ressource est identifiée de manière unique par l'URL et l'URL qui ne peut pas générer une réponse valide est un bad request (400) ou similaire.
Si l'erreur est causée par autre chose que les entrées, explicitement ou implicitement, fourni par la demande, alors je dirais une erreur 500 est probablement approprié. Si un échec de connexion de base de données ou d'autres imprévisible erreur est fidèlement représentée par une série 500 erreur.
Vous l'avez suggéré, "la Capture des erreurs inattendues et retourner un code d'erreur de signalisation "imprévu", " mais impossible de trouver un code d'erreur approprié.
Devinez quoi: c'est ce Que 5xx est là pour.
Généralement parlant, 5xx codes de réponse indiquent la non-programmatique des échecs, comme une base de données d'échec de connexion, ou un autre système/bibliothèque de la dépendance de l'échec. Dans de nombreux cas, il est prévu que le client peut soumettre à nouveau la même demande dans le futur et s'attendre à être couronnée de succès.
Oui, certains web-cadres de répondre avec 5xx codes, mais ceux-ci sont généralement le résultat de défauts dans le code et le cadre est trop abstrait pour savoir ce qui s'est passé, de sorte qu'il passe par défaut à ce type de réponse; que cet exemple, cependant, ne signifie pas que nous devrions être dans l'habitude de retourner 5xx codes comme le résultat de programmatiques comportement qui n'est pas liée à des processus systèmes. Il y a beaucoup de, bien défini codes de réponse sont plus adaptés que le 5xx codes. Étant incapable de l'analyser/valider une donnée d'entrée n'est pas un 5xx réponse, car le code peut accueillir une réponse qui ne laisse pas le client en pensant qu'ils peuvent soumettre de nouveau la même demande, alors qu'en fait, ils ne peuvent pas.
Pour être clair, si l'erreur rencontrée par le serveur était due au CLIENT en entrée, puis c'est clairement une erreur du CLIENT et doit être manipulé avec une 4xx code de réponse. On s'attend à ce que le client va corriger l'erreur dans leur demande et la soumettre à nouveau.
Il est tout à fait acceptable, cependant, pour attraper toutes erreurs de processus et de les interpréter comme un 5xx réponse, mais sachez que vous devez également inclure des informations supplémentaires dans la réponse à indiquer exactement ce que n'a pas; et encore mieux si vous pouvez inclure SLA fois d'adresse.
Je ne pense pas que c'est une bonne pratique à interpréter, "une erreur inattendue" comme un 5xx erreur parce que les bugs se produisent.
C'est une alerte commun, moniteur de commencer à alerter sur 5xx types d'erreurs parce que ces indiquent généralement échoué systèmes, plutôt que de code échoué. Ainsi, le code en conséquence!
80 % du temps, ce serait à cause d'une mauvaise entrée dans soapRequest.xml fichier