RESTneneneba API-如何处理后期和功能性错误



我有一个REST服务,它是创建用户的POST,如果用户不存在,则创建该用户,并且该服务以json格式返回一个200。

案例1:如果用户已经存在,我会返回一个functional异常吗?因此返回一个包含错误的json(所有这些都由spring-boot的错误处理管理(,http状态代码呢有些人说发303或409。。。许多不同的答案,那么在这种情况下,响应机构又如何呢?

案例2:如果在后端我们有一个关于名称的规则(比如包含空格(,它返回一个错误(名称中不允许有空格(,同样的问题,我必须返回一个函数异常吗?在这种情况下,http状态代码是什么

不知何故,我想让API消费者知道要处理哪种json结构,我想http状态代码对此有帮助?

这一切都取决于如何解释各种http状态代码,以及您希望http负载响应对用户友好程度如何。以下是一些建议:

NEW USER CREATED:如果是新用户并在后端成功创建,则返回http状态代码201。这是一个技术状态代码。您还可以在响应主体中返回一个功能状态,其中提到"用户创建的">https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201

USER ALREADY EXISTS:如果用户已经存在,您应该使用http状态代码200进行响应,其中包含一个提到功能状态的响应有效负载主体;用户已经存在">

USER CREATION FAILED:如果后端服务不满足新的用户规则,并抛出错误,则可以使用http状态代码400,响应有效负载中的功能状态为";用户创建失败,请遵守用户名规则">https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400

为了让API消费者了解API的所有信息,您可能需要提供API规范文档。您可以使用开放式API规范(以前称为型锻(https://swagger.io/specification/

不知何故,我想让API消费者知道要处理哪种json结构,我想http状态代码对此有帮助?

不完全是。

HTTP状态代码是网络域上传输文档中的元数据。它传达响应的整体语义(例如,消息的主体是资源的表示,还是错误的表示?该响应是否可缓存?等等(。

特别是对于不安全的请求,缓存无效对"不安全"是敏感的;非错误状态码";。303(非错误状态代码(和409(错误状态代码。

Content-Type头为您提供了一种机制来描述您返回的消息的类型(模式((例如:application/problem+json(。


我认为:您的定制消费者的信息属于消息主体;我们将数据从消息主体提升到HTTP元数据,以便通用组件可以利用这些信息(例如,通过使缓存条目无效(。

因此,我们通常会从定义消息体的模式和语义开始,并确保我们有智能的方式来传达我们希望调用者知道的所有事情。换句话说,我们正在定义传递给客户的文档,以及如何从中提取信息。

HTTP组件需要知道的信息会从我们定制的文档中复制到标准化的表单中(状态代码、标题(。


事情变得复杂的地方:事实上;错误";在你的领域,这并不一定意味着它也应该被认为是一个";错误";通过网络域传输文档。

一个常见的情况是:我们使用API在流程中导航一些工作;这个过程有一条快乐的道路,也有一些我们通常试图避免的特殊道路(账户透支、物品缺货等(。

HTTP请求可以将工作从愉快路径移动到异常路径,并且仍然是"异常路径";成功;在文档传输域中。

我知道的最简单的启发式方法是通过相同的目标URI来考虑以前缓存的响应副本。如果这些响应仍然可以重复使用,那么您可能看到的是4xx状态代码。如果响应应该无效,那么您可能看到的是2xx或3xx状态代码。

最新更新