Pull to refresh
0

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

Reading time1 min
Views8.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.
Но в этом случае возникает проблема циклических связей. Стандарт не оговаривает, что должно происходить при наличии циклических связей – поэтому в этом случае следует ограничить глубину рекурсии конкретным значением.
Tags:
Hubs:
+7
Comments0

Articles

Information

Website
databoom.space
Registered
Founded
Employees
11–30 employees
Location
Россия