En informática , el Protocolo de Datos Abiertos ( OData ) es un protocolo abierto que permite la creación y el consumo de API de servicios web consultables e interoperables de forma estandarizada. Microsoft inició OData en 2007. [ 1 ] Las versiones 1.0, 2.0 y 3.0 se publicaron bajo la Promesa de Especificación Abierta de Microsoft . La versión 4.0 se estandarizó en OASIS , [ 2 ] con una publicación en marzo de 2014. [ 3 ] En abril de 2015, OASIS presentó OData v4 y el formato JSON de OData v4 a ISO/IEC JTC 1 para su aprobación como estándar internacional . [ 4 ] En diciembre de 2016, ISO/IEC publicó OData 4.0 Core como ISO/IEC 20802-1:2016 [ 5 ] [ 6 ] y el formato JSON de OData como ISO/IEC 20802-2:2016. [ 7 ]
El protocolo permite la creación y el consumo de API web basadas en HTTP , que permiten a los clientes web publicar y editar recursos, identificados mediante URL y definidos en un modelo de datos , utilizando mensajes HTTP sencillos. OData comparte algunas similitudes con JDBC y con ODBC ; al igual que ODBC, OData no se limita a bases de datos relacionales .
Normalización
Tras su desarrollo inicial por parte de Microsoft, OData se convirtió en un protocolo estandarizado del Comité Técnico (CT) de OData de OASIS.
Comité Técnico de OData de OASIS
El OASIS OData TC trabaja para simplificar la consulta y el intercambio de datos entre aplicaciones dispares y múltiples partes interesadas para su reutilización en la empresa, la nube y los dispositivos móviles. OData, un protocolo basado en REST, se basa en HTTP , AtomPub y JSON , utilizando URI para direccionar y acceder a los recursos de fuentes de datos. Permite acceder a la información desde diversas fuentes, incluyendo (pero no limitándose a) bases de datos relacionales, sistemas de archivos, sistemas de gestión de contenido y sitios web tradicionales. OData proporciona una forma de eliminar los silos de datos y aumentar el valor compartido de los datos mediante la creación de un ecosistema en el que los consumidores de datos pueden interactuar con los productores de datos de una manera mucho más potente que la actual, lo que permite que más aplicaciones comprendan un conjunto de datos más amplio. Cada productor y consumidor de datos que participa en este ecosistema aumenta su valor general. [ 8 ]
Entre los participantes del TC se encuentran CA Technologies , Citrix Systems , IBM , Microsoft , Progress Software , Red Hat , SAP SE y SDL .
Arquitectura
OData es un protocolo para la creación y el consumo de API web. Por lo tanto, OData se basa en HTTP, AtomPub y JSON, utilizando URI para direccionar y acceder a los recursos de fuentes de datos.
Identificación de recursos
OData utiliza URI para identificar recursos. Para cada servicio OData cuya raíz de servicio se abrevia como http://host/service/ , se pueden encontrar los siguientes recursos fijos :
El documento de servicio
El documento de servicio enumera los conjuntos de entidades, funciones y singletons que se pueden recuperar. Los clientes pueden usar el documento de servicio para navegar por el modelo mediante hipermedia.
El documento de servicio está disponible en http://host/service/
El documento de metadatos
El documento de metadatos describe los tipos, conjuntos, funciones y acciones que reconoce el servicio OData. Los clientes pueden usar este documento para comprender cómo consultar e interactuar con las entidades del servicio.
El documento de metadatos está disponible en http://host/service/$metadata .
Recursos dinámicos
Las URI para los recursos dinámicos se pueden calcular a partir de la información de hipermedia en el documento de servicio y el documento de metadatos.
Operación de recursos
OData utiliza los verbos HTTP para indicar las operaciones sobre los recursos.
- GET: Obtiene el recurso (una colección de entidades, una sola entidad, una propiedad estructural, una propiedad de navegación, un flujo, etc.).
- PUBLICACIÓN: Crear un nuevo recurso.
- PUT: Actualiza un recurso existente reemplazándolo con una instancia completa.
- PARCHE: Actualiza un recurso existente reemplazando parte de sus propiedades con una instancia parcial.
- ELIMINAR: Eliminar el recurso.
Consultar
Las URL solicitadas desde un punto final OData pueden incluir opciones de consulta. El protocolo OData especifica varias "opciones de consulta del sistema" que los puntos finales deben aceptar; estas se pueden usar para filtrar, ordenar, asignar o paginar datos.
Las opciones de consulta se pueden agregar a una URL después de un ?carácter y están separadas por &caracteres; cada opción consta de un $nombre con el prefijo -sign y su valor, separados por un =signo, por ejemplo: OData/Products?$top=2&$orderby=Name. Se definen varios operadores lógicos y funciones para usar al filtrar datos, por ejemplo: OData/Products?$filter=Price lt 10.00 and startswith(Name,'M')solicita productos con un precio menor a 10 y un nombre que comience con la letra 'M'.
Representación de recursos
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 la representación de datos, mientras que el formato Atom aún se encuentra en fase de especificación por parte de un comité. Para representar el modelo de datos, se utiliza el Lenguaje de Definición de Esquema Común (CSDL), que define una representación XML del modelo de datos de entidad expuesto por los servicios OData.
Un ejemplo de carga útil de datos JSON de OData
Una colección de productos:
{ "@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 , "Precio" : 3,5 }, ... ] }Un ejemplo de carga útil de datos Atom OData
Una 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" > Productos </title><actualizado> 2015-05-19T03:38:50Z </actualizado><link rel= "self" title= "Productos" href= "Productos" /><entrada><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= "Producto" href= "Productos(0)" /><link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Categorías" href= "Products(0)/Categories/$ref" /><link rel= "http://docs.oasis-open.org/odata/ns/related/Categories" type= "application/atom+xml;type=feed" title= "Categorías" href= "Products(0)/Categories" /><link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type= "application/xml" title= "Proveedor" href= "Products(0)/Supplier/$ref" /><link rel= "http://docs.oasis-open.org/odata/ns/related/Supplier" type= "application/atom+xml;type=entry" title= "Proveedor" 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" /><título/><actualizado> 2015-05-19T03:38:50Z </actualizado><autor><nombre/></autor><content type= "application/xml" ><m:propiedades><d:ID m:type= "Int32" > 0 </d:ID><d:Name> Pan </d:Name><d:Description> Pan integral < /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></entrada><entrada><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= "Producto" href= "Productos(1)" /><link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Categories" type= "application/xml" title= "Categorías" href= "Products(1)/Categories/$ref" /><link rel= "http://docs.oasis-open.org/odata/ns/related/Categories" type= "application/atom+xml;type=feed" title= "Categorías" href= "Products(1)/Categories" /><link rel= "http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier" type= "application/xml" title= "Proveedor" href= "Products(1)/Supplier/$ref" /><link rel= "http://docs.oasis-open.org/odata/ns/related/Supplier" type= "application/atom+xml;type=entry" title= "Proveedor" 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" /><título/><actualizado> 2015-05-19T03:38:50Z </actualizado><autor><nombre/></autor><content type= "application/xml" ><m:propiedades><d:ID m:type= "Int32" > 1 </d:ID><d:Name> Leche </d:Name><d:Description> Leche baja en grasa </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></entrada>... </feed>Un ejemplo de documento de metadatos OData
<edmx:Edmx Version= "4.0" xmlns:edmx= "http://docs.oasis-open.org/odata/ns/edmx" ><edmx:DataServices><Esquema Espacio de nombres= "ODataDemo" xmlns= "http://docs.oasis-open.org/odata/ns/edm" ><EntityType Name= "Product" ><Clave><PropertyRef Name= "ID" /></Key><Property Name= "ID" Type= "Edm.Int32" Nullable= "false" /><Propiedad Nombre= "Nombre" Tipo= "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" /></TipoEntidad><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" /></TipoComplejo><EntityContainer Name= "DemoService" ><EntitySet Name= "Products" EntityType= "ODataDemo.Product" ></EntitySet></ContenedorEntidad></Esquema></edmx:DataServices></edmx:Edmx>Aplicaciones
Las aplicaciones incluyen: [ 9 ]
- Progress DataDirect Hybrid Data Pipeline [ 10 ] puede exponer cualquier fuente de datos en la nube, big data o relacional como puntos finales OData.
- Socrata expone una API OData .
- Microsoft Azure expone una API OData .
- Oracle Analytics Cloud (archivado el 19 de agosto de 2022 en Wayback Machine) puede conectarse a una API OData.
- SAP NetWeaver Gateway [ 11 ] proporciona acceso OData a SAP Business Suite y SAP Business Warehouse.
- Se puede acceder al servicio de datos REST de IBM WebSphere eXtreme Scale mediante cualquier cliente HTTP que utilice OData. [ 12 ]
- Microsoft SharePoint 2010 y versiones posteriores pueden exponer sus datos como un punto final OData.
- Office 365 expone las API de OData V4.0. [ 13 ]
- Salesforce Connect consume API OData. [ 14 ]
- Skyvia Connect [ 15 ] expone datos de la nube y de la base de datos a través de OData.
- Tableau puede conectarse a las API de OData. [ 16 ]
- TIBCO Spotfire puede conectarse a las API de OData. [ 17 ]
- Mulesoft [ 18 ] ayuda a integrarse con las API de OData. [ 19 ]
- SuccessFactors [ 20 ] utiliza API de OData
- Dayforce de Ceridian HCM [ 21 ] utiliza Odata [ 22 ]
- Redfish utiliza Odata [ 23 ]
Herramientas
- Base de datos maestra de Nucleon [ 24 ]
Véase también
- GData : un protocolo competidor de Google.
- Marco de descripción de recursos (RDF): un concepto similar del W3C.
- GraphQL : un protocolo popular originario de Facebook/Meta.
Referencias
- ^ Flasko, Mike (18 de julio de 2007). "¡Bienvenido!" . Blogs de MSDN . Equipo de OData. Archivado del original el 5 de mayo de 2014.
- ^ "Comité Técnico del Protocolo de Datos Abiertos (OData) de OASIS" . Consultado el 5 de agosto de 2013 .
- ^ "OASIS aprueba los estándares OData 4.0 para una web abierta y programable" . oasis-open.org . 17 de marzo de 2014.
- ^ "OASIS ha presentado OData v4 y OData JSON Format v4 a ISO/IEC JTC 1 para su aprobación como estándar internacional" . MS Open Tech . Archivado del original el 20 de mayo de 2015. Consultado el 18 de mayo de 2015 .
- ^ "OData publicado como estándar ISO · OData: la mejor manera de usar REST" . www.odata.org . Consultado el 11 de mayo de 2021 .
- ^ "ISO/IEC 20802-1:2016" . ISO . Consultado el 11 de mayo de 2021 .
- ^ "ISO/IEC 20802-2:2016" . ISO . Consultado el 11 de mayo de 2021 .
- ^ "OASIS Open Data Protocol (OData) TC | OASIS" . www.oasis-open.org . Consultado el 24 de septiembre de 2019 .
- ^ "Ecosistema" . odata.org .
- ^ Canalización de datos híbrida Progress DataDirect
- ^ "SAP NetWeaver Gateway" . Archivado del original el 30/11/2012 . Consultado el 22/11/2012 .
- ^ Servicio de datos REST IBM developerWorks eXtreme Scale (OData)
- ^ "Bienvenido a las API de Office 365" . docs.microsoft.com . 28 de agosto de 2018. Consultado el 24 de septiembre de 2019 .
- ^ "Configurar Salesforce Connect para acceder a datos externos con el adaptador OData 2.0 o 4.0" .
- ^ Skyvia Connect
- ^ "OData - Tableau" . help.tableau.com . Consultado el 24 de septiembre de 2019 .
- ^ "OData y Spotfire" . El blog de TIBCO . Consultado el 30 de marzo de 2016 .
- ^ Mulesoft
- ^ "Anypoint Exchange" . www.mulesoft.com . Consultado el 24 de septiembre de 2019 .
- ^ SuccessFactors
- ^ Dayforce de Ceridian HCM
- ^ "Software de informes de RRHH - Dayforce | Ceridian" . www.ceridian.com . Archivado del original el 21 de enero de 2025. Consultado el 24 de septiembre de 2019 .
- ^ "Lo que necesitas saber sobre la API de Redfish" . Exxact . 1 de diciembre de 2017. Consultado el 31 de agosto de 2019 .
- ^ "Nucleon Database Master" . Consultado el 16 de noviembre de 2017 .
Enlaces externos
- Sitio web oficial
- Desarrolle aplicaciones orientadas a servicios con WCF.
- Presentación sobre los conceptos básicos de OData
- Atom (estándar web)
- formatos de sindicación web
- Estándares basados en XML
- Normas ISO/IEC