2016-08-13 10 views
2

私は現在、3種類のデータを持つアプリケーションのAPIを作成しています。 Files,TagsおよびPersonsである。これらはすべて日常的にリンクされています。 Fileには、多くの場合、TagsPersonsが添付されています。多対多リレーションシップのためのRESTfulなAPIの構造

問題は、RESTful APIを使用して実際に接続する方法がわかりません。 PersonsTagsFileに不可欠なので、それ以上の要求はなく自動的に返されます。

ここで私はFilesのために、今で探していた構造の例です:

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

そしてTags用:

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

そしてPersons用:

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

として、あなたが見ることができます、彼らはまったく同じ、intentio私のAPIを簡単に文書化することができます。しかし、多対多の関係では、TagまたはPersonFileにリンクする方法はわかりません。

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

をしかし、それは少し不格好なようだ:

は、私はこれを検討していました。

自分の状況に適した構造は何ですか?

答えて

1

これらはすべて日常的にリンクされています。ファイルには多くのタグと人物が添付されています。

その後PATCH /files/:idエンドポイントは良い場所のように思える:

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

これはの点である(PersonsTagsFile関連付けを更新し、そのままファイルのその他のプロパティを残してPATCH動詞 - 部分的な更新)。

+0

これは実際にそれを行う良い方法ですが、問題はそのように1つのアイテムをリンク解除する方法がわかりません。 – Forest

+0

実際には 'File'リソースを' GET'しないと、他のリソースとの関連性についての情報を持っていない限り、このアプローチではこれを行うことはできません。そうすれば、最初のデザインは、このような状況に適しています。 –

+0

ダムニット。私は両方を非常に慎重に見ていき、私が調べていた他のいくつかのAPIで、何が最もうまくいくかを決めます。 – Forest

関連する問題