我想问你在这种情况下我应该返回什么错误代码:
假设我们有一个具有此路径的 Web 服务:
/customer-web/customers/{customerId}/subscription/{subscriptionId}
默认情况下,如果用户不指定subscriptionId
,我们会得到一个405 Method not allowed
但是,如果我们省略customerId
,我们会得到一个404 Not found
这是对的吗?我们应该以某种方式统一错误代码吗?
谢谢!
[编辑]还有一件事:如果我们假设,例如,只有删除方法......你的答案也会一样吗?谢谢!
- 404 当 请求的资源不可用时,"找不到"是合适的
-
405 当资源不支持HTTP方法时,使用不允许的方法(例如,对于只读资源,可以允许
GET
,但不允许POST
,PUT
或DELETE
)。
当用户未指定subscriptionId
时,请求的资源将被/customer-web/customers/{customerId}/subscription/
。
该资源可能存在(并列出所有订阅),也可能不存在(不绑定到该资源),在这种情况下,404 Not found
是合适的。
是的,这在逻辑上是不正确的。
假设您是客户,并且您有一些关于您自己的数据/信息。它们保存在数据库或其他数据存储中。现在,您将被视为该服务的用户。现在,该服务提供了一些功能,例如:他们可以为您提供有关您最喜欢的主题的最新消息。现在,您必须订阅该特定功能,以便获得通知。但是为了通知您,服务器首先必须为您订阅该事件/功能。每个数据库/数据存储的表行都有一个唯一的标识符,例如行号。现在,他们必须搜索该 Id/行号(假定行号作为您的用户 ID)以检查您是否是适用的用户。
如果他们找到您,那么他们会将您的身份验证程序 ID 或用户 ID 订阅到事件表的subscribedUser
列,并将该事件订阅 ID 添加到您行的subscribedEvents
列中。然后,如果您订阅了,那么他们会向您发送有关您最喜欢的主题或其他内容的通知。
在上面的故事中,为用户/客户创建订阅所必需的事情是:
客户 ID/用户- ID(这可以是该用户/客户的行索引号,将被推送到该事件的
subscribedUser
列) - 事件 ID(这可以是该事件的行索引号,它将用作订阅 ID,该索引号将被推送到该用户/客户行的
subscribedEvent
列)
现在,如果缺少上面的ID之一,那么您将搜索什么?也许你会有null
|undefined
,如果您不提供其中任何一个,行号或用户ID/EventID不能为空,因为它们是数字并且是唯一的。如此容易猜到,查询操作将返回空[]
甚至null
。空是一个虚假值。因此,服务器肯定会将此视为错误,并将404
作为Not Found
响应发送回。
但有一点,如果customerId
用作 URI 的参数:parameter
并且没有传递,那么 URL 将指向另一个端点并返回其他/不相关的响应。如果该终结点不存在,它将返回另一个 404 错误。subscriptionId
也是如此.以上 criterea 仅适用于错误的customerId
或subscriptionId
。现在,如果你不传递它们中的任何一个,那么地址将是错误的,如果该端点中不存在任何内容,则将发送404
,如果端点存在,则发送其他响应。