RESTful POST 请求,若 POST 数据已存在记录,我们应该返回 200 OK 还是 304 Not Modified?

16
我有一个POST请求的端点,用户会重复提交数据。在将数据插入到数据库之前,根据用户的请求,我会检查记录是否已经存在。 - 如果记录已经存在,则返回带有表格ID和状态的响应体的200 OK。 - 如果记录不存在,则创建新记录,并返回带有表格ID和状态的响应体的200 OK。
基本上,在这两种情况下,用户都会得到200的状态码。作为用户,这可能会让人困惑,因为无法区分是新记录还是现有记录。
我想返回带响应体并告知消费者该请求是“未修改”的304,以此方式,消费者可以做出决策。
这是一种好的实践方法还是RESTful原则中的另一种替代方法?

我在这里发现了一个有趣的话题http-response-code-for-post-when-resource-already-exists。哪个状态码更适合使用:302 - FOUND,303 - See Other,304 - Not Modified。我认为使用302更有意义 :-) - Manjunath Reddy
RFC link 指出应使用 303(See Other)。 - Nullius
2个回答

12

2

304 Not Modified是在HTTP缓存头文件起作用时使用的,因此不适用于您的情况。

我建议使用422 Unprocessable Entity来表示验证错误,即请求格式正确但存在语义错误。

如果记录之前不存在,则应该使用201 Created(而不是200 OK),这是对成功创建资源(在POST创建请求后)的标准响应。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接