如果不需要更新,用304响应非条件PUT是否正确?

时间:2016-07-06 09:15:35

标签: http standards http-status-codes standards-compliance http-status-code-304

我有一个RESTful API,其中包含一个资源,我无条件PUT数据,以确保它存在并且是最新的。 E.g:

PUT /users/username/ HTTP/1.0
Content-Type: text/json

{"email": "username@example.org"}

执行此类请求,我不在乎用户是否存在,我想要"创建或更新"逻辑。如果用户不存在,则会创建它(并且我将以201 Created响应)。如果它已经存在,API服务将确保其用户(电子邮件地址)的概念是最新的。

但是,我想知道它是否在语义上正确(相对于标准)以304 Not Modified(而不是通常的200 OK)响应非条件请求(没有任何If-*标题),如果资源已经处于准确状态且未执行任何更改。

所以,我的问题是,只要标准允许这样的行为,允许但不鼓励或禁止它?

注意:添加ETag或修改时间目前只会令人讨厌,并且会增加服务器端和客户端的复杂性。我不希望客户端保留任何内容目前额外的州信息。)

1 个答案:

答案 0 :(得分:0)