Протокол открытых данных

редактировать

В вычислениях, Протокол открытых данных (OData ) - это открытый протокол, который позволяет создавать и использовать запрашиваемые и взаимодействующие REST API простым и стандартным способом. Microsoft инициировала OData в 2007 году. Версии 1.0, 2.0 и 3.0 выпущены в рамках Microsoft Open Specification Promise. Версия 4.0 была стандартизирована в OASIS с выпуском в марте 2014 года. В апреле 2015 года OASIS представил OData v4 и OData JSON Format v4 в ISO / IEC JTC 1 для утверждения в качестве международный стандарт.

Протокол позволяет создавать и использовать REST API, которые позволяют веб-клиентам публиковать и редактировать ресурсы, идентифицированные с помощью URL-адресов и определенные в модели данных, используя простые сообщения HTTP. OData имеет некоторые сходства с JDBC и с ODBC ; как и ODBC, OData не ограничивается реляционными базами данных.

Содержание
  • 1 Стандартизация
    • 1.1 Технический комитет OASIS OData
  • 2 Архитектура
    • 2.1 Идентификация ресурсов
      • 2.1.1 Сервисный документ
      • 2.1.2 Документ метаданных
      • 2.1.3 Динамические ресурсы
    • 2.2 Операция с ресурсами
    • 2.3 Представление ресурса
      • 2.3.1 Пример полезной нагрузки данных OData JSON
      • 2.3.2 Пример OData Полезные данные Atom
      • 2.3.3 Пример документа метаданных OData
  • 3 Экосистема
    • 3.1 Библиотеки
      • 3.1.1.NET
      • 3.1.2 Java
      • 3.1.3 JavaScript
      • 3.1.4 PHP
      • 3.1.5 Python
      • 3.1.6 Ruby
      • 3.1.7 Другое
    • 3.2 Приложения
  • 4 Инструменты
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
    • 7.1 Стандарты OData OASIS
    • 7.2 Спецификации комитета
    • 7.3 Замечания комитета
Стандартизация

После первоначальной разработки Microsoft OData стала стандартизированным протоколом Технического комитета OData OASIS (TC).

Технический комитет OASIS OData

«OASIS OData TC упрощает запросы и обмен данными между разрозненными приложениями и несколькими заинтересованными сторонами для повторного использования на предприятии, в облаке и на мобильных устройствах. REST- OData основывается на протоколе HTTP, AtomPub и JSON с использованием URI для адресации и доступа к ресурсам потока данных. Это позволяет информации быть доступными из различных источников, включая (но не ограничиваясь ими) реляционные базы данных, файловые системы, системы управления контентом и традиционные веб-сайты. OData предоставляет способ разбить разрозненные данные и повысить общую ценность данных путем создания экосистемы в какие потребители данных могут взаимодействовать с производителями данных гораздо более мощным способом, чем это возможно в настоящее время, позволяя большему количеству приложений понимать более широкий набор данных. Каждый производитель и потребитель данных, который участвует в этой экосистеме, увеличивает ее общую ценность ».

Среди участников 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.

Dynamic resources

URI для динамических ресурсов можно вычислить из информация гипермедиа в служебном документе и документе метаданных.

Операция с ресурсами

OData использует команды HTTP для обозначения операций с ресурсами.

  • GET: получить ресурс (набор сущностей, отдельную сущность, структурное свойство, свойство навигации, поток и т. Д.).
  • POST: создать новый ресурс.
  • PUT: обновить существующий ресурс, заменив его полным экземпляром.
  • PATCH: обновить существующий ресурс, заменив часть его свойств частичным экземпляром.
  • DELETE: удалить ресурс.

Представление ресурсов

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," Name ":" Молоко "," Описание ":" Нежирное молоко "," Дата выпуска ":" 1995-10-01T00: 00: 00Z "," DiscontinuedDate ": null," Рейтинг ": 3," Цена ": 3.5},...]}

Пример полезной нагрузки данных OData Atom

Коллекция продуктов:

