您是否知道设计REST方法以改变小集合的顺序的任何"最佳实践"?
我有一个暴露在"GET/api/v1/items"的集合.此端点返回JSON数组,每个项目都有唯一的ID.
我正在考虑创建"PATCH/api/v1/items"并使用新订单发送一组id.但我想知道是否有任何替代或设计模式来正确完成这项任务.
Ped*_*eck 20
遵循REST统一接口约束,HTTP PUT和PATCH方法必须遵循标准语义,因此您可以通过以下方式使用其中任何一个:
使用PUT,客户可以使用他们想要的顺序上传全新的表示.他们会要求GET /api/v1/items,根据需要更改订单,然后将其提交PUT /api/v1/items.
使用PATCH,客户端可以发送差异文档,根据需要执行订单更改.您可以使用json-patch等格式,客户端使用move操作和数组路径执行更改.
请注意,这些都不是设计模式或最佳实践.它们只是PUT和PATCH方法应该如何工作.理想情况下,这应该适用于任何实现该URI的RESTful应用程序GET,PUT以及PATCH针对该URI资源的正确方法,这就是REST的优点.如果你以正确的方式做到这一点,你只需要做一次,客户可以为每个人进行推广.例如,客户可以选择以PUT小型集合的PATCH方式进行,也可以选择大型集合的方式.
你想要使用PATCHid数组的想法,以及@dit建议用它做的答案PUT都不是RESTful,因为它们与标准语义分手:你不使用delta格式,他用于进行部分更新PUT.但是,如果完成这两个选项都可以是RESTful POST.POST是采用HTTP协议未标准化的任何操作的方法,因此您可以使用它执行任何操作,但您必须记录完成操作的具体方法.
所以,这取决于你.如果你担心RESTful并且你的应用程序有长期目标 - 我说的是几年甚至几十年 - 我会说要首先统一实现PUT和PATCH方法.如果您更喜欢简单的方法,请使用您的或者dit的想法POST.
好的,我遇到了类似的问题,并将尝试解释我是如何解决它的。
我的自行车之旅有大约 5 个站点。每个站都有一个唯一的 ID 和订单号:
stations": [
{
"uid": 1,
"order": 1
},
{
"uid": 2,
"order": 2
},
{
"uid": 3,
"order": 3
},
{
"uid": 4,
"order": 4
},
{
"uid": 5,
"order": 5
}
]
Run Code Online (Sandbox Code Playgroud)
每次更改单个项目的顺序(拖放)时,我都会向我的网络服务发送 REST 请求。
假设我们要将站点uid=3下移一位。与站的uid = 3下降,并与台UID = 4上升。所以我的PUT请求如下所示:
...myapplication.com/api/changeorder?station=3&direction=down
Run Code Online (Sandbox Code Playgroud)
现在,在服务器端,我只需要找到受此下移操作影响的项目并在我的数据库中更新它们的顺序。OK如果更新成功,我的 REST 网络服务就会发送。
在我的情况下,没有必要发送新的排序列表,因为我的 UI 总是通过拖放操作进行更改。
| 归档时间: |
|
| 查看次数: |
4325 次 |
| 最近记录: |