Продолжаем серию постов об особенностях использования протокола OData (см. предыдущий пост).
Предположим мы хотим получить список людей, которым нравится книга с названием (свойство title) 'book36' (такие смешные названия книг у нас в примере)
Чтобы получить всех людей мы можем написать
Легко отфильтровать данные по свойствам объектов. Например, чтобы отфильтровать людей по возрасту (person имеет свойство age):
Но как отфильтровать по полю другого объекта, например, по названию книги, которая нравится человеку? Очень просто: человек имеет свойство likes ссылающееся на книги, а книга имеет свойство title — мы можем написать likes/title
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
В следующем посте мы расскажем про добавление сложных объектов вместе со связанными объектами и про добавление массивов объектов.
3. Как отфильтровать объекты с учетом их взаимосвязей
Предположим мы хотим получить список людей, которым нравится книга с названием (свойство title) 'book36' (такие смешные названия книг у нас в примере)
Чтобы получить всех людей мы можем написать
.../persons
Легко отфильтровать данные по свойствам объектов. Например, чтобы отфильтровать людей по возрасту (person имеет свойство age):
.../persons?$filter=age gt 30 — все люди в возрасте > 30 лет
Но как отфильтровать по полю другого объекта, например, по названию книги, которая нравится человеку? Очень просто: человек имеет свойство likes ссылающееся на книги, а книга имеет свойство title — мы можем написать likes/title
.../persons?$filter=likes/title eq 'book36'
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
В следующем посте мы расскажем про добавление сложных объектов вместе со связанными объектами и про добавление массивов объектов.
Комментарии (7)
databoom Автор
21.07.2015 14:35Вот выдержка из стандарта:
Any resource path or path expression identifying a single entity or complex type instance can be appended with a path segment containing the qualified name of a type derived from the declared type of the identified resource. If used in a resource path and the identified resource is not an instance of the derived type, the request will result in a 404 Not Found response. If used in a path expression that is part of a Boolean expression, the type cast will evaluate to null.
Это как то не сразу понятно
FractalizeR
21.07.2015 14:40+4Мне кажется, заметка такого объема не тянет на статью на Хабре все-таки.
databoom Автор
21.07.2015 14:47Спасибо за замечание — в следующей опишем больше всяких хитростей — про связи между объектами и про возможности добавления объектов со связями и массивами других объектов
marapper
21.07.2015 16:32Пройдитесь по доке на опечатки.
На первой же странице вместо
https://samples.databoom.space/api1/sampledb/collections/persons?$orderby=firstname&$top=10&$skip=10
https://samples.databoom.space/api1/sampledb/collections/persons?$orderby=firstname$top=10&$skip=10
Сама ссылка корректная.drakmail
21.07.2015 17:18Да, сам уже пару раз столкнулся с опечатками на сайте. Еще очень интересны были бы материалы на обновление вложенных/связанных полей
m08pvv
А где здесь хитрости? Просто выдержка из кусочка от стандарта.