返回 REST API 中错误 HTTP 方法的代码?

Posted

技术标签:

【中文标题】返回 REST API 中错误 HTTP 方法的代码?【英文标题】:Return code for wrong HTTP method in REST API? 【发布时间】:2015-03-21 02:46:16 【问题描述】:

我们的 API 用户可以通过向根 API 地址发送GET 请求来获取 root 文档(集合列表)。如果他发送POST,我们应该返回一些东西。同样的问题适用于其他资源路径,例如在查询路径等上发送PATCH。并非所有方法在某些路径上都有意义。

正如我从 HTTP RFC 中看到的,我们应该返回代码 405: Method not allowed 并返回带有允许方法列表的 Allowed 响应标头。

我看到了,例如GitHub API 返回 404Not found 在我上面解释的情况下(发送 POST 到 root)。

正确的反应是什么? 404 还是 405?我看到405 对开发人员更友好,所以有什么理由不使用它吗?

【问题讨论】:

【参考方案1】:

根据 HTTP 规范和 REST 指南,这种情况下的预期行为将是返回 405 Method Not Allowed资源在那里,因为 GET 有效,所以 404 Not Found 会令人困惑。

我不熟悉GitHub API,但在某些情况下,我看到403 Forbidden 也返回404 Not Found

在某些地方,需要身份验证的请求将返回 404 Not Found,而不是 403 Forbidden。这是为了防止私有存储库意外泄露给未经授权的用户。

也许根地址上的行为是处理此类情况的更大机制的一部分,谁知道呢。 Maybe you could ask?

【讨论】:

一个错误的访问令牌肯定会返回403 "Bad credentials"。

以上是关于返回 REST API 中错误 HTTP 方法的代码?的主要内容,如果未能解决你的问题,请参考以下文章

如果 REST API 方法失败,我应该返回 200、400 还是 500 HTTP 状态消息?

REST API 错误代码返回结构

从 https rest api 调用 http rest api 错误 502

在 java rest api 上返回自定义状态和代码

REST API 错误返回良好做法 [关闭]

Paypal Refund Sale REST API 返回:远程服务器返回错误:(404)未找到