Как правильно связывать / разобщать записи во многих отношениях в REST API? - PullRequest
0 голосов
/ 24 июня 2018

Я создаю простой REST API, в котором есть пользователи и сообщества.

User сущность имеет отношения многие ко многим с Community.
Пользователь может иметь членство в нескольких сообществах, а сообщества могут иметь несколько пользователей.

Конечной точкой для создания пользователя и назначения его для определенного сообщества является следующая:

POST /communities/5/users

Когда я хочу удалить пользователя и отделить его от определенного сообщества, я использую это:

DELETE /communities/5/users/8

Вопрос в том, как спроектировать конечную точку для объединения пользователей в сообщества и надлежащего выхода из них (без удаления пользователей)?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Вопрос в том, как спроектировать конечную точку для объединения пользователей в сообщества и надлежащего выхода из них (без удаления пользователей)?

Как бы вы это сделали?с веб-сайтом?

Например: вы можете решить, что пользователь может выбрать членство в своей группе.Таким образом, вы дадите пользователю веб-страницу с описанием групп, к которым он принадлежит.Может быть, эта страница содержит форму с кучей флажков, и пользователь может снять флажки для групп, к которым он больше не хочет принадлежать, а затем отправить форму.

Для API REST ..сделать то же самое.

0 голосов
/ 24 июня 2018

Поскольку пользователи могут входить во многие сообщества или не участвовать в них, имеет смысл рассматривать пользователей как ресурс, независимый от сообщества.Создайте их с помощью POST /users и удалите их из системы с помощью DELETE /users/:id.

То же самое для сообществ.Создайте их с помощью POST /communities и удалите их с помощью DELETE /communities/:id.

Теперь вы можете добавлять пользователей в сообщество по POST /communities/:id/users, где полезная нагрузка содержит идентификатор пользователя, которого вы хотите добавить.Вы можете удалить пользователя из сообщества с помощью DELETE communities/:id/users/:userid.

Каждый объект сообщества может иметь либо ссылку на URL для получения своих пользователей (/communities/:id/users), либо включить пользователей в сам объект.

В качестве альтернативы у вас может быть ресурс membership, чтобы связать сообщество и его пользователей.Это может быть интересно, если само членство имеет другие свойства, кроме идентификатора сообщества и идентификатора пользователя.

...