Я пытаюсь разработать REST API, который поддерживает обновления в поле коллекции объекта.
У меня есть два связанных объекта: Пользователи и Группы (группа содержит список пользователей).API GET поддерживают фильтрацию и разбиение на страницы, например:
GET /users?start=0&count=5&filter=name LIKE '%admin%'
Вышеприведенный API вернет первые 5 пользователей с именем «admin» (фильтр похож на vert SQL), и ответ будетчто-то вроде:
{
"start":0,
"count":5,
"total":100,
"data": [
{
"id":"1",
"name":"admin_1"
},
{
"id":"2",
"name":"admin_2"
},
{
"id":"3",
"name":"admin_3"
},
{
"id":"4",
"name":"admin_4"
},
{
"id":"5",
"name":"admin_5"
},
]
}
API для просмотра сведений о группе пользователей будет выглядеть следующим образом:
GET /groups/1
Ответ:
{
"id":1,
"name": "All admins",
"users":{
"start":0,
"count":5,
"total":100,
"data": [
{
"id":"1",
"name":"admin_1"
},
{
"id":"2",
"name":"admin_2"
},
{
"id":"3",
"name":"admin_3"
},
{
"id":"4",
"name":"admin_4"
},
{
"id":"5",
"name":"admin_5"
},
]
}
}
Если кто-то захочетувидеть больше, чем первые 5 пользователей группы (групп), которых он вызовет API
GET /groups/1/users?start=5&count=20
Ответ будет аналогичен API / users.
Теперь я хочу реализовать API, который позволит вызывающей стороне добавлять пользователей в группу, не зная их индивидуальных идентификаторов.Вместо этого используйте фильтр для их добавления (например, добавьте в группу всех пользователей, у которых в имени указано «Jon»).
Как бы выглядел такой API?
Мое предложение на данный момент состоит в следующем:
POST /groups/2/users
Со следующим телом:
{
"filter":"name LIKE '%JON%'
}
Для этого я не уверен, как будет выглядеть тело ответа?
Должен ли я вернуть всех добавленных пользователей в ответ (может вернуть 10 000 пользователей).
Должен ли я вернуться на "первую" страницуответ (первые 5 добавленных пользователей)?В таком случае, как вызывающий API должен знать, как проверить следующую страницу добавленных пользователей?Должен ли он позвонить GET
/groups/2/users?filter=name LIKE '%JON%'
?Если так, как я мог позволить ему провести различие между ранее присутствовавшими пользователями, уважающими фильтры, и вновь добавленными?
- Или, может быть, я должен использовать совершенно другой подход?
Я просмотрел много рекомендаций о том, как этого можно достичь, кажется, никто не пытался это сделать, или, может быть, я смотрю в неправильных местах.
Спасибо.