В вычислениях , Open Data Protocol ( OData ) является открытым протоколом , который позволяет создавать и потребление Queryable и совместимый REST API , простой и стандартный способ. Microsoft инициировала OData в 2007 году. [1] Версии 1.0, 2.0 и 3.0 выпущены в рамках Microsoft Open Specification Promise . Версия 4.0 была стандартизирована в OASIS , [2] с выпуском в марте 2014 года [3] В апреле 2015 OASIS представил OData v4 и OData JSON Формат v4 в ISO / IEC JTC 1 для утверждения в качестве международного стандарта. [4]
Протокол позволяет создавать и использовать REST API, которые позволяют веб-клиентам публиковать и редактировать ресурсы, идентифицированные с помощью URL-адресов и определенные в модели данных , с использованием простых HTTP-сообщений. OData имеет некоторые общие черты с JDBC и ODBC ; как и ODBC, OData не ограничивается реляционными базами данных .
Стандартизация [ править ]
После первоначальной разработки Microsoft OData стала стандартизированным протоколом Технического комитета OData OASIS.
Технический комитет OASIS OData [ править ]
«OASIS OData TC упрощает запросы и обмен данными между разрозненными приложениями и несколькими заинтересованными сторонами для повторного использования на предприятии, в облаке и на мобильных устройствах. Протокол на основе REST, OData строится на HTTP , AtomPub и JSON с использованием URIдля адресации и доступа к ресурсам фида данных. Он обеспечивает доступ к информации из различных источников, включая (но не ограничиваясь) реляционные базы данных, файловые системы, системы управления контентом и традиционные веб-сайты. OData предоставляет способ разрушить разрозненные хранилища данных и повысить общую ценность данных за счет создания экосистемы, в которой потребители данных могут взаимодействовать с производителями данных гораздо более мощным способом, чем это возможно в настоящее время, что позволяет большему количеству приложений осмыслить более широкий кругозор. набор данных. Каждый производитель и потребитель данных, который участвует в этой экосистеме, увеличивает ее общую ценность » [5].
В число участников TC входят CA Technologies , Citrix Systems , IBM , Microsoft , Progress Software , Red Hat , SAP SE и SDL .
Архитектура [ править ]
OData - это протокол для создания и использования RESTful API. Таким образом, как обычная практика REST, OData основывается на HTTP, AtomPub и JSON, используя URI для адресации и доступа к ресурсам канала данных.
Идентификация ресурса [ править ]
OData использует URI для идентификации ресурсов. Для каждой службы OData, корень службы которой сокращен как http: // host / service / , можно найти следующие фиксированные ресурсы:
Сервисный документ [ править ]
В служебном документе перечислены наборы сущностей, функции и отдельные объекты, которые могут быть извлечены. Клиенты могут использовать служебный документ для навигации по модели в режиме гипермедиа.
Сервисный документ доступен по адресу http: // host / service / .
Документ метаданных [ править ]
Документ метаданных описывает типы, наборы, функции и действия, понятные службе OData. Клиенты могут использовать документ метаданных, чтобы понять, как запрашивать объекты в службе и взаимодействовать с ними.
Документ метаданных доступен по адресу http: // host / service / $ metadata .
Динамические ресурсы [ править ]
URI для динамических ресурсов могут быть вычислены из информации гипермедиа в служебном документе и документе метаданных.
Операция с ресурсами [ править ]
OData использует команды HTTP для обозначения операций с ресурсами.
- GET: получить ресурс (набор сущностей, отдельную сущность, структурное свойство, свойство навигации, поток и т. Д.).
- POST: создайте новый ресурс.
- PUT: обновить существующий ресурс, заменив его полным экземпляром.
- ПАТЧ: обновите существующий ресурс, заменив часть его свойств частичным экземпляром.
- УДАЛИТЬ: удалить ресурс.
Представление ресурса [ править ]
OData использует разные форматы для представления данных и модели данных. В протоколе OData версии 4.0 формат JSON является стандартом для представления данных, а формат Atom все еще находится на стадии спецификации комитета. Для представления модели данных используется язык определения общей схемы (CSDL), который определяет XML-представление модели данных сущности, предоставляемой службами OData.
Пример полезной нагрузки данных OData JSON [ править ]
Коллекция товаров:
{ "@ odata.context" : "http://services.odata.org/V4/OData/OData.svc/$metadata#Products" , "value" : [ { "ID" : 0 , "Name" : " Meat " , " Description " : " Red Meat " , " ReleaseDate " : " 1992-01-01T00: 00: 00Z " , " DiscontinuedDate " : null , " Рейтинг " : 14 , " Цена " : 2.5 }, { " ID " : 1 , «Имя» : «Молоко» , "Описание" : "Обезжиренное молоко" , " Дата выпуска " : "1995-10-01T00: 00: 00Z" , "Дата прекращения" : null , "Рейтинг" : 3 , "Цена" : 3.5 }, ... ] }
Пример полезной нагрузки данных OData Atom [ править ]
Коллекция товаров:
<feed xml: base = "http://services.odata.org/V4/OData/OData.svc/" m: context = "http://services.odata.org/V4/OData/OData.svc/$ метаданные # Продукты " xmlns = " http://www.w3.org/2005/Atom " xmlns: d = " http://docs.oasis-open.org/odata/ns/data " xmlns: m = " http : //docs.oasis-open.org/odata/ns/metadata " xmlns: georss = " http://www.georss.org/georss " xmlns: gml = " http://www.opengis.net/gml " > <id> http://services.odata.org/v4/odata/odata.svc/Products </id> <title type = "text" > Продукты </title> <updated> 2015-05-19T03: 38: 50Z </updated> <link rel = "self" title = "Products" href = "Products" /> <запись> <id> http://services.odata.org/V4/OData/OData.svc/Products(0) </id> <category term = "# ODataDemo.Product" scheme = "http://docs.oasis-open.org/odata/ns/scheme" /> <link rel = "edit" title = "Product" href = "Товары (0)" /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type = "application / xml" title = "Categories" href = "Products (0) / Categories / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/Categories" type = "application / atom + xml; type = feed" title = "Категории" href = "Продукты (0) / Категории " /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type = "application / xml" title = "Supplier" href = "Products (0) / Supplier / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/Supplier" type = "application / atom + xml; type = entry" title = "Supplier" href = "Товары (0) / Поставщик " /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail" type = "application / xml" title = "ProductDetail" href = "Products (0) / ProductDetail / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/ProductDetail" type = "application / atom + xml; type = entry" title = "ProductDetail" href = "Продукты (0) / ProductDetail " /> <название /> <updated> 2015-05-19T03: 38: 50Z </updated> <author> <имя /> </author> <content type = "application / xml" > <м: свойства> <d: ID m: type = "Int32" > 0 </ d: ID> <d: Name> Хлеб </ d: Name> <d: Description> Цельнозерновой хлеб </ d: Description> <d: ReleaseDate m: type = "DateTimeOffset" > 1992-01-01T00: 00: 00Z </ d: ReleaseDate> <d: DiscontinuedDate m: null = "true" /> <d: Рейтинг m: type = "Int16" > 4 </ d: Рейтинг> <d: Price m: type = "Double" > 2,5 </ d: Price> </ m: properties> </content> </entry> <запись> <id> http://services.odata.org/V4/OData/OData.svc/Products(1) </id> <category term = "# ODataDemo.Product" scheme = "http://docs.oasis-open.org/odata/ns/scheme" /> <link rel = "edit" title = "Product" href = "Products (1)" /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type = "application / xml" title = "Categories" href = "Products (1) / Categories / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/Categories" type = "application / atom + xml; type = feed" title = "Категории" href = "Продукты (1) / Категории " /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type = "application / xml" title = "Supplier" href = "Products (1) / Supplier / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/Supplier" type = "application / atom + xml; type = entry" title = "Supplier" href = "Продукты (1) / Поставщик " /> <link rel = "http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail" type = "application / xml" title = "ProductDetail" href = "Products (1) / ProductDetail / $ ref" /> <link rel = "http://docs.oasis-open.org/odata/ns/related/ProductDetail" type = "application / atom + xml; type = entry" title = "ProductDetail" href = "Продукты (1) / ProductDetail " /> <название /> <updated> 2015-05-19T03: 38: 50Z </updated> <author> <имя /> </author> <content type = "application / xml" > <м: свойства> <d: ID m: type = "Int32" > 1 </ d: ID> <d: Name> Молоко </ d: Name> <d: Description> Нежирное молоко </ d: Description> <d: ReleaseDate m: type = "DateTimeOffset" > 1995-10-01T00: 00: 00Z </ d: ReleaseDate> <d: DiscontinuedDate m: null = "true" /> <d: Рейтинг m: type = "Int16" > 3 </ d: Рейтинг> <d: Price m: type = "Double" > 3,5 </ d: Price> </ m: properties> </content> </entry> ...</feed>
Образец документа метаданных OData [ править ]
<edmx: Edmx Version = "4.0" xmlns: edmx = "http://docs.oasis-open.org/odata/ns/edmx" > <edmx: DataServices> <Schema Namespace = "ODataDemo" xmlns = "http://docs.oasis-open.org/odata/ns/edm" > <EntityType Name = "Продукт" > <Ключ> <PropertyRef Name = "ID" /> </Key> <Property Name = "ID" Type = "Edm.Int32" Nullable = "false" /> <Property Name = "Name" Type = "Edm.String" /> <Property Name = "Description" Type = "Edm.String" /> <Property Name = "ReleaseDate" Type = "Edm.DateTimeOffset" Nullable = "false" /> <Property Name = "DiscontinuedDate" Type = "Edm.DateTimeOffset" /> <Property Name = "Рейтинг" Type = "Edm.Int16" Nullable = "false" /> <Property Name = "Price" Type = "Edm.Double" Nullable = "false" /> </EntityType> <ComplexType Name = "Адрес" > <Property Name = "Street" Type = "Edm.String" /> <Property Name = "City" Type = "Edm.String" /> <Property Name = "State" Type = "Edm.String" /> <Property Name = "ZipCode" Type = "Edm.String" /> <Property Name = "Country" Type = "Edm.String" /> </ComplexType> <EntityContainer Name = "DemoService" > <EntitySet Name = "Products" EntityType = "ODataDemo.Product" > </EntitySet> </EntityContainer> </Schema> </ edmx: DataServices></ edmx: Edmx>
Экосистема [ править ]
Использование внешних ссылок в этом разделе может не соответствовать политикам или рекомендациям Википедии . Октябрь 2015 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Экосистема OData состоит из клиент-серверных библиотек, реализующих протокол, и приложений, основанных на этом протоколе.
Библиотеки [ править ]
Существует ряд библиотек OData, доступных для доступа / создания API OData:
.NET [ править ]
- Сервер и клиент: библиотеки Microsoft OData .NET [6]
- Клиент: Simple.OData.Client [7]
Java [ править ]
- Сервер и клиент: Apache Olingo [8]
- На стороне сервера: Jello-Framework [9]
- Клиент: odata-client [10]
JavaScript [ править ]
- Клиент: Apache Olingo [11] (представлен OASIS [12] )
- Клиент: data.js [13]
- Клиент: JayData [14] для более высокого уровня абстракции (синтаксис, подобный LINQ, поддержка функций OData geo, IndexedDB, WebSQL, интеграция с DevExtreme, Kendo UI, Angular.js, Knockout.js и Sencha).
- Клиент: библиотека OpenUI5, поддерживаемая SAP
- Клиент (Node.js): JayData для узла [15]
- Клиент: Бриз [16]
- Клиент: OData4 и Invantive Bridge Online [17]
- Сервер: node-odata [18]
PHP [ править ]
- Клиент: odataphp [19]
- Сервер: POData [20]
Python [ править ]
- Клиент: PyOData [21]
- Сервер и клиент: Pyslet [22]
Руби [ править ]
- Клиент: библиотека ruby_odata [23]
- Клиент: Бесплатная библиотека OData V4.0 для Ruby [24]
- Сервер: Safrano [25]
Другое [ править ]
Другие реализованные языки включают: [26]
- AJAX: библиотека ASP.NET Ajax [27] для доступа к OData.
- C ++: odatacpp_client [28] - это клиентская реализация протокола OData.
- Windward Studios [29] поддерживает OData в своих решениях для создания отчетов и создания документов.
- Инструмент отчетности List & Label имеет специализированного поставщика данных для OData.
- Blackberry (C ++): OData-BB10 [30] библиотека Open Data Protocol (OData) для каскадных приложений BlackBerry 10 (BB10)
Приложения [ править ]
Приложения включают: [31]
- Progress DataDirect Hybrid Data Pipeline [32] может предоставлять любые облака, большие данные или реляционные источники данных в качестве конечных точек OData.
- Socrata предоставляет API OData .
- Microsoft Azure предоставляет API OData .
- SAP NetWeaver Gateway [33] обеспечивает доступ OData к SAP Business Suite и SAP Business Warehouse.
- Доступ к службе данных REST IBM WebSphere eXtreme Scale может получить любой HTTP-клиент, использующий oData. [34]
- Microsoft SharePoint 2010 и более поздние версии могут предоставлять свои данные как конечную точку OData.
- Office 365 предоставляет API-интерфейсы OData V4.0. [35]
- Salesforce Lightning Connect использует API-интерфейсы OData. [36]
- Skyvia Connect [37] предоставляет данные из облака и базы данных через OData
- Tableau может подключаться к API OData. [38]
- TIBCO Spotfire может подключаться к API OData. [39]
- Mulesoft [40] помогает интегрироваться с API OData. [41]
- SuccessFactors [42] использует API-интерфейсы Odata.
- Dayforce Ceridian HCM [43] использует Odata [44]
- Redfish использует Odata [45]
Инструменты [ править ]
- Мастер базы данных Nucleon [46]
См. Также [ править ]
- GData - конкурирующий протокол от Google
- Resource Description Framework (RDF) - аналогичная концепция от W3C
- GraphQL
Ссылки [ править ]
- ^ "Добро пожаловать!" . Блоги MSDN . Команда OData.
- ^ "Технический комитет OASIS Open Data Protocol (OData)" . Проверено 5 августа 2013 .
- ^ «OASIS утверждает стандарты OData 4.0 для открытого программируемого Интернета» . oasis-open.org .
- ^ «OASIS представил OData v4 и OData JSON Format v4 в ISO / IEC JTC 1 для утверждения в качестве международного стандарта» . MS Open Tech . Архивировано из оригинала на 2015-05-20 . Проверено 18 мая 2015 .
- ^ "Протокол открытых данных OASIS (OData) TC | OASIS" . www.oasis-open.org . Проверено 24 сентября 2019 года .
- ^ Библиотеки Microsoft OData .NET
- ^ Simple.OData.Client
- ^ Апач Олинго
- ^ Jello-Framework
- ^ odata-клиент
- ^ Апач Олинго
- ^ «Библиотеки · OData - лучший способ REST» . www.odata.org . Проверено 19 февраля 2019 .
- ^ "data.js" . Архив CodePlex .
- ^ JayData
- ^ JayData для узла
- ^ Бриз
- ^ OData4 и Invantive Bridge Online
- ^ узел-одата
- ^ одатафп
- ^ POData
- ^ PyOData
- ^ Пислет
- ^ библиотека ruby_odata
- ^ Бесплатная библиотека OData V4.0 для Ruby
- ^ Сафрано
- ^ «Библиотеки» . odata.org .
- ^ Библиотека ASP.NET Ajax
- ^ odatacpp_client
- ^ Windward Studios
- ^ OData-BB10
- ^ «Экосистема» . odata.org .
- ^ Progress DataDirect Гибридный конвейер данных
- ^ «SAP NetWeaver Gateway» . Проверено 22 ноября 2012 .
- ^ Служба данных REST IBM developerWorks eXtreme Scale (OData)
- ^ «Добро пожаловать в API Office 365» . docs.microsoft.com . Проверено 24 сентября 2019 года .
- ^ «Salesforce Lightning Connect и OData» .
- ^ Skyvia Connect
- ^ "OData - Таблица" . help.tableau.com . Проверено 24 сентября 2019 года .
- ^ "OData и Spotfire" . Блог TIBCO . Проверено 30 марта 2016 .
- ^ Mulesoft
- ^ «Anypoint Exchange» . www.mulesoft.com . Проверено 24 сентября 2019 года .
- ^ SuccessFactors
- ^ Дневная сила Ceridian HCM
- ^ "Программное обеспечение для составления отчетов HR - Dayforce | Ceridian" . www.ceridian.com . Проверено 24 сентября 2019 года .
- ^ «Что нужно знать о API-интерфейсе Redfish» . Exxact . 2017-12-01 . Проверено 31 августа 2019 .
- ^ "Мастер базы данных Nucleon" . Проверено 16 ноября 2017 года .
Внешние ссылки [ править ]
- OData.org (официальный сайт)
- Протокол открытых данных на примере
- Презентация по основам OData
Стандарты OData OASIS [ править ]
- OData версии 4.0, часть 1: протокол
- OData версии 4.0, часть 2: Соглашения об URL-адресах
- OData версии 4.0, часть 3: язык определения общей схемы (CSDL)
- Компоненты ABNF - правила построения OData ABNF версии 4.0 и тестовые примеры OData ABNF
- Компоненты словаря - словарь OData Core и словарь OData Measures
- XML-схемы - XML-схема OData EDMX и XML-схема OData EDM
- Формат OData JSON версии 4.0
Спецификации комитета [ править ]
- Формат OData Atom версии 4.0
- Расширение OData для агрегирования данных версии 4.0
Заметки Комитета [ править ]
- Что нового в OData версии 4.0