Arquitectura

El diagrama anterior ilustra la relación entre todos los componentes de Data API Builder, incluyendo archivos de esquema, abstracciones, archivos de configuración y los endpoints resultantes de GraphQL y REST. Esta imagen procede de la documentación de Microsoft, haciendo click en este enlace te llevará allí.

 

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.