Arquitectura

Características
- Soporte para colecciones NoSQL y tablas relacionales, vistas y procedimientos almacenados.
- Soporte para múltiples fuentes de datos simultáneamente.
- Autenticación a través de OAuth2/JWT, EasyAuth y Microsoft Entra Identity.
- Seguridad a nivel de ítem mediante expresiones de políticas.
- Endpoints REST (POST, GET, PUT, PATCH, DELETE) con filtrado, ordenación y paginación, y caché en memoria.
- Soporte nativo para OpenAPI y endpoints de GraphQL con consultas, mutaciones y navegación de relaciones.
- Desarrollo fácil mediante CLI dedicada.
- Integración con Azure Static Web Apps.
- DAB también se integra perfectamente con Application Insights y soporta múltiples fuentes de datos backend, incluyendo:
- SQL Server
- Azure SQL
- Azure Cosmos DB para NoSQL
- PostgreSQL y Azure Database para PostgreSQL
- MySQL y Azure Database para MySQL
- Azure SQL Data Warehouse
Beneficios de Usar Data API Builder
- Data API Builder puede reducir el código en un tercio, eliminar la necesidad de suites de pruebas unitarias, acortar los pipelines de CI/CD e introducir estándares y capacidades avanzadas típicamente reservadas para los equipos de desarrollo más grandes. Es seguro, con muchas funcionalidades y sencillo, escalable y observable.
Instalación y Uso de DAB
dotnet tool install Microsoft.DataApiBuilder --global
dab init --database-type mssql --connection-string "@env('sqldb')"
dab add MyTable --source "dbo.mytable" --permissions "anonymous:*"
dab start
Archivo de configuración DAB
El archivo dab-config.json
contiene la configuración de DAB, incluyendo la conexión a la base de datos, entidades, seguridad y más. Aquí un ejemplo de configuración para una entidad MyTable
:
{
"entities": {
"MyTable": {
"source": {
"object": "dbo.mytable",
"type": "table"
},
"graphql": { "enabled": true },
"rest": { "enabled": true },
"permissions": [
{
"role": "anonymous",
"actions": [{ "action": "*" }]
}
]
}
}
}
Relaciones entre Entidades
DAB permite definir relaciones entre entidades para recuperar datos relacionados.
Por ejemplo, una relación de 1 a n:
dab add MySubTable --source "dbo.mysubtable" --permissions "anonymous:*"
dab update MySubTable --relationship MyTable --target.entity MyTable --cardinality many
Como es más sencillo verlo con GraphQL, os muestro la consulta y el resultado:
//query
query {
mysubtable {
items {
property_name
mytable {
items {
property_name
}
}
}
}
}
//result
{
"data": {
"mysubtable": {
"items": [
{
"property_name": "Calle X, Num 13, Población, Pais",
"mytable": {
"items": [
{
"water_contracting_id": "1",
"light_contracting_id": "1"
}
]
}
}
]
}
}
}
Extenderde DAB
Aunque DAB se enfoca en la generación de endpoints para escenarios CRUD, existen formas de extender sus funcionalidades con un poco de trabajo adicional.
Por ejemplo, puedes exponer procedimientos almacenados como entidades o utilizar funciones serverless para ejecutar lógica personalizada antes de almacenar una nueva entidad en la base de datos.
Opciones de Hosting
DAB es compatible con Docker, lo que facilita su despliegue.
Por ejemplo en Azure puedes usar:
- Azure Kuberentes Service
- Azure Container Apps
- Azure Container Instances
- Azure App Service
- Azure Functions
Y como se usa Docker puede usar AWS EKS, AWS Fargate o Google GKE, entre otras opciones.
Conclusión
Data API Builder nos permite enfocarnos en agregar valor en lugar de dedicarnos a la construcción repetitiva de APIs CRUD.