- PVSM.RU - https://www.pvsm.ru -
В дискуссии к предыдущей [1]статье dezconnect [2]поднял интересный вопрос о возможностях OData выполнять рекурсивные запросы (по аналогии с SQL CTE).
В документации OData [3] в разделе 11.2.4.2 описывается опция запроса $expand. Эта опция позволяет получать объекты вместе со связанными объектами. Например, Вы можете получить данные о компании вместе со всеми данными о ее президенте:
http://nitrosdata.com/service/testdb/company(company1)?$expand=president [4]
Без опции $expand результат будет включать только id президента компании (или ссылку при других настройках).
http://nitrosdata.com/service/testdb/company(company1) [5]
В 4й версии OData существенно расширены возможности опции $expand для выполнения рекурсивных запросов.
Например, у человека есть друзья, у них в свою очередь тоже есть друзья и мы хотим получить все дерево друзей. Чтобы легче было писать такие рекурсивные запросы OData вводит дополнительную опцию $level, определяющую глубину рекурсии:
http://yourhost/service/yourdatabase/person(1)?$expand=friends($level=2)
Данный запрос построит дерево (по связи friends) на глубину = 2.
Возможно задать поиск без ограничения глубины рекурсии, указав $levels=max.
Но в этом случае возникает проблема циклических связей. Стандарт не оговаривает, что должно происходить при наличии циклических связей – поэтому в этом случае следует ограничить глубину рекурсии конкретным значением.
Автор: NitrosData
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/83654
Ссылки в тексте:
[1] предыдущей : http://habrahabr.ru/post/250913/
[2] dezconnect : http://habrahabr.ru/users/dezconnect/
[3] документации OData: http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html
[4] http://nitrosdata.com/service/testdb/company(company1)?$expand=president: http://nitrosdata.com/service/testdb/company(company1)?$expand=president
[5] http://nitrosdata.com/service/testdb/company(company1): http://nitrosdata.com/service/testdb/company(company1)
[6] Источник: http://habrahabr.ru/post/251185/
Нажмите здесь для печати.