Protocolo de Datos Abiertos

De Wikipedia, la enciclopedia libre

En la informática, el Protocolo de Datos Abierto (OData) o Open Data Protocoles un protocolo abierto que permite la creación y consumo de APIs RESTful que pueden ser consultadas e interoperables en una manera simple y estandarizada. Microsoft inició dicho protocolo en el 2007.[1]​ Las versiones 1.0,2.0 y 3 están lanzadas bajo el Microsoft Open Specification Promise. La versión 4.0 fue estandarizada en OASIS,,[2]​ con un lanzamiento en marzo de 2014.[3]​ En abril de 2015 OASIS envió la versión 4 de OData y la versión 4 del formato OData JSON a ISO/IEC JTC 1 para su aprobación como un estándar internacional.[4]

El protocolo permite la creación y consumición de APIs REST que permiten la creación de clientes Web para publicar y editar recursos, identificados utilizando URLs y definido en un modelo de datos, usando mensajes HTTP simples.OData comparte algunas similitudes con JDBC y con ODBC; como ODBC, OData no esta limitada a una Base de datos relacional.

Estandarización[editar]

Tras el desarrollo inicial por Microsoft, OData se convirtió en un protocolo del comité técnico OASIS OData

Comité Técnico OASIS OData[editar]

"The OASIS OData TC works to simplify the querying and sharing of data across disparate applications and multiple stakeholders for re-use in the enterprise, Cloud, and mobile devices. A REST-based protocol, OData builds on HTTP, AtomPub, and JSON using URIs to address and access data feed resources. It enables information to be accessed from a variety of sources including (but not limited to) relational databases, file systems, content management systems, and traditional Web sites. OData provides a way to break down data silos and increase the shared value of data by creating an ecosystem in which data consumers can interoperate with data producers in a way that is far more powerful than currently possible, enabling more applications to make sense of a broader set of data. Every producer and consumer of data that participates in this ecosystem increases its overall value."[5]

El trabajo del comité consiste en simplificar la consulta y compartimiento de los datos de las aplicaciones y múltiples stake-holders para la re-utilización en las empresas,nube y dispositivos móviles.Se usa un protocólo basado en REST para poder dirigir y acceder las fuentes. Permite que la información pueda ser accedida desde una variedad de fuentes como pueden ser bases de datos distribuidas, sistemas de ficheros, sistemas de manejo de contenido y páginas web. OData ofrece una forma de dividir contenedores de datos y así incrementar el valor compartido de los datos debido a que los usuarios pueden ínter-operar con los productores de una manera que produce mayor valor permitiendo que las aplicaciones tenga sentidos en conjuntos más amplios de datos.

Arquitectura[editar]

OData es un protocolo para la creación y consumición de APIs REST. Así pues, como práctica común de REST,Construcciones OData en HTTP,AtomPub y JSON utilizando el identificador de recursos uniformes para dirigir y acceder a recursos alimentados de datos.

Identificación de recursos[editar]

OData utiliza identificadores de recursos uniformes. Para cada servicio OData cuyo servicio raíz esta abreviado como http://host/service/, los siguientes recursos fijos pueden ser encontrados.

Documento del servicio[editar]

El documento del servicio muestra conjuntos de entidades,funciones e instancias únicas que pueden ser recuperadas.Los clientes pueden utilizar el documento del servicio para navegar el modelo de forma hypermedia-driven.

El documento del servicio está disponible en http://host/service/.

Documento de meta-datos[editar]

El documento de meta-datos describe los tipos, conjuntos, funciones y acciones entendidas por el servicio OData. Los clientes pueden utilizar el documento de meta-datos para entender como consultar e interaccionar con las entidades del servicio.

El documento de metadatos está disponible en http://host/service/$metadata.

Recursos dinámicos[editar]

Los identificadores de recursos uniforme pueden ser computados desde la información hypermedia en el documento del servicio y documento de meta-datos.

Operación de recurso[editar]

OData utiliza los verbos HTTP para indicar las operaciones en los recurso.

* GET: Coge el recurso(una colección de entidades,una sola 
  entidad,una propiedad estructural, una propiedad de 
  navegación,un flujo,etc.).
* POST: Crear un nuevo recurso
* PUT: Actualiza un recurso existente reemplazándolo con una 
  instancia completa.
* PATCH: Actualiza un recurso existente reemplazándolo una 
  parte de sus propiedades con una instancia parcial.
