【发布时间】:2020-01-18 13:13:48
【问题描述】:
我有一个资源 Post 的 POST 休息端点,仅当没有其他处于“review”状态的帖子时,它才会更新 Post 资源上名为“status”的字段。但是,如果用户尝试将帖子更新为“审核”状态,而帖子已经在审核中,那么应该返回什么状态?
我能想到 3 个选项:
- 403:因为当帖子已经处于审核状态时,这是一个禁止操作。
- 400:由于用户在已经有一个处于“review”状态的帖子时请求更新一个帖子的状态,所以更新一个帖子状态的请求是Bad request。
- 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