以RESTful方式重新排序商品

koj*_*ow7 6 rest

我有一个包含以下数据的表:

id position name
== ======== =========
1     4      Fred
2     2      Wilma
3     1      Pebbles
4     5      Barney
5     3      Betty
Run Code Online (Sandbox Code Playgroud)

这是供用户重新排列的列表(因此在位置列中)。我的问题是,我怎样才能轻松地做到这一点。例如,如果我想将Fred移到位置2,我将如何发送请求?

目前,我有这样的事情:

PUT /user/1/reorder/2
Run Code Online (Sandbox Code Playgroud)

这会将当前位于位置4的用户1(Fred)移至位置2。SQL代码还将运行查询,该查询将更改其他用户的位置以适应Fred的新位置。

正确的RESTful方法是什么?

Voi*_*son 1

执行此操作的正确 RESTful 方法是什么?

这个想法是,你的 API 是你的领域模型的伪装,这样它就可以假装成无聊的 Web 文档存储。

如果可能,您希望修改的 URI 与 的 URI 匹配GET,因为这样您就可以使用通用组件来管理客户端的缓存失效。

因此,如果您阅读具有类似请求的用户列表

GET /flintstones
Run Code Online (Sandbox Code Playgroud)

然后你想使用以下一种或多种想法来修改表示

POST  /flintstones
PUT   /flintstones
PATCH /flintstones
Run Code Online (Sandbox Code Playgroud)

对于 PUT 请求,正文中的表示可能只是重新排序的列表:

Pebbles
Fred
Wilma
Betty
Barney
Run Code Online (Sandbox Code Playgroud)

然后由您的实现来确定如何获取该文档并将其表达为一系列 SQL 调用。

但最终你不会得到带宽效率较低、数据库查询效率较低的结果吗?

对于大型文档的小编辑,PUT可能不是您的最佳选择。您也可以采用已放入 URL 中的相同信息,将其嵌入到补丁文档中,然后使用PATCHorPOST代替。

所以它可能是一个网络表单——我们将使用application/x-www-form-urlencode数据将表单条目传回服务器,以便它能够弄清楚要做什么。或者(对于交换 json 表示的情况,我们可以编写一个描述更改的JSON 补丁文档)。