REST:部分更新集合子集的最佳实践

我想了解更多关于REST的方法:)。 比方说,我有一个ProductTypes集合,可以通过url GET / productTypes进行检索,并假设我们可以但不必应用任何筛选器。 所以这会获取500条记录。

现在,如果我想完全更新资源,我可以在/ productTypes / 123上使用PUT或POST。 到现在为止还挺好。

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

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

但是,如果我在1个POST基本上发送产品ID和显示顺序的Key-Value对列表,并且我修改了500条记录中的5条,那该怎么办? 我现在如何表明这5条记录已经改变?

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


我没有看到规范中的任何内容,明确禁止您使用多个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

我会这样做:

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 */
    ]
  }
}
链接地址: http://www.djcxy.com/p/45367.html

上一篇: REST: Best practice for partial update of subset of collection

下一篇: CRUD operations in a RESTful service