* DELETE: Borra el recurso.

Representación del recurso[editar]

OData utiliza diferentes formatos para representar los datos y el modelo de datos. En la versión 4.0 del protocolo OData, El formato JSON es el estándar para representar datos, con el formato Atom aún en la fase de especificación del comité. Para representar el modelo de datos se utiliza el lenguaje de definición de esquema común, que define una representación del modelo de datos de entidad expuesto por los servicios OData.

Un ejemplo de OData JSON[editar]

Una colección de productos

{
  "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
    },
    ...
  ]
}

Ejemplo de OData Atom[editar]

Colección de productos

<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>

Ejemplo de un documento OData de meta-datos[editar]

<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>

Ecosistema[editar]

El ecosistema de OData consiste en librerías cliente/servidor que implementan el protocolo, y aplicaciones basadas en el protocolo

Librerías[editar]

Hay un gran número de librerías OData disponibles para acceder/Producir APIs de OData

.NET[editar]

Java[editar]

JavaScript[editar]

  • Cliente: Apache Olingo (presentado por OASIS[6]​)
  • Cliente: data.js
  • Cliente: JayData para un mayor nivel de abstracción (Sintaxis tipo LINQ,soporte para geo funciones de OData , Bases de datos indexadas, WebSQL, integración para DevExtremeintegration, Kendo UI, Angular.js, Knockout.js and Sencha).
  • Cliente: OpenUI5libreria mantenida por SAP.
  • Cliente (Node.js): JayData para node
  • Cliente: Breeze
  • Servere: node-odata

PHP[editar]

Python[editar]

Ruby[editar]

Otros lenguajes[editar]

Otros lenguajes implementados son::[7]

  • AJAX: la libreria Ajax ASP.NET para llegar a OData.
  • C++: odatacpp_client Es una implementación solo del cliente del protocolo OData.
  • Windward Studios Admiten OData en las soluciones de generación de informes y documentos.
  • La herramienta de informes List & Label tiene un proveedor de datos especializados para OData.
  • Blackberry (C++): OData-BB10 Libreria OData para aplicaciones en cascada de Blackberry 10.

Aplicaciones[editar]

Las aplicaciones incluyen:[8]

Herramientas[editar]

  • Nucleon Database Master[18]

Véase también[editar]

Referencias[editar]

  1. «Welcome!». MSDN Blogs. OData Team. 
  2. «OASIS Open Data Protocol (OData) Technical Committee». Consultado el 5 de agosto de 2013. 
  3. «OASIS Approves OData 4.0 Standards for an Open, Programmable Web». oasis-open.org. 
  4. «OASIS has Submitted OData v4 and OData JSON Format v4 to ISO/IEC JTC 1 for approval as an International Standard». MS Open Tech. Archivado desde el original el 20 de mayo de 2015. Consultado el 10 de abril de 2020. 
  5. «OASIS Open Data Protocol (OData) TC | OASIS». www.oasis-open.org. Consultado el 24 de septiembre de 2019. 
  6. «Libraries · OData - the Best Way to REST». www.odata.org. Consultado el 19 de febrero de 2019. 
  7. «Libraries». odata.org. 
  8. «Ecosystem». odata.org. 
  9. «SAP NetWeaver Gateway». Consultado el 22 de noviembre de 2012. 
  10. IBM developerWorks eXtreme Scale REST data service (OData)
  11. «Welcome to Office 365 APIs». docs.microsoft.com. Consultado el 24 de septiembre de 2019. 
  12. «Salesforce Lightning Connect & OData». 
  13. «OData - Tableau». help.tableau.com. Consultado el 24 de septiembre de 2019. 
  14. «OData and Spotfire». The TIBCO Blog (en inglés estadounidense). Consultado el 30 de marzo de 2016. 
  15. «Anypoint Exchange». www.mulesoft.com. Consultado el 24 de septiembre de 2019. 
  16. «HR Reporting Software - Dayforce | Ceridian». www.ceridian.com. Consultado el 24 de septiembre de 2019. 
  17. «What You Need to Know About Redfish API». Exxact (en inglés estadounidense). 1 de diciembre de 2017. Consultado el 31 de agosto de 2019. 
  18. «Nucleon Database Master». Consultado el 16 de noviembre de 2017. 

Enlaces externos[editar]

OData OASIS Standards[editar]

Especificaciones del comité[editar]

Notas del comité[editar]