【问题标题】:REST web service: Error code should be 404 or 405?REST Web 服务:错误代码应该是 404 还是 405?
【发布时间】:2020-12-16 04:13:44
【问题描述】:

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

假设我们有一个带有这个路径的网络服务:

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

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

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

谢谢!

[编辑] 还有一件事:例如,如果我们假设仅 DELETE 方法...您的答案是否也相同?谢谢!

【问题讨论】:

  • 非常感谢您的所有回复。你帮了大忙!

标签: java rest web-services http-error


【解决方案1】:
  • 404 Not found适用于请求的资源不可用
  • 405 Method not allowed在资源不支持HTTP方法时使用(例如对于只读资源,GET可能允许但@987654322不允许@、PUTDELETE)。

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

【讨论】:

    【解决方案2】:

    是的,逻辑不正确。

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

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

    在上面的故事中,为用户/客户创建订阅所需的事情是:

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

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

    但有一件事,如果 customerId 用作 URI 的参数 :parameter 并且如果它没有被传递,那么 URL 将指向另一个端点并且将返回其他/不相关的响应。如果该端点不存在,那么它将返回另一个 404 错误。 subscriptionId 也是如此。以上标准仅适用于错误的customerIdsubscriptionId。现在,如果您不通过其中任何一个,那么地址将是错误的,如果该端点中不存在任何内容,则发送404;如果端点存在,则发送其他响应。

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2015-08-24
      • 2021-03-23
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多