我有一个POST请求端点,用户重复发布数据。在我将数据插入数据库之前,根据用户请求,我会检查记录是否已存在。 - 如果记录已存在,则返回200 OK,其中包含table_id和status的响应正文 - 如果记录不存在,我创建新记录并返回200 OK,其中包含table_id和status
的响应正文基本上在这两种情况下,用户都获得状态200.由于用户无法区分是新记录还是现有记录,因此可能会造成混淆。
我以为我会回复304并附上回复正文,并告知消费者该请求是“未修改”,这样消费者就会做出决定。
这是一个好习惯,还是在RESTful主体中有替代方法。
答案 0 :(得分:10)
304
仅用于条件 GET
响应,表示自上次客户端请求后,请求的内容未发生变化。它不适合POST
响应。
对于POST
回复,如果创建了新记录,请使用201
,否则请使用200
或409
。
有关设计REST API的一些有用提示,请参阅以下内容:
Using HTTP 304 in response to POST
HTTP response code for POST when resource already exists
答案 1 :(得分:1)
304 Not Modified
,因此这不适用于您的情况。
当请求格式正确但存在语义错误时,我会使用422 Unprocessable Entity
作为验证错误。
如果记录以前不存在,则应使用201 Created
(而不是200 OK
)回答,这是对成功创建资源的标准响应(在创建POST请求之后)。