如果资源不可用于请求的操作,HTTP 状态代码应该是什么?

Rah*_*hul 3 api rest http http-status-codes

我正在开发一个 RESTful API。我对在这种特殊情况下设置 HTTP 状态代码感到困惑。我不确定我(服务器)应该返回什么状态代码。

假设我的应用程序具有关注用户功能,如果我已经关注用户并再次发送相同用户 ID 的关注请求,那么在这种情况下,来自服务器的 HTTP 状态代码应该是什么。状态代码后会出现一条错误消息,内容类似于:“已经关注用户”。

对于取消关注用户功能,可以考虑类似的情况,如果我没有关注用户“A”,我仍然向取消关注用户“A”发送请求,那么服务器应该返回什么 HTTP 状态代码并带有类似“不关注用户”之类的错误消息取消关注”

肯定 200 响应代码在这里对我来说似乎不合适?还是呢?

如果我在错误的堆栈交换站点上发布了问题,请原谅我,我将其发布在 stackoverflow 站点中只是因为它与 REST API 相关。

编辑

从客户端用户需要向 URL 发送 POST 请求:

http://www.myserver.com/api/follow/10
Run Code Online (Sandbox Code Playgroud)

以及在服务器端提供请求之前用于身份验证的其他必要参数(如 API 密钥、正确的标头等)。

取消关注操作的类似 URL 是:

http://www.myserver.com/api/unfollow/10
Run Code Online (Sandbox Code Playgroud)

现在,如果客户端发送关注请求,我将发送 HTTP 状态代码 200 作为响应,假设用户 ID 为 10,即使他/她已经关注 ID 为 10 的用户。在这种情况下,连同状态代码(200 ) 我正在发送类似于“已关注用户”的消息

不知何故,我觉得这并不令人信服,因为没有创建/更新资源,它应该返回带有正确状态代码的错误消息,而不是 200,可能是 4XX 中的一个,不确定。

Rah*_*hul 5

422 无法处理的实体

在这个用例中,422 似乎是正确的 HTTP 状态代码。422的描述说:

422(不可处理实体)状态码意味着服务器理解请求实体的内容类型(因此 415(不支持的媒体类型)状态码是不合适的),并且请求实体的语法是正确的(因此是 400(坏请求) ) 状态代码不合适) 但无法处理包含的指令。