我试图更多地了解REST方式:)。假设我有一个ProductTypes的集合,可以通过url GET / productTypes进行检索,让我们说我们可以但不必应用任何过滤器。这样就可以获取500条记录。
现在,如果我想要完全更新资源,我可以在/ productTypes / 123使用PUT或POST。到现在为止还挺好。
如果我正在创建一个新资源并且我提前知道了id,我会在/ productTypes / 123处使用PUT,否则返回201以更新PUT为200.
如果我对资源进行部分更新,我会在/ productTypes / 123 / displayOrder上执行PUT或POST,并返回303,表示某些其他资源已被修改。
但是,如果我发送1个POST基本上发送产品ID和显示顺序的键值对列表,我会修改500条记录中的5条。我现在如何表明这5条记录已经改变了?
此部分更新后,/ productTypes的GET会发生什么。我在某地读到,不是用这个get返回多个记录,我应该返回列表链接到资源,然后一个接一个地获取它们,因为这将允许疯狂的缓存。但是,我如何表明5条记录已经改变?我需要用303做5个单独的帖子,还是有不同的机制。希望这是有道理的。
答案 0 :(得分: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
答案 1 :(得分: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 */
]
}
}