2

我正在尝试更多地了解 REST 方式:)。假设我有一个可以通过 url GET /productTypes 检索的 ProductTypes 集合,假设我们可以但不必应用任何过滤器。所以这会获取 500 条记录。

现在,如果我想完全更新资源,我可以在 /productTypes/123 使用 PUT 或 POST。到目前为止,一切都很好。

如果我正在创建一个新资源并且我提前知道了 id,我会在 /productTypes/123 处使用 PUT 并返回 201,否则使用 200 更新 PUT。

如果我对资源进行部分更新,我会在 /productTypes/123/displayOrder 处执行 PUT 或 POST 并返回 303 指示其他资源已被修改。

但是,如果我执行 1 次 POST 发送基本上是产品 ID 和显示顺序的键值对列表,然后修改 500 条记录中的 5 条。我现在如何表明这 5 条记录已更改?

在此部分更新之后,现在 /productTypes 处的 GET 会发生什么情况。我在某处读到,与其使用此获取返回多条记录,不如将列表链接返回到资源,然后一个接一个地获取它们,因为这将允许疯狂的缓存。但我仍然如何表明 5 条记录已更改?我需要用 303 做 5 个单独的帖子,还是有不同的机制。希望这是有道理的。

4

2 回答 2

0

我会这样做:

PATCH /productTypes HTTP/1.1
Content-Type: application/json

{"item":[
  {"id":"1","displayOrder":"4"},
  {"id":"2","displayOrder":"2"},
  {"id":"3","displayOrder":"1"},
  {"id":"4","displayOrder":"3"},
  {"id":"5","displayOrder":"5"}
]}


HTTP/1.1 200 OK
Content-Type: application/hal+json

{
  "_links": { "self": {"href": "/productTypes" } }
  "_embedded": {
    "item": [{
      "_links": { "self": { "href": "/productTypes/1" } },
      "displayOrder": "4"
    },
    /* 4 more entries */
    ]
  }
}
于 2013-04-26T13:44:33.013 回答
0

我在规范中没有看到任何特别禁止您使用多个 Content-Location 标头的内容。我对其进行了测试,Chrome 完全可以。它不会自动为您重定向,但无论如何您都不希望涉及多个资源。

HTTP/1.1 303 See Other
Content-Location: /productTypes/123/displayOrder
Content-Location: /productTypes/456/displayOrder
Content-Location: /productTypes/789/displayOrder
Content-Location: /productTypes/012/displayOrder
Content-Location: /productTypes/345/displayOrder
于 2013-04-25T18:31:05.650 回答