Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful POST请求,如果POST数据上已经存在记录,我们是返回200 OK还是304 Not Modified?_Rest_Http - Fatal编程技术网

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

RESTful POST请求,如果POST数据上已经存在记录,我们是返回200 OK还是304 Not Modified?,rest,http,Rest,Http,我有一个POST请求端点,用户在这里反复发布数据。在将数据插入数据库之前,我会根据用户请求检查记录是否已经存在。 -如果记录已经存在,我返回200 OK,响应体包含表id和状态 -若记录不存在,我将创建新记录并返回200 OK,响应体包含表id和状态 基本上在这两种情况下,用户都获得状态200。作为用户,它可能会让人困惑,因为人们无法区分它是新记录还是现有记录 我想我会返回304,并告知消费者该请求“未修改”,这样消费者就会做出决定 这是一种好的做法,还是RESTful主体中有替代方法。304仅

我有一个POST请求端点,用户在这里反复发布数据。在将数据插入数据库之前,我会根据用户请求检查记录是否已经存在。 -如果记录已经存在,我返回200 OK,响应体包含表id和状态 -若记录不存在,我将创建新记录并返回200 OK,响应体包含表id和状态

基本上在这两种情况下,用户都获得状态200。作为用户,它可能会让人困惑,因为人们无法区分它是新记录还是现有记录

我想我会返回304,并告知消费者该请求“未修改”,这样消费者就会做出决定


这是一种好的做法,还是RESTful主体中有替代方法。

304
仅用于有条件的
GET
响应,以表明请求的内容自客户端上次请求以来没有更改。这不适用于
POST
响应

对于
POST
响应,如果创建了新记录,则使用
201
,否则使用
200
或可能使用
409

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


304未修改
将在使用HTTP缓存头时使用,因此这不适用于您的情况

当请求格式正确但存在语义错误时,我将使用
422不可处理实体
,用于验证错误


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

我在这里遇到了这个有趣的话题。哪一个需要使用302-找到,303-参见其他,304-未修改。302对我来说更有意义:-)RFC注意到应该使用303(见其他)。可能是