REST Web 服务:错误代码应该是 404 还是 405?

REST web service: Error code should be 404 or 405?

我想问一下在这种情况下我应该return什么错误代码:

假设我们有一个具有此路径的 Web 服务:

/customer-web/customers/{customerId}/subscription/{subscriptionId}

默认情况下,如果用户没有指定subscriptionId,我们得到一个405 Method not allowed 但是,如果我们省略 customerId,我们会得到 404 Not found

对吗?我们应该以某种方式统一错误代码吗?

谢谢!

[编辑] 再说一件事:例如,如果我们假设只有 DELETE 方法……您的答案也会一样吗?谢谢!

  • 404 Not found 适用于请求的资源不可用
  • 405 Method not allowedHTTP 方法在资源上不受支持 时使用 (例如 read-only 资源,可能允许 GET 但不允许 POSTPUTDELETE)。

当用户没有指定subscriptionId时,请求的资源将是/customer-web/customers/{customerId}/subscription/
该资源可能存在(并列出所有订阅),也可能不存在(未绑定到该资源),在这种情况下 404 Not found 是合适的 .

是的,逻辑上不正确。

假设您是一位客户,您对自己有一些 data/information 的了解。这些保存在数据库或其他数据存储中。现在,您将被视为该服务的用户。现在,该服务提供了一些功能,例如: 它们可以为您提供有关您喜欢的主题的最新消息。现在您必须订阅该特定功能才能收到通知。但是要让您自己收到通知,服务器首先必须让您订阅 event/feature。 每个 database/data 商店的 Table 行都有一个唯一标识符,例如行号。 现在,他们必须搜索那个 Id/Row 号(假设行号作为您的用户 ID) 来检查您是否是适用的用户。

如果他们找到您,那么他们会将您的身份验证者 ID 或用户 ID 订阅到事件 Table 的 subscribedUser 列,并且还会将该事件订阅 ID 添加到您的行 subscribedEvents柱子。然后,如果您订阅了,那么他们会向您发送有关您最喜欢的主题或其他内容的通知。

在上面的故事中,为 user/customer 创建订阅所需的东西是:

  • CustomerID/UserID(这可以是 User/Customer 的行索引号,它将被推送到该事件的 subscribedUser 列)
  • EventID(这可以是将用作 subscriptionId 的该事件的行索引号,它将被推送到 subscribedEvent 的列User/Customer的行)

现在,如果上面的 ID 丢失了,那么您将使用什么来搜索?如果您不提供其中的任何一个并且行号或 UserID/EventId 不能为 Null,因为它们是数字并且也是唯一的,所以您可能会有一个 null|undefined。很容易猜到,查询操作将 return 与空 [] 甚至 null。 null 是一个虚假值。所以服务器肯定会将此视为错误并将 404 作为 Not Found 响应发回。

但是有一件事,如果 customerId 被用作 URI 的参数 :parameter & 如果它没有被传递,那么 URL 将指向另一个端点 &将 return other/unrelated 响应。如果该端点不存在,那么它将 return 另一个 404 错误。 subscriptionId 也是如此。以上条件只适用于错误的customerIdsubscriptionId。现在,如果你不传递它们中的任何一个,那么地址将是错误的并且如果该端点中不存在任何内容将发送 404 并且如果端点存在则将发送其他响应。