1 2 http://services.odata.org/v4/odata/odata.svc/Products3 Products4 2015-05-19T03 : 38: 50Z5 6 7 http://services.odata.org/V4/OData/OData.svc/Products(0)8 9 10 11 12 13 14 15 16 17 <updated>2015-05-19T03: 38: 50Z</updated>18 <author>19 <name/>20</author>21 <content type="application/xml">22 <m:properties>23 <d:ID m:type="Int32">0</d:ID>24 <d:Name>Хлеб</d:Name>25 <d:Description>Цельнозерновой хлеб</d:Description>26 <d:ReleaseDate m:type="DateTimeOffset">1992-01-01T00: 00: 00Z</d:ReleaseDate>27 <d:DiscontinuedDate m:null="true"/>28 <d:Rating m:type="Int16">4</d:Rating>29 <d:Price m:type="Double">2,5</d:Price>30</m:properties>31</content>32</entry>33 <entry>34 <id>http://services.odata.org/V4/OData/OData.svc/Products(1)</id>35 <category term="#ODataDemo.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>36 37 38 39 40 41 42 43 <title/>44 <updated>2015-05-19T03: 38: 50Z</updated>45 <author>46 <name/>47</author>48 <content type="application/xml">49 <m:properties>50 <d:ID m:type="Int32">1</d:ID>51 <d:Name>Молоко</d:Name>52 <d:Description>Нежирное молоко</d:Description>53 <d:ReleaseDate m:type="DateTimeOffset">1995-10-01T00: 00: 00Z</d:ReleaseDate>54 <d:DiscontinuedDate m:null="true"/>55 <d:Rating m:type="Int16">3</d:Rating>56 <d:Price m:type="Double">3.5</d:Price>57</m:properties>58</content>59</entry>60... 61</feed></pre><h4>Образец метаданных OData документ</h4><pre>1 <edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">2 <edmx:DataServices>3 <Schema Namespace="ODataDemo" xmlns="http://docs.oasis-open.org/odata/ns/edm">4 <EntityType Name="Product">5 <Key>6 <PropertyRef Name="ID"/>7</Key>8 <Property Name="ID" Type="Edm.Int32" Nullable="false"/>9 <Property Name="Name" Type="Edm.String"/>10 <Property Name="Description" Type="Edm.String"/>11 <Property Name="ReleaseDate" Type="Edm.DateTimeOffset" Nullable="false"/>12 <Property Name="DiscontinuedDate" Type="Edm.DateTimeOffset"/>13 <Property Name="Rating" Type="Edm.Int16" Nullable="false"/>14 <Property Name="Price" Type="Edm.Double" Nullable="false"/>15</EntityType>16 17 <ComplexType Name="Address">18 <Property Name="Street" Type="Edm.String"/>19 <Property Name="City" Type="Edm.String"/>20 <Property Name="State" Type="Edm.String"/>21 <Property Name="ZipCode" Type="Edm.String"/>22 <Property Name="Country" Type="Edm.String"/>23</ComplexType>24 25 <EntityContainer Name="DemoService">26 <EntitySet Name="Products" EntityType="ODataDemo.Product"></EntitySet>27</EntityContainer>28</Schema>29</edmx:DataServices>30</edmx:Edmx></pre><div class="ht">Экосистема</div><p>Экосистема OData состоит из клиента / server библиотеки, реализующие протокол, и приложения, основанные на протоколе.</p><h3>Библиотеки</h3><p>Существует ряд библиотек OData, доступных для доступа / создания API OData:</p><h4>.NET</h4><ul class="ul_main"><li>Сервер и клиент: <a href="https://odata.github.io/" rel="nofollow">Microsoft OData.NET. библиотеки</a> </li><li>Клиент: <a href="https://github.com/object/Simple.OData.Client" rel="nofollow">Simple.OData.Client</a> </li></ul><h4>Java</h4><ul class="ul_main"><li>Сервер и клиент: <a href="http://olingo.apache.org/" rel="nofollow">Apache Olingo</a> </li><li>Сторона сервера: <a href="http://jello-framework.com/guide/rest.html" rel="nofollow">Jello-Framework</a> </li><li>Клиент: <a href="https://github.com/davidmoten/odata-client" rel="nofollow">odata-client</a> </li></ul><h4>JavaScript</h4><ul class="ul_main"><li>Клиент: <a href="http://olingo.apache.org/" rel="nofollow">Apache Olingo</a> (предоставленный OASIS)</li><li>Клиент: <a href="https://datajs.codeplex.com/" rel="nofollow">data.js</a> </li><li>Клиент: <a href="http://jaydata.org/" rel="nofollow">JayData</a> для более высокого уровня абстракции (синтаксис, подобный LINQ, поддержка функций OData geo, IndexedDB, WebSQL, интеграция для DevExtreme, Kendo UI, Angular.js, Knockout.js и Sencha).</li><li>Клиент: <a href="/w/OpenUI5">Библиотека OpenUI5</a>, поддерживаемая SAP</li><li>Клиент (Node.js): <a href="https://npmjs.org/package/jaydata" rel="nofollow">JayData для узла</a> </li><li>Клиент: <a href="http://www.getbreezenow.com/" rel="nofollow">Breeze</a> </li><li>Клиент: <a href="https://access-odata.com" rel="nofollow">OData4 и Invantive Bridge Online</a> </li><li>Сервер: <a href="https://github.com/TossShinHwa/node-odata" rel="nofollow">node-odata</a> </li></ul><h4>PHP</h4><ul class="ul_main"><li>Клиент: <a href="http://odataphp.codeplex.com/" rel="nofollow">odataphp</a> </li><li>Сервер: <a href="https://github.com/Algo-Web/POData" rel="nofollow">POData</a> </li></ul><h4>Python</h4><ul class="ul_main"><li>Клиент: <a href="https://github.com/SAP/python-pyodata" rel="nofollow">PyOData</a> </li><li>Сервер и клиент: <a href="https://pypi.python.org/pypi/pyslet" rel="nofollow">Пислет</a> </li></ul><h4>Руби</h4><ul class="ul_main"><li>Кли nt: <a href="http://rdoc.info/github/visoft/ruby_odata" rel="nofollow">библиотека ruby_odata</a> </li><li>Клиент: <a href="https://github.com/wrstudios/frodata" rel="nofollow">Бесплатная библиотека OData V4.0 для Ruby</a> </li><li>Сервер: <a href="https://gitlab.com/dm0da/safrano" rel="nofollow">Safrano</a> </li></ul><h4>Другие</h4><p>Другие реализованные языки:</p><ul class="ul_main"><li>AJAX: <a href="http://ajax.codeplex.com/" rel="nofollow">библиотека ASP.NET Ajax</a> для доступа к OData.</li><li>C ++: <a href="https://github.com/OData/odatacpp-client" rel="nofollow">odatacpp_client</a> - это реализация протокола OData только на стороне клиента.</li><li><a href="https://www.windwardstudios.com/datasource/odata" rel="nofollow">Windward Studios</a> поддерживает OData в своих решениях для отчетности и создания документов.</li><li>Инструмент отчетности <a href="/w/List_%26_Label">List Label</a> имеет специализированного поставщика данных для OData.</li><li>Blackberry (C ++) : <a href="https://github.com/blackberry/OData-BB10" rel="nofollow">OData-BB10</a> Библиотека Open Data Protocol (OData) для приложений BlackBerry 10 (BB10) Cascades</li></ul><h3>Приложения</h3><p>Приложения включают:</p><ul class="ul_main"><li><a href="https://www.progress.com/cloud-and-hybrid-data-integration" rel="nofollow">Progress DataDirect Hybrid Data Pipeline</a> может предоставлять любые облака, большие данные или реляционные источники данных в качестве конечных точек OData</li><li><a href="/w/Socrata">Socrata</a> предоставляет OData <a href="/w/API">API</a>.</li><li><a href="/w/Microsoft_Azure">Microsoft Azure</a> предоставляет OData <a href="/w/API">API</a>.</li><li><a href="/w/SAP_NetWeaver">SAP NetWeaver</a> Шлюз обеспечивает доступ OData к SAP Business Suite и SAP Business Warehouse.</li><li><a href="/w/IBM_WebSphere_eXtreme_Scale">IBM WebSph ere eXtreme Scale</a> Служба данных REST может быть доступна любому HTTP-клиенту с помощью oData.</li><li><a href="/w/Microsoft_SharePoint">Microsoft SharePoint</a> 2010 и более поздних версий может предоставлять свои данные как конечную точку OData</li><li><a href="/w/Office_365">Office 365</a> предоставляет OData V4.0 API.</li><li><a href="/w/Salesforce.com">Salesforce</a> Lightning Connect использует API OData.</li><li><a href="http://skyvia.com/connect/" rel="nofollow">Skyvia Connect</a> предоставляет данные облака и базы данных через OData</li><li><a href="/w/Tableau_Software">Tableau</a> может подключаться к API OData.</li><li><a href="/w/Spotfire">TIBCO Spotfire</a> может подключаться к API OData.</li><li><a href="https://www.mulesoft.com/" rel="nofollow">Mulesoft</a> помогает интегрироваться с API OData.</li><li><a href="https://www.successfactors.com/" rel="nofollow">SuccessFactors</a> использует API Odata</li><li><a href="https://www.ceridian.com/" rel="nofollow">Ceridian HCM's Dayforce</a> использует Odata</li><li><a href="/w/Redfish_(specification)">Redfish</a> использует Odata</li></ul><div class="ht">Инструменты</div><ul class="ul_main"><li>Nucleon Database Master</li></ul><div class="ht">См. Также</div><ul class="ul_main"><li><a href="/w/GData">GData</a> - конкурирующий протокол от Google</li><li><a href="/w/Resource_Description_Framework">Resource Description Framework</a> (RDF) - аналогичная концепция от <a href="/w/World_Wide_Web_Consortium">W3C</a> </li><li><a href="/w/GraphQL">GraphQL</a> </li></ul><div class="ht">Ссылки</div><div class="ht">Внешние ссылки</div><ul class="ul_main"><li><a href="http://www.odata.org/" rel="nofollow">OData.org</a> (официальный сайт)</li><li><a href="http://msdn.microsoft.com/en-us/library/ff478141.aspx" rel="nofollow">Протокол открытых данных на примере</a> </li><li><a href="http://www.hanselman.com/blog/ODataBasicsAtTheAZGroupsDayOfNETWithScottGu.aspx" rel="nofollow">Презентация основ OData</a> </li></ul><h3>Стандарты OData OASIS</h3><ul class="ul_main"><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html" rel="nofollow">OData версии 4.0, часть 1: протокол</a> </li><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/part2-url-conventions/odata-v4.0-os-part2-url-conventions.html" rel="nofollow">версии OData 4.0, часть 2: соглашения об URL</a> </li><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/part3-csdl/odata-v4.0-os-part3-csdl.html" rel="nofollow">OData версии 4.0, часть 3: общий язык определения схемы (CSDL)</a> </li><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/abnf/" rel="nofollow">компоненты ABNF - правила построения OData ABNF версии 4.0 и тестовые примеры OData ABNF</a> </li><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/models/MetadataService.edmx" rel="nofollow">компоненты словаря - словарь ядра OData и OData Измеряет словарный запас</a> </li><li><a href="http://docs.oasis-open.org/odata/odata/v4.0/os/schemas/" rel="nofollow">XML-схемы - OData EDMX XML Schema и OData EDM XML Schema</a> </li><li><a href="http://docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html" rel="nofollow">OData JSON Format Version 4.0</a> </li></ul><h3>Спецификации комитета</h3><ul class="ul_main"><li><a href="http://docs.oasis-open.org/odata/odata-atom-format/v4.0/cs02/odata-atom-format-v4.0-cs02.html" rel="nofollow">OData Atom Format Version 4.0</a> </li><li><a href="http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs01/odata-data-aggregation-ext-v4.0-cs01.html" rel="nofollow">OData Extension for Data Aggregation Version 4.0</a> </li></ul><h3>Примечания комитета</h3><ul class="ul_main"><li><a href="http://docs.oasis-open.org/odata/new-in-odata/v4.0/cn01/new-in-odata-v4.0-cn01.html" rel="nofollow">Что нового в OData версии 4.0</a> </li></ul></div>
</div>
</div>
<div class="body">
<div class="update">Последняя правка сделана 2021-06-01 12:40:21</div>
<div>Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).</div></div>
<div class="schl" style="background:#0e365a;height:162px;">
<div class="body" style="color:#fff;padding:34px 0px;margin-top:36px;font-size:16px;">
<div>Обратная связь: support@alphapedia.ru</div>
<div style="margin:14px 0px;"><a style="color:#fff;" href="https://alphapedia.ru/terms.html" rel="nofollow">Соглашение</a></div>
<div><a style="color:#fff;" href="https://alphapedia.ru/about.html" rel="nofollow">О проекте</a></div>
</div>
<!--LiveInternet counter--><img id="licnt23FE" width="1" height="0" style="border:0" 
title="LiveInternet"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7"
alt=""/><script>(function(d,s){d.getElementById("licnt23FE").src=
"https://counter.yadro.ru/hit?t44.6;r"+escape(d.referrer)+
((typeof(s)=="undefined")?"":";s"+s.width+"*"+s.height+"*"+
(s.colorDepth?s.colorDepth:s.pixelDepth))+";u"+escape(d.URL)+
";h"+escape(d.title.substring(0,150))+";"+Math.random()})
(document,screen)</script><!--/LiveInternet-->
</div>
<script>
function sub() {    
var request = new XMLHttpRequest();
request.open('GET', '/action/action.php?request=sub');  
request.send();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200){
var response = request.responseText;
document.getElementById("action").innerHTML = response;
var script = document.createElement("script");
script.src = "https://alphapedia.ru/javascript/main.js";
document.getElementsByClassName("javascript")[0].appendChild(script);   
}
}    
}
function search_() {    
var request = new XMLHttpRequest();
request.open('GET', '/action/action.php?request=search_');  
request.send();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200){
var response = request.responseText;
document.getElementById("action").innerHTML = response;  
var script = document.createElement("script");
script.src = "https://alphapedia.ru/javascript/main.js";
document.getElementsByClassName("javascript")[0].appendChild(script);   
}
}    
}
</script>
<div id="action"></div>
</body>
</html>