我有一个允许使用 HTTP POST 修改资源的 REST API。客户端可能会提交一个不会导致资源修改的 POST 请求。我正在考虑使用通常用于条件响应的 304 响应来指示请求无效。我找不到任何这样做的例子,所以我想我会在这里问一下,看看是否有其他人正在这样做或对此有意见。
问问题
12498 次
2 回答
7
经过一番考虑,我决定坚持使用未更改的资源实体进行正常的 200 响应。我最初的意图是提供一种简洁的方式来向客户表明资源没有被修改。当我想得更多时,我意识到为了对 304 响应做任何有用的事情,他们必须已经有一个缓存版本,在这种情况下,将缓存副本的版本与返回的版本进行比较是微不足道的200 响应。
于 2013-11-22T19:56:44.040 回答
3
我有一个允许使用 HTTP POST 修改资源的 REST API。客户端可能会提交一个不会导致资源修改的 POST 请求。
RESTful 方法中的 HTTP POST 意味着创建资源,而不是修改。对于修改,您应该使用 HTTP PUT。
您的问题的解决方案是HTTP 状态 200 OK当某些东西被修改和HTTP 状态 204 没有内容时没有修改。根据:
常见的用例是作为 PUT 请求的结果返回 204,更新资源,而不更改显示给用户的页面的当前内容。如果资源已创建,则返回 201 Created。如果页面应该更改为新更新的页面,则应使用 200。
-- MDN 网络文档
例如:
-- Request
POST /people HTTP/1.1
Content-Type: application/json
{
"name": "John"
}
-- Response
HTTP/1.1 201 Created
Location: /people/1
-- Request
PUT /people/1 HTTP/1.1
Content-Type: application/json
{
"name": "John"
}
-- Response
HTTP/1.1 204 No Content
-- Request
PUT /people/1 HTTP/1.1
Content-Type: application/json
{
"name": "Robert"
}
-- Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"name": "Robert"
}
于 2017-12-24T13:09:22.210 回答