2016-08-13 109 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