Продолжаем серию постов об особенностях использования протокола OData (см. предыдущий пост).

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)


  1. m08pvv
    21.07.2015 13:50
    +1

    А где здесь хитрости? Просто выдержка из кусочка от стандарта.


  1. 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.

    Это как то не сразу понятно


  1. FractalizeR
    21.07.2015 14:40
    +4

    Мне кажется, заметка такого объема не тянет на статью на Хабре все-таки.


  1. databoom Автор
    21.07.2015 14:47

    Спасибо за замечание — в следующей опишем больше всяких хитростей — про связи между объектами и про возможности добавления объектов со связями и массивами других объектов


  1. 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

    Сама ссылка корректная.


    1. drakmail
      21.07.2015 17:18

      Да, сам уже пару раз столкнулся с опечатками на сайте. Еще очень интересны были бы материалы на обновление вложенных/связанных полей


    1. databoom Автор
      21.07.2015 17:36

      спасибо огромное за замечание