REST API для модификации коллекций - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь разработать 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%'?Если так, как я мог позволить ему провести различие между ранее присутствовавшими пользователями, уважающими фильтры, и вновь добавленными?

  • Или, может быть, я должен использовать совершенно другой подход?

Я просмотрел много рекомендаций о том, как этого можно достичь, кажется, никто не пытался это сделать, или, может быть, я смотрю в неправильных местах.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...