Definición y propósito
OData (Open Data Protocol) es un estándar abierto, mantenido por OASIS, para construir y consumir APIs RESTful con metadatos enriquecidos. Fue desarrollado originalmente por Microsoft y publicado como estándar abierto en 2014 (versión 4.0). Su propósito: ofrecer una capa de protocolo común que permita a cualquier cliente conectarse a cualquier fuente de datos sin tener que aprender un API custom para cada uno.
A diferencia de un API REST genérico, OData define formalmente:
- Operaciones CRUD: GET, POST, PATCH, DELETE con semántica estricta.
- Filtrado, ordenación y paginación: con sintaxis estandarizada (
$filter=Status eq 'Open',$orderby=DocDate desc,$top=100,$skip=200). - Expansión de relaciones: traer entidades relacionadas en una sola llamada (
$expand=SalesLines). - Selección de campos: solo los campos necesarios (
$select=No,Description,UnitPrice). - Metadatos en runtime: el endpoint
/$metadatadescribe el modelo completo del servicio en XML, lo que permite a cualquier cliente entender qué hay disponible sin documentación externa. - Funciones y acciones: invocación de lógica de negocio del servidor.
OData en Business Central
Business Central expone toda su lógica de negocio vía dos tipos de endpoints:
- API endpoints (v2.0): APIs REST modernas, estables, versionadas. Pensadas para integraciones serias con sistemas externos.
- OData endpoints: páginas y queries publicadas como servicios web. Más flexibles que las APIs (cualquier página publicada se convierte en endpoint OData en segundos), pero menos estables (cambios en la página rompen el endpoint).
La URL típica de un OData en BC es:
https://api.businesscentral.dynamics.com/v2.0/<tenant>/<environment>/ODataV4/Company('<empresa>')/<PageName>
Casos de uso habituales:
- Power BI se conecta a BC vía OData para construir cuadros de mando.
- Excel importa datos vía Power Query usando OData como source.
- Power Automate / Logic Apps orquestan flujos contra BC vía OData.
- Sistemas externos (CRM, web, PIM, BI) consumen OData para sincronizar maestros y movimientos.
OData vs API REST custom
| Dimensión | OData | API REST custom |
|---|---|---|
| Estándar | Sí (OASIS) | No |
| Metadatos en runtime | Sí (/$metadata) | Requieren OpenAPI/Swagger separado |
| Filtrado/ordenación | Sintaxis estándar | Cada API define la suya |
| Velocidad de desarrollo | Muy rápida en BC | Requiere desarrollo AL |
| Estabilidad | Frágil ante cambios de página | Versionado controlado |
| Documentación | Auto-documentado | A cargo del desarrollador |
La elección depende del consumo: para integraciones puntuales o de bajo riesgo, OData es imbatible en velocidad; para integraciones críticas y a largo plazo, API REST versionada es más robusta.
Cómo se aplica en Business Central
dvdata-analysis sobre Business Central explota OData como columna vertebral del reporting:
- Power BI conectado en directo a BC vía OData con refresh incremental, lo que permite cuadros de mando con datos del minuto sin replicar a un data warehouse intermedio.
- Catálogo de queries publicadas específicas para BI, optimizadas para que Power BI ejecute filtros en servidor (server-side filtering) y no descargue miles de filas innecesarias.
- Endpoints de maestros (clientes, proveedores, artículos) para que sistemas externos (CRM, e-commerce, PIM) sincronicen información sin doble fuente de verdad.
- Conciliación bidireccional: OData soporta también escritura, lo que permite que apps externas (campo, comercial, planta) actualicen datos en BC en tiempo real.
Errores frecuentes
- Exponer toda la página sin selección. Si la página tiene 80 campos y el cliente solo necesita 8, la página entera viaja por la red. Usar
$selectreduce ancho de banda en órdenes de magnitud. - Filtrar en cliente, no en servidor. Traer 100.000 registros y filtrar en Excel es matar el endpoint y la red. Aplicar
$filteren URL reduce a 100 registros y resuelve el problema en segundos. - Confundir OData con APIs estables. Cambiar una página publicada (renombrar un campo) rompe inmediatamente todos los clientes OData. Para integraciones críticas usar API endpoints versionados.
- No autenticar correctamente. OData en BC requiere autenticación OAuth 2.0 (no basic auth desde 2022). Heredar configuraciones legacy de autenticación básica genera rotura súbita al cambio de versión.