Pull to refresh
0

OData REST API — мелкие хитрости (часть 1)

Reading time 2 min
Views 13K
Протокол OData имеет множество скрытых достоинств (хотя и недостатков хватает). Начиная с этой статьи, мы хотели бы поделиться мелкими полезными хитростями использования протокола OData.

Все дальнейшие примеры используют следующую простую схему данных

  • persons
  • books
  • companies

person properties:

  • id (string)
  • firstname (string)
  • lastname (string)
  • age (number)
  • likes (list of books)

book properties:

  • id (string)
  • title (string)
  • author (list of persons)
  • publisher (a company)

company properties:

  • id (string)
  • name (string)
  • president (person)


Тестовая база выложена на сайте 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 библиотеки

В следующем посте мы расскажем, как отфильтровать объекты с учетом их взаимосвязей.
Tags:
Hubs:
+4
Comments 18
Comments Comments 18

Articles

Information

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