Otwarty protokół danych - Open Data Protocol

W informatyce , Open Data Protocol ( OData ) to otwarty protokół , który umożliwia tworzenie i konsumpcję queryable i interoperacyjne REST API w prosty i standardowy sposób. Firma Microsoft zainicjowała OData w 2007 roku. Wersje 1.0, 2.0 i 3.0 są wydawane w ramach Microsoft Open Specification Promise . Wersja 4.0 została ustandaryzowana w OASIS , z wydaniem w marcu 2014 r. W kwietniu 2015 r. OASIS przedstawiła OData v4 i OData JSON Format v4 ISO/IEC JTC 1 do zatwierdzenia jako standard międzynarodowy . W grudniu 2016 r. ISO/IEC opublikowała OData 4.0 Core jako ISO/IEC 20802-1:2016 oraz OData JSON Format jako ISO/IEC 20802-2:2016.

Protokół umożliwia tworzenie i używanie REST API, które umożliwiają klientom WWW publikowanie i edycję zasobów identyfikowanych za pomocą adresów URL i zdefiniowanych w modelu danych za pomocą prostych komunikatów HTTP. OData dzieli pewne podobieństwa z JDBC i ODBC ; podobnie jak ODBC, OData nie ogranicza się do relacyjnych baz danych .

Normalizacja

Po początkowym opracowaniu przez Microsoft, OData stał się standardowym protokołem Komitetu Technicznego OASIS OData (TC).

Komitet Techniczny OASIS OData

„OASIS OData TC działa w celu uproszczenia zapytań i udostępniania danych w różnych aplikacjach i wielu interesariuszach w celu ponownego wykorzystania w przedsiębiorstwie, chmurze i urządzeniach mobilnych. Protokół oparty na REST, OData opiera się na HTTP , AtomPub i JSON przy użyciu Identyfikatory URI do adresowania i uzyskiwania dostępu do zasobów strumieniowych danych. Umożliwiają dostęp do informacji z różnych źródeł, w tym (ale nie wyłącznie) relacyjnych baz danych, systemów plików, systemów zarządzania treścią i tradycyjnych witryn sieci Web. OData zapewnia sposób podziału danych silosy i zwiększyć wspólną wartość danych poprzez stworzenie ekosystemu, w którym konsumenci danych mogą współpracować z producentami danych w sposób o wiele bardziej wydajny niż jest to obecnie możliwe, umożliwiając większej liczbie aplikacji zrozumienie szerszego zestawu danych. danych, które uczestniczą w tym ekosystemie, zwiększa jego ogólną wartość”.

Wśród uczestników TC są CA Technologies , Citrix Systems , IBM , Microsoft , Progress Software , Red Hat , SAP SE i SDL .

Architektura

OData to protokół do tworzenia i używania interfejsów API RESTful. W związku z tym, zgodnie z powszechnymi praktykami REST, OData opiera się na HTTP, AtomPub i JSON przy użyciu identyfikatorów URI do adresowania i uzyskiwania dostępu do zasobów strumieniowych danych.

Identyfikacja zasobów

OData używa identyfikatorów URI do identyfikowania zasobów. Dla każdej usługi OData, której katalog główny usługi jest skrócony jako http://host/service/ , można znaleźć następujące stałe zasoby:

Dokument serwisowy

Dokument usługi zawiera listę zestawów jednostek, funkcji i jednostek pojedynczych, które można pobrać. Klienci mogą korzystać z dokumentu serwisowego, aby poruszać się po modelu w sposób oparty na hipermediach.

Dokument serwisowy jest dostępny pod adresem http://host/service/ .

Dokument metadanych

Dokument metadanych opisuje typy, zestawy, funkcje i akcje rozumiane przez usługę OData. Klienci mogą korzystać z dokumentu metadanych, aby zrozumieć, jak wykonywać zapytania i wchodzić w interakcje z jednostkami w usłudze.

Dokument metadanych jest dostępny pod adresem http://host/service/$metadata .

Zasoby dynamiczne

Identyfikatory URI dla zasobów dynamicznych można obliczyć na podstawie informacji hipermedialnych w dokumencie usługi i dokumencie metadanych.

Operacja zasobów

OData używa czasowników HTTP do wskazania operacji na zasobach.

  • POBIERZ: Pobierz zasób (zbiór jednostek, pojedynczą jednostkę, właściwość strukturalną, właściwość nawigacji, strumień itp.).
  • POST: Utwórz nowy zasób.
  • PUT: Zaktualizuj istniejący zasób, zastępując go pełną instancją.
  • PATCH: Zaktualizuj istniejący zasób, zastępując część jego właściwości częściową instancją.
  • USUŃ: Usuń zasób.

Reprezentacja zasobów

OData używa różnych formatów do reprezentowania danych i modelu danych. W protokole OData w wersji 4.0 format JSON jest standardem reprezentacji danych, a format Atom jest nadal na etapie specyfikacji komitetu. Do reprezentowania modelu danych używany jest język Common Schema Definition Language (CSDL), który definiuje reprezentację XML modelu danych jednostki udostępnianego przez usługi OData.

Przykładowy ładunek danych OData JSON

Kolekcja produktów:

{
  "@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,
      "Name": "Milk",
      "Description": "Low fat milk",
      "ReleaseDate": "1995-10-01T00:00:00Z",
      "DiscontinuedDate": null,
      "Rating": 3,
      "Price": 3.5
    },
    ...
  ]
}

