1

グループとユーザーを整理する REST サービスを設計しています。

例: GET /groups - すべてのグループを取得します GET /groups/1 - 特定のグループを取得します GET /groups/1/users - グループ内のユーザーを取得します GET /users/1 - 実際のユーザー。 groups POST /groups/1/users - user_id=1 の post パラメーターを使用して、ユーザーをグループに追加します

これを処理する適切な方法は何でしょうか? DELETE /groups/1/users/1 はそれを行う有効な方法のようですが、同じ URL への GET は、リソース /user/1 の複製であるユーザー レコードを返しますか?

または、DELETE /groups/1/users?user_id=1 にする必要がありますか?

これを行うための最もRESTfulな方法はどれか疑問に思っています。

4

1 に答える 1

1

良い設計とは、特定のグループ内のユーザーのメンバーシップを別のリソースとして明示することだと思います。したがって、グループ、ユーザー、およびグループ内のユーザーのメンバーシップがあります。

したがって、GET /groups/1/usersメンバーシップ リソース識別子のリストが返さ/groups/1/users/{member_id}れますDELETE。もちろん、これらの「メンバーシップ」はそれぞれ特定のユーザーに関連付けられているため、どのメンバーシップがどのmember_idに関連付けられているかを何らかの形で知る必要がありuser_idます。これを行う最も簡単な方法は、質問で提案しているようにmember_id、 と同じセマンティクスを持つようにすることです (つまり、 「グループ 1 のユーザー 1 のメンバーシップ」を意味します)。その後、 で GET を実行すると、にリダイレクトできます。または、より複雑な例では、このリソースはユーザーにリダイレクトされず、ユーザーにリンクされ、ユーザーがグループに参加した日付、グループでのステータスなど、他の情報も含まれます。user_id/groups/1/users/1/groups/1/users/{member_id}/users/{user_id}

私が考えることができる他のオプションは、PATCH メソッドを利用してコレクション リソースを変更することです ( /groups/1/users): https://www.rfc-editor.org/rfc/rfc5023を参照してください。しかし、DELETE を使用する方がより自然に思えます。

于 2012-09-19T19:14:41.383 に答える