Как стать автором
Обновить
0

OData REST API и рекурсивные запросы

Время на прочтение1 мин
Количество просмотров8.7K
В дискуссии к предыдущей статье dezconnect поднял интересный вопрос о возможностях OData выполнять рекурсивные запросы (по аналогии с SQL CTE).

В документации OData в разделе 11.2.4.2 описывается опция запроса $expand. Эта опция позволяет получать объекты вместе со связанными объектами. Например, Вы можете получить данные о компании вместе со всеми данными о ее президенте:
https://samples.databoom.space/api1/sampledb/collections/companies(company1)?$expand=president

Без опции $expand результат будет включать только id президента компании (или ссылку при других настройках).
https://samples.databoom.space/api1/sampledb/collections/companies(company1)

В 4й версии OData существенно расширены возможности опции $expand для выполнения рекурсивных запросов.

Например, у человека есть друзья, у них в свою очередь тоже есть друзья и мы хотим получить все дерево друзей. Чтобы легче было писать такие рекурсивные запросы OData вводит дополнительную опцию $level, определяющую глубину рекурсии:

http://yourhost/service/yourdatabase/person(1)?$expand=friends($level=2)

Данный запрос построит дерево (по связи friends) на глубину = 2.

Возможно задать поиск без ограничения глубины рекурсии, указав $levels=max.
Но в этом случае возникает проблема циклических связей. Стандарт не оговаривает, что должно происходить при наличии циклических связей – поэтому в этом случае следует ограничить глубину рекурсии конкретным значением.
Теги:
Хабы:
Всего голосов 9: ↑8 и ↓1+7
Комментарии0

Публикации

Информация

Сайт
databoom.space
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия

Истории