Öppna Data Protocol
Inom datoranvändning är Open Data Protocol ( OData ) ett öppet protokoll som tillåter skapandet och konsumtionen av frågebara och interoperabla REST API : er på ett enkelt och standardmässigt sätt. Microsoft initierade OData 2007. Versioner 1.0, 2.0 och 3.0 släpps under Microsoft Open Specification Promise . Version 4.0 standardiserades hos OASIS , med en release i mars 2014. I april 2015 skickade OASIS OData v4 och OData JSON Format v4 till ISO/IEC JTC 1 för godkännande som en internationell standard . I december 2016 publicerade ISO/IEC OData 4.0 Core som ISO/IEC 20802-1:2016 och OData JSON-formatet som ISO/IEC 20802-2:2016.
Protokollet möjliggör skapandet och konsumtionen av REST- API:er, som tillåter webbklienter att publicera och redigera resurser, identifierade med URL:er och definierade i en datamodell , med enkla HTTP-meddelanden. OData delar vissa likheter med JDBC och med ODBC ; precis som ODBC är OData inte begränsad till relationsdatabaser .
Standardisering
Efter initial utveckling av Microsoft blev OData ett standardiserat protokoll för OASIS OData Technical Committee (TC).
OASIS OData tekniska kommitté
"OASIS OData TC arbetar för att förenkla sökning och delning av data mellan olika applikationer och flera intressenter för återanvändning i företaget, molnet och mobila enheter. Ett REST-baserat protokoll, OData bygger på HTTP , AtomPub och JSON med hjälp av URI:er för att adressera och komma åt dataflödesresurser. Det gör det möjligt att komma åt information från en mängd olika källor inklusive (men inte begränsat till) relationsdatabaser, filsystem, innehållshanteringssystem och traditionella webbplatser. OData ger ett sätt att bryta ner data silos och öka det delade värdet av data genom att skapa ett ekosystem där datakonsumenter kan samverka med dataproducenter på ett sätt som är mycket kraftfullare än vad som för närvarande är möjligt, vilket gör att fler applikationer kan förstå en bredare uppsättning data. Varje producent och konsument av data som deltar i detta ekosystem ökar dess totala värde."
TC-deltagare inkluderar CA Technologies , Citrix Systems , IBM , Microsoft , Progress Software , Red Hat , SAP SE och SDL .
Arkitektur
OData är ett protokoll för att skapa och konsumera RESTful API:er. Således, som vanliga metoder för REST, bygger OData på HTTP, AtomPub och JSON och använder URI:er för att adressera och komma åt dataflödesresurser.
Resursidentifiering
OData använder URI:er för att identifiera resurser. För varje OData-tjänst vars tjänstrot förkortas till http://host/service/ , kan följande fasta resurser hittas:
Servicedokumentet
Servicedokumentet listar entitetsuppsättningar, funktioner och singletons som kan hämtas. Kunder kan använda servicedokumentet för att navigera i modellen på ett hypermediadrivet sätt.
Servicedokumentet finns tillgängligt på http://host/service/ .
Metadatadokumentet
Metadatadokumentet beskriver de typer, uppsättningar, funktioner och åtgärder som OData-tjänsten förstår. Klienter kan använda metadatadokumentet för att förstå hur man frågar och interagerar med enheter i tjänsten.
Metadatadokumentet är tillgängligt på http://host/service/$metadata .
Dynamiska resurser
URI:erna för de dynamiska resurserna kan beräknas från hypermediainformationen i tjänstedokumentet och metadatadokumentet.
Resursdrift
OData använder HTTP-verben för att indikera operationerna på resurserna.
- GET: Hämta resursen (en samling enheter, en enstaka enhet, en strukturell egenskap, en navigationsegenskap, en ström, etc.).
- POST: Skapa en ny resurs.
- PUT: Uppdatera en befintlig resurs genom att ersätta den med en komplett instans.
- PATCH: Uppdatera en befintlig resurs genom att ersätta en del av dess egenskaper med en partiell instans.
- DELETE: Ta bort resursen.
Frågar
URL:er som begärs från en OData-slutpunkt kan innehålla frågealternativ. OData-protokollet specificerar olika "systemfrågealternativ" som slutpunkter ska acceptera, dessa kan användas för att filtrera, beställa, kartlägga eller paginera data.
Frågealternativ kan läggas till i en URL efter en ?
tecken och separeras av &
tecken; varje alternativ består av ett $
-tecken med prefixnamn och dess värde, åtskilda av ett =
-tecken, till exempel: OData/Products?$top=2&$orderby=Name
. Ett antal logiska operatorer och funktioner är definierade för användning vid filtrering av data, till exempel: OData/Products?$filter=Pris lt 10,00 och startswith(Name,'M')
begär produkter med ett pris som är mindre än 10 och ett namn som börjar med bokstaven 'M'.
Resursrepresentation
OData använder olika format för att representera data och datamodellen. I OData-protokollversion 4.0 är JSON-formatet standarden för att representera data, där Atom -formatet fortfarande befinner sig i kommittéspecifikationsstadiet. För att representera datamodellen används Common Schema Definition Language (CSDL), som definierar en XML-representation av entitetsdatamodellen som exponeras av OData-tjänster.
Ett exempel på OData JSON-datanyttolast
En samling produkter:
0
{ "@odata.context" : "http://services.odata.org/V4/OData/OData.svc/$metadata#Products" , "value" : [ { "ID" : , "Name" : "Kött " , "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 , " Pris" : 3,5 }, ... ] }
Ett exempel på OData Atom-datanyttolast
En samling produkter:
0
<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/data" ://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" > Produkter </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/ Produkter(0) </id> <category term= "#ODataDemo.Product" scheme= "http://docs.oasis-open.org/odata/ns/scheme" /> <länk rel= "edit" title= "Product" href= "Products(0)" /> <link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Kategorier" href= "Products(0)/Categories/$ref" /> <länk rel= "http://docs.oasis-open.org/odata/ns/related/Categories" type= "application/atom+xml;type =feed" title= "Kategorier" href= "Produkter(0)/Kategorier" /> <länk rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type= "application/ xml" title= "Leverantör" href= "Products(0)/Supplier/$ref" /> <länk rel= "http://docs.oasis-open.org/odata/ns/related/Supplier" type= " application/atom+xml;type=entry" title= "Leverantör" href= "Products(0)/Supplier" /> <länk rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/ ProductDetail" type= "application/xml" title= "ProductDetail" href= "Products(0)/ProductDetail/$ref" /> <länk 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" > </d:ID> <d :Name> Bröd </d:Name> <d:Description> Fullkornsbröd </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= "Dubbel" > 2,5 </d: Pris> </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" /> <länk rel= "edit" title= "Produkt" href= "Produkter(1) " /> <link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Categories" href= "Products(1)/Categories/ $ref" /> <länk rel= "http://docs.oasis-open.org/odata/ns/related/Categories" type= "application/atom+xml;type=feed" title= "Kategorier" href= "Products(1)/Categories" /> <link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type= "application/xml" title= "Leverantör" 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" /> <länk rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail" type= "application/xml" title= = "ProductDetail" href= "Products(1)/ProductDetail/$ref" /> <länk 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> Mjölk </d:Name > <d:Description> Lågfettsmjölk </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= "Dubbel" > 3,5 </d:Price> </m:properties> < /content> </entry> ... </feed>
Ett exempel på OData-metadatadokument
<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
ODatas ekosystem består av klient/serverbiblioteken som implementerar protokollet och applikationer som är baserade på protokollet.
Bibliotek
Det finns ett antal OData-bibliotek tillgängliga för att komma åt/producera OData API:er:
.NETTO
- Server och klient: Microsofts OData .NET-bibliotek
- Klient: Simple.OData.Client
Java
- Server och klient: Apache Olingo
- Serversidan: Jello-Framework
- Klient: odata-klient
JavaScript
- Klient: Apache Olingo (med OASIS )
- Klient: data.js
- Klient: JayData för högre abstraktionsnivå (LINQ-liknande syntax, stöd för OData geofunktioner, IndexedDB, WebSQL, integration för DevExtreme, Kendo UI, Angular.js, Knockout.js och Sencha).
- Klient: OpenUI5 -biblioteket underhålls av SAP
- Klient (Node.js): JayData för nod
- Klient: Breeze
- Klient: OData4 och Invantive Bridge Online
- Klient: odata-fluent-query: en Javascript OData-frågespråkparser
- Server: nod-odata
PHP
- Klient: odataphp
- Server: POData
Pytonorm
- Klient: PyOData
- Server och klient: Pyslet
Rubin
- Klient: ruby_odata library
- Klient: Gratis OData V4.0-bibliotek för Ruby
- Server: Safrano
Andra
Andra implementerade språk inkluderar:
- AJAX: ASP.NET Ajax Library för att komma till OData.
- C++: odatacpp_client är en implementering av OData-protokollet endast på klientsidan.
- Windward Studios stödjer OData i deras rapporterings- och dokumentgenereringslösningar.
- Rapporteringsverktyget List & Label har en specialiserad dataleverantör för OData.
- Blackberry (C++): OData-BB10 Open Data Protocol (OData)-bibliotek för BlackBerry 10 (BB10) Cascades-appar
Ansökningar
Applikationer inkluderar:
- Progress DataDirect Hybrid Data Pipeline kan exponera alla moln, big data eller relationsdatakällor som OData-slutpunkter
- Socrata exponerar ett OData API .
- Microsoft Azure visar ett OData API .
- Oracle Analytics Cloud kan ansluta till ett OData API
- SAP NetWeaver Gateway ger OData-åtkomst till SAP Business Suite och SAP Business Warehouse.
- IBM WebSphere eXtreme Scale REST-datatjänsten kan nås av alla HTTP-klienter som använder OData.
- Microsoft SharePoint 2010 och senare kan exponera sina data som OData-slutpunkt
- Office 365 exponerar OData V4.0 API:er.
- Salesforce Connect använder OData API:er.
- Skyvia Connect exponerar moln- och databasdata via OData
- Tableau kan ansluta till OData API:er.
- TIBCO Spotfire kan ansluta till OData API:er.
- Mulesoft hjälper till att integrera med OData API:er.
- SuccessFactors använder Odata API:er
- Ceridian HCM:s Dayforce använder Odata
- Redfish använder Odata
Verktyg
- Nucleon Database Master
Se även
- GData – konkurrerande protokoll från Google
- Resource Description Framework (RDF) – ett liknande koncept av W3C
- GraphQL
externa länkar
OData OASIS-standarder
- OData Version 4.0 Del 1: Protokoll
- OData Version 4.0 Del 2: URL-konventioner
- OData Version 4.0 Del 3: Common Schema Definition Language (CSDL)
- ABNF-komponenter - OData ABNF Construction Rules Version 4.0 och OData ABNF-testfall
- Ordförrådskomponenter - OData Core Vocabulary och OData Measures Vocabulary
- XML Schema - OData EDMX XML Schema och OData EDM XML Schema
- OData JSON-format version 4.0