Rest 特定API场景的建议HTTP状态代码?

Rest 特定API场景的建议HTTP状态代码?,rest,httpresponse,api-design,Rest,Httpresponse,Api Design,我们目前有一个API,它遵循一个不太理想的流程,但是由于业务需要,目前无法弃用或更改。因此,我想更新HTTP状态代码,以便更准确地反映错误,但我无法确定对该场景有意义的代码 端点是一个GET并返回一个实体数组。每个实体的ID应该是GUID字符串,但是由于后端系统中的一些错误转换数据,某些请求中混入了整数ID。API当前验证这些ID,如果这些ID不是所有的GUID,则发送一个没有数据的500响应。我们曾经遇到过这样的问题,我们的开发人员被500强搞糊涂了,所以我想找到一个更明确的回应 422不可处

我们目前有一个API,它遵循一个不太理想的流程,但是由于业务需要,目前无法弃用或更改。因此,我想更新HTTP状态代码,以便更准确地反映错误,但我无法确定对该场景有意义的代码

端点是一个GET并返回一个实体数组。每个实体的ID应该是GUID字符串,但是由于后端系统中的一些错误转换数据,某些请求中混入了整数ID。API当前验证这些ID,如果这些ID不是所有的GUID,则发送一个没有数据的500响应。我们曾经遇到过这样的问题,我们的开发人员被500强搞糊涂了,所以我想找到一个更明确的回应

422不可处理的实体对我来说是有意义的,但基于它,看起来更适合于响应的格式化

如果我们只返回GUID ID,我可以看到发送了206个部分

想法?

我认为“简单的”400个错误请求应该足够了(细节应该在回复正文中表达)

来自维基百科:

400错误请求
由于明显的客户端错误(例如,格式错误的请求语法、大小过大、无效的请求消息帧或欺骗性的请求路由),服务器无法或将不会处理该请求

“格式错误的请求语法”部分非常适合您的情况(因为发送整数而不是字符串(GUID)不符合请求模式及其语法)

因此,您的API应该返回如下响应:

{"message": "Error processing element at index 8: a string GUID expected, integer '13' found"}
更新:如果确实只发送了guid,只需返回200。206代码用于完全不同的目的(例如,多线程下载),此时只传递了部分(通常是二进制)响应。在您的例子中,返回的响应是完整的,即使它只包含guid

特定API场景的建议HTTP状态代码

请记住,状态代码属于“网络运输单证”域;它们是标准化形式的元数据,因此通用组件可以识别语义并执行操作

如果您使用的是
GET
,那么可能ID被编码到URI中(当方法为
GET
时,请求的消息体没有任何定义的语义)。如果数据被编码到URI中,那么它就是资源标识符的一部分

如果资源标识符的格式不正确,并且您无法提供相关资源的表示形式,则要使用的标准状态代码为

404(未找到)状态代码表示源服务器未找到目标资源的当前表示形式,或者不愿意透露存在该表示形式

一般来说,您是在向客户机指示请求存在问题,并且请求中有问题的部分是目标uri。通常,我们会在响应的消息体中包含更多特定于上下文的信息

422无法处理的实体。。。有关响应的格式设置,请参阅

,与所有4xx状态代码一样,描述了请求中的问题——特别是请求的消息体存在语义问题。这一条显然适用于包含消息体的请求,包括POST、PUT、PATCH等;这显然不适合GET