2016-08-13 78 views
2

我目前正在为具有三种类型的数据的应用程序创建一个API; FilesTagsPersons。这些都是常规联系的;一个File有许多TagsPersons连接到它。为多对多关系构建RESTful API

问题是,我不知道如何使用RESTful API实际连接它们。 PersonsTags对于File是必不可少的,所以它们会自动返回,而不需要任何进一步的请求。

下面是我在看现在的Files结构的一个例子:

GET /tags 
GET /tags/:id 
POST /tags 
PUT /tags/:id 
PATCH /tags/:id 

而对于Persons

GET /files 
GET /files/:id 
POST /files 
PUT /files/:id 
PATCH /files/:id 

而对于Tags

GET /persons 
GET /persons/:id 
POST /persons 
PUT /persons/:id 
PATCH /persons/:id 

由于你可以看到,它们与intentio完全一样使我的API易于记录。但问题在于,对于多对多的关系,我不知道如何将给定的TagPerson链接到File

我正在考虑这个:

POST /files/:id/tags 
DELETE /files/:id/tags/:id 

但似乎有点笨重。

什么是我的情况的理想结构?

回答

1

这些都是常规链接;一个文件有许多标签和人员附加到它。

然后PATCH /files/:id终点似乎是一个好地方:

PATCH /files/:id 
{ 
    "PersonIds": [ 1, 2, 3 ], 
    "TagIds": [ 4, 5 ] 
} 

这将PersonsTags更新File协会和保持文件不变的其他属性(这是PATCH点动词 - 部分更新)。

+0

这实际上是一种很好的做法,但问题是我不确定如何取消链接单个项目。 – Forest

+0

事实上,这种方法是不可能的,除非事先''获取'File'资源,这样你就可以获得有关它与其他资源的关联的信息。然后,即使感觉笨重,您的初始设计也更适合这种情况。 –

+0

Damnit。我会仔细审视两者,以及我正在研究的其他一些API,然后决定什么效果最好。 – Forest