@nakonechnikistryi

Какие данные должны возвращать GET-запросы к вложенным ресурсам в rest api?

Имеется вложенная структура ресурсов (Организация -> Департаменты -> Сотрудники):

/organizations/{organizationId}/departments/{departmentId}/employees/{employeeId}/


Я полагаю, что когда я запрошу список всех организаций, то получу, помимо основной информации о каждой конкретной организации, также и списки департаметов (иначе как я получу идентификаторы департаментов):

GET /organizations/

[
  {
    id: string,
    ...,
    departments: [
      {
        // Вот тут у меня возникает вопрос
        ...,
      }
    ],
  }
]


Вот тут у меня возникает вопрос. Если я получаю информацию о департаментах, то зачем мне собственно роут GET /organizations/{organizationId}/departments/ , в котором будет содержаться тоже самое (+ информация об employees)? Мне кажется, что я чего-то не понимаю здесь.

Получается что можно просто оставить один GET-роут GET /organizations/ , который будет возвращать все сразу: и список департаментов, список сотрудников, а остальные роуты с вложенностью нужны только для остальных CRUD (без буквы "R") операций. Правильно ли это?
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@romicohen
Системный Архитектор
Смотри, такие роуты

/organizations/{organizationId}/departments/{departmentId}/employees/{employeeId}

(обычно без слэша на конце) используют когда речь идет о древовидной иерархии.

Т.е. когда у тебя для одной организации /organizations/{organizationId} есть один или более департаментов, и для каждого департамента /organizations/{organizationId}/departments/{departmentId} есть один и более эмплоеров.

По идее, ты можешь получить всё дерево целиком:

GET /departments

даже не вопрос :) А можешь на этот же роут отдавать не дерево, а простой список айдишников организаций. Тут в зависимости от твоих целей.

А можешь так:

GET /departments?mode=list (список аудишников)

GET /departments?mode=tree (всё дерево)

вот это:

GET /organizations/{organizationId}/departments - подразумевает что ты отдаешь все департаменты для какой-то определенной организации ({organizationId}) - то же самое, можешь списком, можешь деревом, без разницы ))

Всё зависит от потребностей фронта.

Общий принцип: не отдавать больше, чем нужно :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы