RESTful many-to-many relationships创建和更新问题

WBOY
发布: 2016-06-06 20:32:24
原创
1040 人浏览过

比如1个team可以有多个player,并且1个player可以属于多个team,这就形成了many-to-many关系。针对这种情况,RESTful接口该如何设计呢?

先说创建

POST: /teams/1/players/
PUT: /teams/1/players/1/
登录后复制
登录后复制

这两种哪个更合适些呢,我是比较倾向第2种。

再说更新,因为是N:N的关系,关系表里可能有如下数据

id team_id player_id
1 1 1
2 1 2
3 2 1

如果我想把player_id为1并且team_id为2的改为team_id为3....接口如果设计为

PUT: /teams/3/players/1/
登录后复制
登录后复制

也会把player_id为1并且team_id为1的修改为team_id为3....显然不是我想要的...

该如何设计呢?

回复内容:

比如1个team可以有多个player,并且1个player可以属于多个team,这就形成了many-to-many关系。针对这种情况,RESTful接口该如何设计呢?

先说创建

POST: /teams/1/players/
PUT: /teams/1/players/1/
登录后复制
登录后复制

这两种哪个更合适些呢,我是比较倾向第2种。

再说更新,因为是N:N的关系,关系表里可能有如下数据

id team_id player_id
1 1 1
2 1 2
3 2 1

如果我想把player_id为1并且team_id为2的改为team_id为3....接口如果设计为

PUT: /teams/3/players/1/
登录后复制
登录后复制

也会把player_id为1并且team_id为1的修改为team_id为3....显然不是我想要的...

该如何设计呢?

新建:POST /players
更新:PUT/PATCH /players/:id

你的主体都是 player, team_id 作为参数传进去就好了。

n:n情况下一个接口已经不适用了,我的想法是这样的:

  1. /teams/{id}/players/{id}
    或者/players/{id}/teams,二者选一(以下讨论假定选择前者)
  2. 还需实现/memberships/,这个接口维护两者关系的UUID。这是最重要的。这样你可以把/players/{id}/teams/用来维护当前的memberships的hyperlinks。
    这时无论teams还是players的AUD操作都在 /teams/{id}/players/{id}完成,同时同步/memberships下的关系即可。
  3. 如果你需要跟踪历史关系,还可以有/players/{id}/past_memberships/,这个接口也是一个membership的hyperlinks。
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!