restful 接口,如何设计对某个资源的列表字段增加一个元素的操作?

2017-08-01 15:14:21 +08:00
 yujianwjj
"job": {
	"id": 1,
	"node": [1, 2, 3]
}

现在相对 node 字段增加一个元素 4,restful 的接口该如何写。

2534 次点击
所在节点    Python
14 条回复
fangchang
2017-08-01 15:18:59 +08:00
post
/job/{id}/nodes

content: 4
yujianwjj
2017-08-01 15:21:56 +08:00
你这个应该是将整个 nodes 字段替换为 4
gigantic222
2017-08-01 15:25:18 +08:00
Post {id}/nodes/push 加个参数当作动作吧 然后 shift pop 什么的同理
gigantic222
2017-08-01 15:27:50 +08:00
感觉还是直接 put 1,2,3,4 靠谱些
ansheng
2017-08-01 15:29:41 +08:00
put
/job/{id}/
node=[1, 2, 3,4]
mooncakejs
2017-08-01 15:31:44 +08:00
put /job/{id}
{
"node": [1, 2, 3,4]
}
如果要原子化
1 楼的吧
timwei
2017-08-01 15:35:09 +08:00
1. 将 node 看做资源:
post /job/{id}/nodes

2. 将 job 看做资源,node 看做属性:
put /job/{id}
yujianwjj
2017-08-01 15:38:44 +08:00
@gigantic222 restful 接口好像是不推荐加动作参数。
timwei
2017-08-01 15:39:55 +08:00
@yujianwjj
如果将 node 看做资源
替换整组资源为 4,应对应到
put /job/{id}/nodes
fangchang
2017-08-01 16:10:13 +08:00
如果你要替换,那是对应的 put。
post 在我看来就是用来在此资源里创建并添加。
baiyi
2017-08-01 16:21:04 +08:00
看你的逻辑需求

如果是创建一个 `node` 的话就用 `POST`

如果是更新 `job` , 就是 `PUT`

注意 `POST` 和 `PUT` 的区别

`PUT` 有幂等性, 也就是说多次请求的效果是相同的

所以说, 如果你的 `node` 里 `4` 这个值不能重叠的话, 也应该是 `PUT`
wizardoz
2017-08-01 16:38:49 +08:00
node 是资源,属性最好改为 nodes

put /job/1/nodes/4
paicha
2017-08-01 17:03:30 +08:00
POST /job/1/nodes/
otakustay
2017-08-01 17:04:38 +08:00
不可重复的(每次都是把第 4 个位置更新)用 PUT /jobs/1/nodes/4
可以重复的(每次都在最后增加)用 POST /jobs/1/nodes

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/379552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX