我有幻灯片。每个幻灯片都包含幻灯片。
以下内容将返回幻灯片中已订购幻灯片的列表:
GET api/slideshows/123/slides
:
{
{
slideId : "22",
name : "My slide"
},
{
slideId : "25",
name : "My second slide"
},
{
slideId : "26",
name : "Another slide"
}
}
我想执行以下操作,例如:
将幻灯片26移动到幻灯片22
之后的位置公开此类请求的好方法是什么?
要么我们可以以不同的顺序对整个幻灯片集合进行PUT,但如果碰巧有更多变化,这将取代所有幻灯片数据。此外,它可能需要传输大量数据。
PUT api/slideshows/123/slides
另一种选择是提供moveAfter
“操作”:
POST api/slideshows/123/slides/26?action=moveAfter
body:
{
referenceId : "22"
}
我知道这不完全是RESTful,但还有其他实用的解决方案吗?
答案 0 :(得分:1)
我会这样做:PUT api/slideshows/123/slides/26/position 22
。
顺便说一下。挺有趣的。你可以用两种方式做到:
答案 1 :(得分:1)
我会选择以下设计。
这里的关键点是幻灯片的幻灯片只是一个指向组成幻灯片资源的URI数组。要从幻灯片中重新排序,添加或删除幻灯片,可以使用新幻灯片阵列修改幻灯片显示资源。
创建幻灯片独立于引用幻灯片的幻灯片。幻灯片和幻灯片之间的关联只能通过在幻灯片放映资源上执行PATCH来更改。
资源URI不会深深嵌套。这是一个糟糕的设计选择,可以在以后再次咬你。
我用一系列请求 - 响应对来说明它。
GET /slideshows/17
200 OK
{
"slideshow_id": 17,
"slides": [
"/slides/15",
"/slides/42",
"/slides/76",
"/slides/31"
]
}
POST /slides
{
"content": "..."
}
201 Created
Location: /slides/93
GET /slides/93
200 OK
{
"slide_id": 93,
"slideshow_association": null,
"content": "..."
}
PATCH /slideshows/17
{
"slides": [
"/slides/15",
"/slides/31"
"/slides/42",
"/slides/76",
"/slides/93"
]
}
204 No Content
GET /slides/93
200 OK
{
"slide_id": 93,
"slideshow_association": {
"slideshow": "/slideshows/17",
"index": 4,
"previous_slide": "/slides/76",
"next_slide": null
},
"content": "..."
}