Протокол OData v 4.01 (экстракт)
Обзор
Протокол OData - это протокол прикладного уровня для взаимодействия с данными через интерфейсы RESTful. Протокол поддерживает описание моделей данных, изменение и получение данных в соответствии с моделью.
Предоставляет:
- Метаданные: машиночитаемое описание модели данных, предоставляемой конкретным сервисом.
- Данные: наборы объектов данных и связи между ними.
- Запрос: обращение к сервису с набором фильтров или других преобразований для данных, с последующим возвращением результата.
- Редактирование: создание, обновление и удаление данных.
- Операции: вызов пользовательской логики
- Словари: добавление пользовательской семантики.
Протокол OData отличается от других подходов на основе веб-служб REST тем, что он обеспечивает единообразный способ описания как данных, так и модели данных. Это улучшает семантическую совместимость между системами и позволяет строить экосистемы.
С этой целью протокол OData следует следующим принципам разработки:
- Предпочтительны механизмы, которые работают с различными источниками данных. В частности, не предполагается реляционная модель данных.
- Расширяемость. Сервисы должны поддерживать расширение функциональности без изменения клиентов, не подозревающих об этих расширениях.
- Следование принципам REST.
- OData следует строить постепенно. Очень простой, совместимый сервис должен быть простым в построении, а дополнительная работа необходима только для поддержки дополнительных возможностей.
- Будь проще. Решайте общие задача и предусматривайте расширяемость, где это необходимо.
Data Model
Этот раздел предоставляет высокоуровневое описание Entity Data Model (EDM - абстрактную модель данных, используемую для описания данных, предоставляемых сервисами OData. Метаданные OData являются представлением модели данных сервиса(ов), предоставляемых клиенту.
Центральными понятиями в EDM являются сущности (entities), отношения (relationships), наборы сущностей (entity sets), действия(actions) и функции(functions).
Сущность (проще объект) - это экземпляры типов объектов (например, Клиент, Сотрудник и т.д.).
Типы сущностей называются структурированными типами с ключом. Они определяют именованные свойства и отношения этой сущности. Типы сущностей могут быть получены одним наследованием от других типов сущностей. Ключ типа сущности формируется из подмножества примитивных свойств (например, CustomerId, OrderId, LineId и т. Д.) типа объекта. (По человечески: сущность - это набор полей или структура. Некоторые поля могут быть помечены как ключевые, ключ формируется комбинацией ключевых полей. Прим. ключевые поля всегда должны присутствовать в запросах).
Комплексные типы - это структурированные типы без ключей, состоящие из набора свойств. На их экземпляры нельзя ссылаться вне их содержащей сущности. Комплексные типы обычно используется в качестве значений свойств в сущности или в качестве параметров операций. Свойства, объявленные как часть определения структурированного типа, являются объявленными (прим. статическими) свойствами. Экземпляры структурированных типов могут содержать дополнительные необъявленные динамические свойства. Динамическое свойство не может иметь то же имя, что и объявленное свойство. Сущности или комплексные типы, которые позволяют клиентам сохранять дополнительные необъявленные свойства называются открытыми типами.
Отношения от одного объекта к другому представлены как свойства навигации. Свойства навигации обычно определяются как часть типа объекта, но могут также появляться в экземплярах объекта как необъявленные свойства динамической навигации. Каждое отношение имеет кардинальность.
Перечисляемые типы - это именованные примитивные типы, значения которых являются именованными целочистенными константами с целым числом.
Определения типов - это именованные примитивные типы с фиксированными значениями фасетов, таких как максимальная длина или точность. Определения типов могут использоваться вместо примитивных типизированных свойств, например, в описании свойства.
Наборы сущностей - это именованные наборы сущностей (например, Клиенты - это набор сущностей, содержащий Клиента лица). Ключ объекта однозначно идентифицирует объект в наборе объектов. Если несколько наборов сущностей используют один и тот же тип объекта, одна и та же комбинация значений ключей может появляться в нескольких наборах объектов и идентифицирует различные объекты, по одному на набор объектов, где появляется эта комбинация клавиш. Каждый из этих лиц имеет другой идентификатор объекта. Наборы сущностей обеспечивают точки входа в модель данных. Операции позволяют выполнять пользовательскую логику для частей модели данных. Функции - это операции, которые делают не имеют побочных эффектов и могут поддерживать дальнейшую композицию, например, с помощью дополнительных операций фильтрации, функции или действия. Действия - это операции, которые допускают побочные эффекты, такие как изменение данных и не может быть в дальнейшем составлен во избежание недетерминированного поведения. Действия и функции либо привязанный к типу, позволяющий вызывать их как члены экземпляра этого типа, или несвязанный, в котором В случае, если они называются статическими операциями. Импорт действий и импорт функций включают несвязанные действия и функции, вызываемые из корня службы. Синглтоны - это именованные сущности, к которым можно обращаться как к прямым потомкам контейнера сущностей. Синглтон также может быть членом набора сущностей. Ресурс OData - это что-либо в модели, к которому можно обратиться (набор сущностей, сущность, свойство или операция). Обратитесь к [OData-CSDLJSON] или [OData-CSDLXML] для получения дополнительной информации о данных объекта OData модель.