当涉及到从REST API返回错误时,我正在寻找关于良好实践的指导。我正在开发一个新的API,这样我就可以把它带到任何方向。
在我的例子中,客户端调用我的API,而API在内部调用一些外部API。如果成功,没问题,但如果有来自远端(外部云API)的错误响应,我不确定这类服务的行业标准是什么。我目前正在考虑返回200OK,然后返回一个json有效负载,它详细说明了外部API错误。
那么,行业建议是什么呢?良好实践(请解释原因!)另外,从客户端pov的角度来看,REST API中的哪种错误处理使客户端代码的工作更轻松?
发布于 2019-11-25 12:33:35
您询问的故障是在服务本身的内部发生的故障,尽管它具有外部依赖项,因此5XX状态代码范围是正确的选择。503服务不可用看起来非常适合您所描述的情况。
5XX代码用于告诉客户端,尽管请求是正常的,但服务器在满足请求时遇到了某种问题。另一方面,
4XX代码用于告诉客户端它在请求中做了一些错误的事情(并且服务器是正常的,谢谢)。Sections 10.4 and 10.5 of the HTTP 1.1 spec解释4XX和5XX代码的不同用途。
发布于 2019-11-25 13:14:34
我们的同事已经提供了有关HTTP状态代码的链接/解释,因此您应该学习它们,并找到最适合您的情况。
假设您已经学习了状态代码,我将更多地关注影响您的决策的因素。
基本上,您应该了解客户端调用您的API时触发的流的业务含义是什么。客户端对您正在使用的外部云API一无所知,也不真正关心它是否工作,客户端使用您的应用程序。
如果是这样,当远程系统返回某种类型的错误时(是的,不同的错误状态应该为您提供有关远程系统问题的线索),这是您关于如何处理此错误的业务决策,并且根据此决策,您可能希望在与客户端的交互中以不同的方式“行为”。
下面是一些示例:
时,最好提供“一些”,即使它不是真正最新的也比什么都没有好。考虑一下通过某个客户端id提供“推荐电影”的远程系统。您正在构建一个门户(netflix风格)。如果这个推荐的电影服务由于某种原因而关闭,那么整个门户页面都会失效是没有意义的(想想糟糕的用户体验吧)。在这种情况下,您可能希望“预缓存”一些通用电影列表,并将其用作远程服务失败时的备用方法。在这种情况下,显然你在任何情况下都应该返回2XX状态。
归根结底,正如你所看到的,HTTP返回代码只是一个指示器,但它取决于你如何组织与客户端的互连过程,相关的HTTP状态将由你的决定决定。
发布于 2019-12-02 11:33:36
我会使用503 -服务不可用-作为错误。原因:
Retry-After客户端就知道在X次之后重试不会给你发送垃圾邮件。这意味着你的错误流量更少,对客户端的请求规划也更好。”https://stackoverflow.com/questions/58994293
复制相似问题