Протокол OData имеет множество скрытых достоинств (хотя и недостатков хватает). Начиная с этой статьи, мы хотели бы поделиться мелкими полезными хитростями использования протокола OData.
Все дальнейшие примеры используют следующую простую схему данных
Тестовая база выложена на сайте databoom.space
Тестовые данные можно посмотреть используя OData URL samples.databoom.space/api1/sampledb/collections/allobjects
Предположим мы хотим получить список книг, которые нравятся какому-либо человеку
Чтобы получить человека с id 'person1', мы можем написать
Чтобы получить книги, которые нравятся этому человеку, добавим к URL имя свойства likes
Теперь мы можем пойти дальше и найти все издательства, издавшие книги, которые нравятся person1
В предыдущем примере мы получали список книг, которые нравятся какому человеку с id 'person1'.
Теперь мы хотим получить всех людей которым нравится книга с id 'book2'. Обратите внимание человек через свойство likes ссылается на книги которые он любит, а книги не ссылаются на людей, которые их любят.
Чтобы получить книгу с id ‘book2’, мы можем написать
Мы не можем написать .../books(book1)/persons_who_likes — у книги нет такого свойства
Тогда мы пишем
_backlink(likes) — это как бы обратный линк для линка likes
likes — что любят
_backlink(likes) — кто любит
В некоторых реализациях OData преполагается что разработчик должен завести псевдо свойство поименованное например persons_who_likes и самостоятельно написать обработчик таких запросов. Оператор _backlink не входит в стандарт, но может иногда существенно упростить работу.
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
В следующем посте мы расскажем, как отфильтровать объекты с учетом их взаимосвязей.
Все дальнейшие примеры используют следующую простую схему данных
- persons
- books
- companies
person properties:
|
book properties:
|
company properties:
|
Тестовая база выложена на сайте databoom.space
Тестовые данные можно посмотреть используя OData URL samples.databoom.space/api1/sampledb/collections/allobjects
1. Как получить массив объектов, на которые кто-то ссылается
Предположим мы хотим получить список книг, которые нравятся какому-либо человеку
Чтобы получить человека с id 'person1', мы можем написать
.../persons(person1)
Чтобы получить книги, которые нравятся этому человеку, добавим к URL имя свойства likes
.../persons(person1)/likes
Теперь мы можем пойти дальше и найти все издательства, издавшие книги, которые нравятся person1
.../persons(person1)/likes/publisher
2. Как получить массив объектов которые на кого-то ссылаются
В предыдущем примере мы получали список книг, которые нравятся какому человеку с id 'person1'.
Теперь мы хотим получить всех людей которым нравится книга с id 'book2'. Обратите внимание человек через свойство likes ссылается на книги которые он любит, а книги не ссылаются на людей, которые их любят.
Чтобы получить книгу с id ‘book2’, мы можем написать
.../books(book2)
Мы не можем написать .../books(book1)/persons_who_likes — у книги нет такого свойства
Тогда мы пишем
.../books(book1)/_backlink(likes)
_backlink(likes) — это как бы обратный линк для линка likes
likes — что любят
_backlink(likes) — кто любит
В некоторых реализациях OData преполагается что разработчик должен завести псевдо свойство поименованное например persons_who_likes и самостоятельно написать обработчик таких запросов. Оператор _backlink не входит в стандарт, но может иногда существенно упростить работу.
Если Вас заинтересовал данный пост, Вы можете также посмотреть нашу документацию и примеры использования REST API, а также примеры с использованием JavaScript библиотеки
В следующем посте мы расскажем, как отфильтровать объекты с учетом их взаимосвязей.