Przykładowy ładunek danych OData Atom

Kolekcja produktów:

<feed xml:base="http://services.odata.org/V4/OData/OData.svc/" m:context="http://services.odata.org/V4/OData/OData.svc/$metadata#Products" 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">Products</title>
  <updated>2015-05-19T03:38:50Z</updated>
  <link rel="self" title="Products" href="Products"/>
  <entry>
    <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="Products(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="Categories" href="Products(0)/Categories"/>
    <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="Products(0)/Supplier"/>
    <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)/ProductDetail"/>
    <title/>
    <updated>2015-05-19T03:38:50Z</updated>
    <author>
      <name/>
    </author>
    <content type="application/xml">
      <m:properties>
        <d:ID m:type="Int32">0</d:ID>
        <d:Name>Bread</d:Name>
        <d:Description>Whole grain bread</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>
    </content>
  </entry>
  <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="Categories" href="Products(1)/Categories"/>
    <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="Products(1)/Supplier"/>
    <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)/ProductDetail"/>
    <title/>
    <updated>2015-05-19T03:38:50Z</updated>
    <author>
      <name/>
    </author>
    <content type="application/xml">
      <m:properties>
        <d:ID m:type="Int32">1</d:ID>
        <d:Name>Milk</d:Name>
        <d:Description>Low fat milk</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>
    </content>
  </entry>
  ...
</feed>

Przykładowy dokument metadanych 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="Product">
        <Key>
          <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="Rating" Type="Edm.Int16" Nullable="false"/>
        <Property Name="Price" Type="Edm.Double" Nullable="false"/>
      </EntityType>

      <ComplexType Name="Address">
        <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>

Ekosystem

Ekosystem OData składa się z bibliotek klient/serwer, które implementują protokół, oraz aplikacji opartych na protokole.

Biblioteki

Dostępnych jest wiele bibliotek OData umożliwiających dostęp/tworzenie interfejsów API OData:

.INTERNET

  • Serwer i klient: biblioteki OData .NET firmy Microsoft
  • Klient: Simple.OData.Client

Jawa

  • Serwer i klient: Apache Olingo
  • Strona serwera: Jello-Framework
  • Klient: odata-klient

JavaScript

  • Klient: Apache Olingo (polecany przez OASIS )
  • Klient: data.js
  • Klient: JayData dla wyższego poziomu abstrakcji (składnia podobna do LINQ, obsługa funkcji geograficznych OData, IndexedDB, WebSQL, integracja z DevExtreme, Kendo UI, Angular.js, Knockout.js i Sencha).
  • Klient: biblioteka OpenUI5 obsługiwana przez SAP
  • Klient (Node.js): JayData dla węzła
  • Klient: Bryza
  • Klient: OData4 i Invantive Bridge Online
  • Serwer: węzeł-odata

PHP

  • Klient: odataphp
  • Serwer: POData

Pyton

  • Klient: PyOData
  • Serwer i klient: Pyslet

Rubin

  • Klient: biblioteka ruby_odata
  • Klient: bezpłatna biblioteka OData V4.0 dla Rubiego
  • Serwer: Safrano

Inni

Inne zaimplementowane języki to:

  • AJAX: Biblioteka ASP.NET Ajax do uzyskiwania dostępu do OData.
  • C++: odatacpp_client to implementacja protokołu OData tylko po stronie klienta.
  • Windward Studios wspiera OData w swoich rozwiązaniach do raportowania i generowania dokumentów.
  • Narzędzie do raportowania List & Label ma wyspecjalizowanego dostawcę danych dla OData.
  • Blackberry (C++): Biblioteka OData-BB10 Open Data Protocol (OData) dla aplikacji kaskadowych BlackBerry 10 (BB10)

Aplikacje

Zastosowania obejmują:

  • Progress DataDirect Hybrid Data Pipeline może udostępniać dowolne źródła danych w chmurze, big data lub relacyjne źródła danych jako punkty końcowe OData
  • Socrata udostępnia interfejs API OData .
  • Microsoft Azure udostępnia interfejs API OData .
  • SAP NetWeaver Gateway zapewnia dostęp OData do SAP Business Suite i SAP Business Warehouse.
  • Dostęp do usługi danych REST IBM WebSphere eXtreme Scale można uzyskać za pomocą dowolnego klienta HTTP korzystającego z OData.
  • Microsoft SharePoint 2010 i nowsze wersje mogą udostępniać swoje dane jako punkt końcowy OData
  • Office 365 udostępnia interfejsy API OData V4.0.
  • Salesforce Lightning Connect wykorzystuje interfejsy API OData.
  • Skyvia Connect udostępnia dane z chmury i bazy danych za pośrednictwem OData
  • Tableau może łączyć się z interfejsami API OData.
  • TIBCO Spotfire może łączyć się z interfejsami API OData.
  • Mulesoft pomaga zintegrować się z interfejsami API OData.
  • SuccessFactors korzysta z interfejsów API Odata
  • Ceridian HCM Dayforce używa Odata
  • Karmazyn używa Odata

Narzędzia

  • Nucleon Database Master

Zobacz też

Bibliografia

Zewnętrzne linki

Standardy OData OASIS

Specyfikacje Komitetu

Notatki Komitetu