В вычислениях Open Data Protocol ( OData ) — это открытый протокол , который позволяет стандартным способом создавать и использовать запрашиваемые и совместимые API-интерфейсы веб-сервисов . Microsoft запустила OData в 2007 году. [1] Версии 1.0, 2.0 и 3.0 выпускаются в соответствии с обещанием открытой спецификации Microsoft . Версия 4.0 была стандартизирована в OASIS [2] и выпущена в марте 2014 года. [ 3] В апреле 2015 года OASIS представила OData v4 и OData JSON Format v4 в ISO/IEC JTC 1 для утверждения в качестве международного стандарта . [4] В декабре 2016 года ISO/IEC опубликовал OData 4.0 Core как ISO/IEC 20802-1:2016 [5] [6] и формат OData JSON как ISO/IEC 20802-2:2016. [7]
Протокол позволяет создавать и использовать веб-API на основе HTTP , которые позволяют веб-клиентам публиковать и редактировать ресурсы, идентифицированные с помощью URL-адресов и определенные в модели данных , с помощью простых HTTP-сообщений. OData имеет некоторое сходство с JDBC и ODBC ; Как и ODBC, OData не ограничивается реляционными базами данных .
После первоначальной разработки Microsoft OData стал стандартизированным протоколом Технического комитета OASIS OData (TC).
«OASIS OData TC помогает упростить запросы и обмен данными между разрозненными приложениями и множеством заинтересованных сторон для повторного использования на предприятии, в облаке и на мобильных устройствах. Протокол OData на основе REST основан на HTTP , AtomPub и JSON с использованием URI для адресации и доступа к ресурсам каналов данных. Он обеспечивает доступ к информации из различных источников, включая (но не ограничиваясь ими) реляционные базы данных, файловые системы, системы управления контентом и традиционные веб-сайты. OData обеспечивает способ разделения данных. разрозненности и увеличения общей ценности данных путем создания экосистемы, в которой потребители данных могут взаимодействовать с производителями данных гораздо более эффективным способом, чем это возможно в настоящее время, что позволяет большему количеству приложений понимать более широкий набор данных как для каждого производителя, так и для потребителя. данных, которые участвуют в этой экосистеме, увеличивает ее общую ценность». [8]
В число участников TC входят CA Technologies , Citrix Systems , IBM , Microsoft , Progress Software , Red Hat , SAP SE и SDL .
OData — это протокол для создания и использования веб-API. Таким образом, OData основывается на HTTP, AtomPub и JSON, используя URI для адресации и доступа к ресурсам канала данных.
OData использует URI для идентификации ресурсов. Для каждой службы OData, корень которой сокращен как http://host/service/ , можно найти следующие фиксированные ресурсы:
В служебном документе перечислены наборы сущностей, функции и одиночные элементы, которые можно получить. Клиенты могут использовать служебный документ для навигации по модели с помощью гипермедиа.
Сервисный документ доступен по адресу http://host/service/.
Документ метаданных описывает типы, наборы, функции и действия, понятные службе OData. Клиенты могут использовать документ метаданных, чтобы понять, как запрашивать объекты в службе и взаимодействовать с ними.
Документ метаданных доступен по адресу http://host/service/$metadata .
URI для динамических ресурсов могут быть вычислены на основе гипермедийной информации в служебном документе и документе метаданных.
OData использует команды HTTP для обозначения операций с ресурсами.
URL-адреса, запрошенные у конечной точки OData, могут включать параметры запроса. Протокол OData определяет различные «параметры системного запроса», которые должны принимать конечные точки. Их можно использовать для фильтрации, упорядочивания, сопоставления или разбиения на страницы данных.
Параметры запроса могут быть добавлены к URL-адресу после ?
символа и разделены &
символами; каждая опция состоит из $
имени с префиксом -sign и его значения, разделенных знаком =
, например: OData/Products?$top=2&$orderby=Name
. Определен ряд логических операторов и функций для использования при фильтрации данных, например: OData/Products?$filter=Price lt 10.00 and startswith(Name,'M')
запрашивает товары с ценой меньше 10 и именем, начинающимся с буквы «М».
OData использует разные форматы для представления данных и модели данных. В протоколе OData версии 4.0 формат JSON является стандартом представления данных, а формат Atom все еще находится на стадии спецификации комитета. Для представления модели данных используется язык определения общей схемы (CSDL), который определяет XML-представление модели данных объекта, предоставляемой службами OData.
Коллекция продуктов:
{ "@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 , "Rating" : 14 , "Price" : 2.5 }, { "ID " : 1 , "Имя" : "Молоко" , "Описание" : "Обезжиренное молоко" , "Дата выпуска" : "1995-10-01T00:00:00Z" , "DiscontinuedDate" : null , "Рейтинг" : 3 , «Цена» : 3,5 }, ... ] }
Коллекция продуктов:
<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> <обновлено> 19.05.2015T03:38:50Z < /обновлено> <link rel= "self" title= "Продукты" href= "Продукты" /> <запись> <id> http://services.odata.org/V4/OData/OData.svc/Products(0) </id> <category term = "#ODataDemo.Product" схема = "http://docs.oasis-open.org/odata/ns/scheme" /> <link rel= "edit" title= "Продукт" href= "Продукты(0)" /> <link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Категории" href= "Продукты(0)/Категории/$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= "Поставщик" 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= "Products(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= "Products(0) /Детали продукта" /> <название/> <обновлено> 19.05.2015T03:38:50Z < /обновлено> <автор> <имя/> </автор> < тип контента = "приложение/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:Rating m:type= "Int16" > 4 </d:Rating> <d:Price m:type= "Double" > 2,5 </d:Price> </m:properties> </содержание> </entry> <запись> <id> http://services.odata.org/V4/OData/OData.svc/Products(1) </id> <category term = "#ODataDemo.Product" схема = "http://docs.oasis-open.org/odata/ns/scheme" /> <link rel= "edit" title= "Продукт" href= "Продукты(1)" /> <link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Категории" href= "Продукты(1)/Категории/$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= "Поставщик" href= "Products(1)/Supplier/$ref" /> <link rel= "http://docs.oasis-open.org/odata/ns/related/Supplier" type= "application/atom+xml;type=entry" title= "Поставщик" href= "Products(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= "Products(1) /Детали продукта" /> <название/> <обновлено> 19.05.2015T03:38:50Z < /обновлено> <автор> <имя/> </автор> < тип контента = "приложение/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:Rating m:type= "Int16" > 3 </d:Rating> <d:Price m:type= "Double" > 3,5 </d:Price> </m:properties> </содержание> </entry> ...</фид>
<edmx:Edmx Version= "4.0" xmlns:edmx= "http://docs.oasis-open.org/odata/ns/edmx" > <edmx:DataServices> < Пространство имен схемы = "ODataDemo" xmlns = "http://docs.oasis-open.org/odata/ns/edm" > <Имя EntityType = "Продукт" > <Ключ> <PropertyRef Name= "ID" /> </Ключ> < Имя свойства = "ID" Тип = "Edm.Int32" Nullable = "false" /> < Имя свойства= "Имя" Тип= "Edm.String" /> < Имя свойства = «Описание» Тип = «Edm.String» /> < Имя свойства = «Дата выпуска» Тип = «Edm.DateTimeOffset» Nullable = «false» /> < Имя свойства = «Дата прекращения» Тип = «Edm.DateTimeOffset» /> < Имя свойства = «Рейтинг» Тип = «Edm.Int16» Nullable = «false» /> < Имя свойства = «Цена» Тип = «Edm.Double» Nullable = «false» /> </EntityType> < Имя КомплексногоТипа = "Адрес" > < Имя свойства= "Улица" Тип= "Edm.String" /> < Имя свойства = "Город" Тип = "Edm.String" /> < Имя свойства = «Состояние» Тип = «Edm.String» /> < Имя свойства = "Почтовый индекс" Тип = "Edm.String" /> < Имя свойства = "Страна" Тип = "Edm.String" /> </КомплексныйТип> < Имя EntityContainer = "ДемоСервис" > <EntitySet Name= "Products" EntityType= "ODataDemo.Product" ></EntitySet> </EntityContainer> </Схема> </edmx:DataServices></edmx:Edmx>
Экосистема OData состоит из библиотек клиент/сервер, реализующих протокол, и приложений, основанных на этом протоколе.
Существует ряд библиотек OData, доступных для доступа и создания API OData:
Другие реализованные языки включают: [30]
Приложения включают: [35]