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

时间:2014-09-17 16:57:42

标签: rest http

我有一个POST请求端点,用户重复发布数据。在我将数据插入数据库之前,根据用户请求,我会检查记录是否已存在。 - 如果记录已存在,则返回200 OK,其中包含table_id和status的响应正文 - 如果记录不存在,我创建新记录并返回200 OK,其中包含table_id和status

的响应正文

基本上在这两种情况下,用户都获得状态200.由于用户无法区分是新记录还是现有记录,因此可能会造成混淆。

我以为我会回复304并附上回复正文,并告知消费者该请求是“未修改”,这样消费者就会做出决定。

这是一个好习惯,还是在RESTful主体中有替代方法。

2 个答案:

答案 0 :(得分:10)

304仅用于条件 GET响应,表示自上次客户端请求后,请求的内容未发生变化。它不适合POST响应。

对于POST回复,如果创建了新记录,请使用201,否则请使用200409

有关设计REST API的一些有用提示,请参阅以下内容:

Using HTTP 304 in response to POST

HTTP response code for POST when resource already exists

Creating an efficient REST API with HTTP

REST lesson learned: Avoid 204 responses

答案 1 :(得分:1)

当HTTP缓存标头在播放时,将使用

304 Not Modified,因此这不适用于您的情况。

当请求格式正确但存在语义错误时,我会使用422 Unprocessable Entity作为验证错误。

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