【问题标题】:What HTTP status should be used in the response? [closed]响应中应该使用什么 HTTP 状态? [关闭]
【发布时间】:2020-01-18 13:13:48
【问题描述】:

我有一个资源 Post 的 POST 休息端点,仅当没有其他处于“review”状态的帖子时,它才会更新 Post 资源上名为“status”的字段。但是,如果用户尝试将帖子更新为“审核”状态,而帖子已经在审核中,那么应该返回什么状态?

我能想到 3 个选项:

  1. 403:因为当帖子已经处于审核状态时,这是一个禁止操作。
  2. 400:由于用户在已经有一个处于“review”状态的帖子时请求更新一个帖子的状态,所以更新一个帖子状态的请求是Bad request。
  3. 200:发送带有 JSON 数据的 OK 响应,其中包含字段 { success: false, err: 'Not allowed as some other Post is already in Review' }

哪种方式更适合 REST 处理?除了这些,还有其他可以使用的状态吗?

【问题讨论】:

  • 这是一个见仁见智的问题,因此与 SO 无关。有些人喜欢将他们的应用程序逻辑状态扩展为 HTTP 状态代码(您的 #1 和 #2),而另一些人则喜欢让他们的 HTTP 状态代码只反映 HTTP 层的结果,而不是应用程序层的结果。两种方法各有利弊,拥护者兼具学术性和实用性。 :-)
  • 同上...这是意见。也就是说,我倾向于 304(未修改)、204(无内容)或 409(冲突)。老实说,4XX 代码似乎没有必要,但取决于您。

标签: java rest express http https


【解决方案1】:

带有字符串响应的 400 解释了帖子为什么是“坏的”是最佳选择。考虑类似

无法更改状态,另一个帖子正在审核中

不要使用 200(OK)来解释一些不正常的情况。我经常看到这种情况,每次都想咬掉我的手指!

403s最适合用于权限限制,比如

无法更改状态,请升级您的帐户以允许更新 帖子状态

--即使这不适用于您的情况

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2018-05-23
    • 2014-05-29
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2013-01-18
    • 2020-08-25
    • 2011-06-02
    相关资源
    最近更新 更多