【问题标题】:How do I indicate a REST API endpoint is removed如何指示已删除 REST API 端点
【发布时间】:2018-11-05 09:39:14
【问题描述】:

我有一个端点

DELETE /events/<id>

在新版本的 API 中,我们将删除此 API

现在如果客户端请求相同的 URL,我应该输出什么状态码

我找到了一些选择。

  1. 410 Gone。这是最接近的。但它与资源有关。 这与管理 API 无关。我认为这意味着,如果GET /events/1 有效,那么声明/events/1Gone 是没有意义的
  2. 301 Moved Permanently302 Found。它们用于重定向。但替换不是GET 电话
  3. 405 Method Not Allowed。这是有道理的,因为现在不再允许使用 DELETE 方法。但它并没有说过去是允许的(不确定我们是否需要它)

此端点支持的其他 http 方法是,

GET /events/<id>/
POST /events/
POST /events/<id>/actions/

只是为了澄清。当我搜索主题时,我会获得有关资源的更多信息。但在这里我担心 API 的折旧和删除。这更像是一种管理。

【问题讨论】:

  • 如果您的端点 /events/ 中有其他 HTTP 方法,例如 GET、POST、PUT,那么我相信如果您删除 DELETE 方法,您必须显示“405 Method Not Allowed” ,如果不是这种情况,并且您在该端点中没有任何 http 方法,我将显示 404 Not Found 或 410 Gone。
  • @BrankVictoria 在问题中添加了这一点。您可能想添加您的评论作为答案。
  • 如果您的 API 相当符合 HATEOAS 标准,您可以(或另外)停止在相应的 GET 中发出“删除”链接。

标签: rest http api-design


【解决方案1】:

这里有些东西歪了。

DELETE 是动词,表示方法,而不是端点。

/events这是您的端点。

MDN 建议410 Gone 用于已删除的资源。通用 http 上下文中的资源可以是任何东西。

超文本传输​​协议 (HTTP) 410 Gone 客户端错误响应 代码表示不再访问目标资源 在源服务器上可用,并且这种情况很可能是 永久的。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/410

如果您想显示一个方法已被删除但端点仍然存在,您可能会使用405 Method not allowed

您还应该考虑对 API 进行版本控制。

【讨论】:

  • 这里的问题是访问*目标资源*。它以资源为导向。 /events/&lt;id&gt; 是一个资源。但DELETE /events/&lt;id&gt; 不是。这是一个 API 调用。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2018-01-04
  • 2016-04-20
  • 2022-10-21
相关资源
最近更新 更多