Heim  >  Artikel  >  Backend-Entwicklung  >  RESTful many-to-many relationships创建和更新问题

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

WBOY
WBOYOriginal
2016-06-06 20:32:241152Durchsuche

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

先说创建

<code>POST: /teams/1/players/
PUT: /teams/1/players/1/
</code>

这两种哪个更合适些呢,我是比较倾向第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....接口如果设计为

<code>PUT: /teams/3/players/1/
</code>

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

该如何设计呢?

回复内容:

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

先说创建

<code>POST: /teams/1/players/
PUT: /teams/1/players/1/
</code>

这两种哪个更合适些呢,我是比较倾向第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....接口如果设计为

<code>PUT: /teams/3/players/1/
</code>

也会把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。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn