REST API 响应状态代码 - 搜索 GET returns 单个结果
REST API response status code - search GET that returns a single result
如果我们有一个搜索 GET REST API 端点,return 为当前登录的客户提供一个或零个结果,我想知道正确的响应状态代码是什么,因为实例:
api/subscriptions?productId=1
根据规格,客户可以订阅一次,也可以不订阅该产品。
据我所知,根据惯例,这应该是一个 200
结果,无论结果是否存在(与 [=28= 的搜索端点的逻辑相同) ]s 对象列表)。我认为这里 return 404
是不正确的,因为这个结果只是一个可能存在的资源?
我知道这种查询甚至可能看起来非常规,因为它的目的不仅是获得订阅,而且还要检查它是否存在。
我想到了将响应模型包装在对象结果中,状态代码为 200
:
public class ActiveSubscriptionModel
{
public bool HasActiveSubscription { get; set; }
public SubscriptionModel Subscription { get; set; }
}
TL;DR: 200 是要使用的正确状态代码
As far as I understand, and according to the convention, this should be a 200 result, no matter if the result exists or not (the same logic as for a search endpoint that returns a list of objects).
不是根据 约定,而是根据 specification -- 200 is the status code that means that the payload of the HTTP response is a representation of the requested resource.
“您要求我提供由 /api/subscriptions?productId=1 标识的网页的表示形式,这就是我要发回给您的内容。” -- 200.
请注意,状态代码(transfer of documents over a network 域的元数据)与 您的 域中文档的语义完全无关。
204 No Content might be appropriate. Status codes can be somewhat subjective.
不是很好的选择。 204 宣布响应的有效载荷为零字节长,并暗示用户代理不应离开当前视图。
比较我们“应该”对 Web 浏览器的期望:主体长度为零的 200 响应将遍历到“空”网页的视图; 204 响应将使我们看到之前的视图(可能会使查看网页的人感到困惑)。
204 的亮点是我们在 HTTP 兼容 编辑器 中对资源进行本地更改并与服务器共享的场景。我们点击编辑器上的保存按钮,表示被 PUT 到服务器,服务器按原样接受它,我们可以继续编辑而不刷新页面。
(您会看到 205 Reset 是相似的——适用于我们使用 Web 表单进行数据输入时)。
选择适当状态代码的部分技巧是记住服务器不控制客户端 - 我们不一定向我们控制的 java 脚本代码发送响应。因此,我们希望确保我们发送的消息每个人都能以相同的方式理解。
如果我们有一个搜索 GET REST API 端点,return 为当前登录的客户提供一个或零个结果,我想知道正确的响应状态代码是什么,因为实例:
api/subscriptions?productId=1
根据规格,客户可以订阅一次,也可以不订阅该产品。
据我所知,根据惯例,这应该是一个 200
结果,无论结果是否存在(与 [=28= 的搜索端点的逻辑相同) ]s 对象列表)。我认为这里 return 404
是不正确的,因为这个结果只是一个可能存在的资源?
我知道这种查询甚至可能看起来非常规,因为它的目的不仅是获得订阅,而且还要检查它是否存在。
我想到了将响应模型包装在对象结果中,状态代码为 200
:
public class ActiveSubscriptionModel
{
public bool HasActiveSubscription { get; set; }
public SubscriptionModel Subscription { get; set; }
}
TL;DR: 200 是要使用的正确状态代码
As far as I understand, and according to the convention, this should be a 200 result, no matter if the result exists or not (the same logic as for a search endpoint that returns a list of objects).
不是根据 约定,而是根据 specification -- 200 is the status code that means that the payload of the HTTP response is a representation of the requested resource.
“您要求我提供由 /api/subscriptions?productId=1 标识的网页的表示形式,这就是我要发回给您的内容。” -- 200.
请注意,状态代码(transfer of documents over a network 域的元数据)与 您的 域中文档的语义完全无关。
204 No Content might be appropriate. Status codes can be somewhat subjective.
不是很好的选择。 204 宣布响应的有效载荷为零字节长,并暗示用户代理不应离开当前视图。
比较我们“应该”对 Web 浏览器的期望:主体长度为零的 200 响应将遍历到“空”网页的视图; 204 响应将使我们看到之前的视图(可能会使查看网页的人感到困惑)。
204 的亮点是我们在 HTTP 兼容 编辑器 中对资源进行本地更改并与服务器共享的场景。我们点击编辑器上的保存按钮,表示被 PUT 到服务器,服务器按原样接受它,我们可以继续编辑而不刷新页面。
(您会看到 205 Reset 是相似的——适用于我们使用 Web 表单进行数据输入时)。
选择适当状态代码的部分技巧是记住服务器不控制客户端 - 我们不一定向我们控制的 java 脚本代码发送响应。因此,我们希望确保我们发送的消息每个人都能以相同的方式理解。