Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Opciones de configuración que determinan el comportamiento en tiempo de ejecución.
Configuración de paginación
| Property | Default | Description |
|---|---|---|
| runtime.pagination.max-page-size | Define el máximo de registros por página | |
| runtime.pagination.default-page-size | Establece registros predeterminados por respuesta |
Configuración de REST
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Ruta de acceso base para puntos de conexión REST |
| runtime.rest.enabled | true |
Permite habilitar o deshabilitar solicitudes REST para todas las entidades |
| runtime.rest.request-body-strict | true |
No permite campos extraños en el cuerpo de la solicitud cuando es true |
Configuración de GraphQL
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Permite consultar el esquema de GraphQL subyacente. |
| runtime.graphql.path | "/graphql" |
Ruta de acceso base para el punto de conexión de GraphQL |
| runtime.graphql.enabled | true |
Permite habilitar o deshabilitar solicitudes de GraphQL para todas las entidades |
| runtime.graphql.depth-limit | null |
Profundidad máxima permitida de una consulta GraphQL |
| runtime.graphql.multiple-mutations.create.enabled | false |
Permite mutaciones de creación múltiple para todas las entidades |
Configuración del host
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Tamaño máximo (MB) de la respuesta de base de datos permitida en un único resultado |
| runtime.host.mode | "production" |
Modo de ejecución; "production" o "development" |
Configuración de CORS
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Orígenes de CORS permitidos |
| runtime.host.cors.allow-credentials | false |
Establece el valor del encabezado Access-Control-Allow-Credentials |
Configuración de autenticación
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | Unauthenticated |
Proveedor de autenticación |
| runtime.host.authentication.jwt.audience | null |
Audiencia de JWT |
| runtime.host.authentication.jwt.issuer | null |
Emisor de JWT |
Configuración de caché
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Habilita el almacenamiento en caché de respuestas globalmente |
| runtime.cache.ttl-seconds | 5 |
Período de vida (segundos) para la caché global |
| runtime.cache.level-2.enabled | false |
Habilita la caché de nivel 2 distribuido globalmente |
| runtime.cache.level-2.provider | "redis" |
Proveedor de caché distribuida para la caché de nivel 2 |
| runtime.cache.level-2.connection-string | null |
Cadena de conexión para el proveedor de caché de nivel 2 |
| runtime.cache.level-2.partition | null |
Nombre de partición opcional para aislar el espacio de caché distribuida |
Configuración de compresión
| Property | Default | Description |
|---|---|---|
| runtime.compression.level | optimal |
Nivel de compresión de respuesta HTTP (optimal, fastesto none) |
Configuración de telemetría
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Cadena de conexión de Application Insights |
| runtime.telemetry.application-insights.enabled | true |
Habilita o deshabilita la telemetría de Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
Dirección URL del recopilador de OpenTelemetry |
| runtime.telemetry.open-telemetry.headers | {} |
Encabezados de exportación de OpenTelemetry |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Nombre del servicio OpenTelemetry |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
Protocolo OpenTelemetry ("grpc" o "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Habilita o deshabilita OpenTelemetry |
| runtime.telemetry.open-telemetry.enabled | true |
Habilita o deshabilita OpenTelemetry |
| runtime.telemetry.azure-log-analytics.enabled | false |
Habilita o deshabilita Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.dab-identifier | "DabLogs" |
Identificador de DAB en Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.flush-interval-seconds | 5 |
Intervalo entre inserciones por lotes de registro (segundos) |
| runtime.telemetry.azure-log-analytics.auth.custom-table-name | null |
Nombre de tabla personalizado para Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id | null |
Identificador inmutable de la regla de recopilación de datos |
| runtime.telemetry.azure-log-analytics.auth.dce-endpoint | null |
Dirección URL del punto de conexión de recopilación de datos |
| runtime.telemetry.file.enabled | false |
Habilita o deshabilita el registro del receptor de archivos |
| runtime.telemetry.file.path | "/logs/dab-log.txt" |
Ruta de acceso de archivo para los registros de telemetría |
| runtime.telemetry.file.rolling-interval | "Day" |
Intervalo gradual para los archivos de registro |
| runtime.telemetry.file.retained-file-count-limit | 1 |
Número máximo de archivos de registro retenidos |
| runtime.telemetry.file.file-size-limit-bytes | 1048576 |
Tamaño máximo de archivo en bytes antes de la puesta al día |
| runtime.telemetry.log-level.namespace | null |
Invalidación del nivel de registro específico del espacio de nombres |
| runtime.health.enabled | true |
Habilita o deshabilita el punto de conexión de comprobación de estado globalmente. |
| runtime.health.roles | null |
Roles permitidos para el punto de conexión de mantenimiento completo |
| runtime.health.cache-ttl-seconds | 5 |
Período de vida (segundos) para la entrada de caché del informe de comprobación de estado |
| runtime.health.max-query-parallelism | 4 |
Número máximo de consultas de comprobación de estado simultáneas (intervalo: 1-8) |
Configuración de MCP
| Property | Default | Description |
|---|---|---|
| runtime.mcp.enabled | true |
Habilita o deshabilita el punto de conexión de MCP globalmente |
| runtime.mcp.path | "/mcp" |
Ruta de acceso base para el punto de conexión de MCP |
| runtime.mcp.description | null |
Descripción del servidor enviada a clientes MCP durante la inicialización |
| runtime.mcp.dml-tools | true |
Habilita o deshabilita todas las herramientas DML o un objeto para el control por herramienta |
| runtime.mcp.dml-tools.describe-entities | true |
Habilita la herramienta describe_entities |
| runtime.mcp.dml-tools.create-record | true |
Habilita la herramienta create_record |
| runtime.mcp.dml-tools.read-records | true |
Habilita la herramienta read_records |
| runtime.mcp.dml-tools.update-record | true |
Habilita la herramienta update_record |
| runtime.mcp.dml-tools.delete-record | true |
Habilita la herramienta delete_record |
| runtime.mcp.dml-tools.execute-entity | true |
Habilita la herramienta execute_entity |
| runtime.mcp.dml-tools.aggregate-records | true |
Habilita la herramienta aggregate_records (booleana o objeto con tiempo de espera de consulta) |
Introducción al formato
{
"runtime": {
"pagination": {
"max-page-size": <integer|null> (default: `100000`),
"default-page-size": <integer|null> (default: `100`)
},
"rest": {
"path": <string> (default: "/api"),
"enabled": <true>|<false>,
"request-body-strict": <true>|<false> (default: `true`)
},
"graphql": {
"path": <string> (default: "/graphql"),
"enabled": <true>|<false>,
"allow-introspection": <true>|<false>,
"depth-limit": <integer|null> (default: `null`),
"multiple-mutations": {
"create": {
"enabled": <true>|<false> (default: `false`)
}
}
},
"host": {
"mode": <"production"> (default) | <"development">,
"max-response-size-mb": <integer|null> (default: `158`),
"cors": {
"origins": [ "<string>" ],
"allow-credentials": <true>|<false> (default: `false`)
},
"authentication": {
"provider": <string> (default: "Unauthenticated"),
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
},
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
},
"cache": {
"enabled": <true>|<false> (default: `false`),
"ttl-seconds": <integer> (default: `5`),
"level-2": {
"enabled": <true>|<false> (default: `false`),
"provider": <"redis">,
"connection-string": <string>,
"partition": <string>
}
},
"telemetry": {
"application-insights": {
"connection-string": "<string>",
"enabled": <true>|<false> (default: `true`)
},
"open-telemetry": {
"endpoint": "<string>",
"headers": "<string>",
"service-name": <string> (default: "dab"),
"exporter-protocol": <"grpc"> (default) | <"httpprotobuf">,
"enabled": <true>|<false> (default: `true`)
},
"azure-log-analytics": {
"enabled": <true>|<false> (default: `false`),
"dab-identifier": <string> (default: "DabLogs"),
"flush-interval-seconds": <integer> (default: `5`),
"auth": {
"custom-table-name": <string>,
"dcr-immutable-id": <string>,
"dce-endpoint": <string>
}
},
"file": {
"enabled": <true>|<false> (default: `false`),
"path": <string> (default: "/logs/dab-log.txt"),
"rolling-interval": <string> (default: "Day"),
"retained-file-count-limit": <integer> (default: `1`),
"file-size-limit-bytes": <integer> (default: `1048576`)
},
"log-level": {
// namespace keys
"<namespace>": <"trace"|"debug"|"information"|"warning"|"error"|"critical"|"none"|null>
}
},
"health": {
"enabled": <true>|<false> (default: `true`),
"roles": [ "<string>" ],
"cache-ttl-seconds": <integer> (default: `5`),
"max-query-parallelism": <integer> (default: `4`)
},
"mcp": {
"enabled": <true>|<false> (default: `true`),
"path": <string> (default: `"/mcp"`),
"description": <string>,
"dml-tools": <true>|<false> | {
"describe-entities": <true>|<false> (default: `true`),
"create-record": <true>|<false> (default: `true`),
"read-records": <true>|<false> (default: `true`),
"update-record": <true>|<false> (default: `true`),
"delete-record": <true>|<false> (default: `true`),
"execute-entity": <true>|<false> (default: `true`),
"aggregate-records": <true>|<false> | {
"enabled": <true>|<false> (default: `true`),
"query-timeout": <integer> (default: `30`)
}
}
}
}
}
Modo (tiempo de ejecución del host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
host |
enumeración (production | development) |
❌ No | production |
Comportamiento de desarrollo
- Nitro habilitado (anteriormente Banana Cake Pop) para las pruebas de GraphQL
- Interfaz de usuario de Swagger habilitada para pruebas REST
- Comprobaciones de estado anónimas habilitadas
- Mayor detalle de registro (depuración)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Tamaño máximo de respuesta (tiempo de ejecución del host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
integer | ❌ No | 158 |
Establece el tamaño máximo (en megabytes) para cualquier resultado determinado. Como las respuestas grandes pueden tensar el sistema, max-response-size-mb limita el tamaño total (diferente del recuento de filas) para evitar la sobrecarga, que es especialmente con columnas grandes como texto o JSON.
| Value | Result |
|---|---|
| no establecido | Usar el valor predeterminado |
null |
Usar el valor predeterminado |
integer |
Entero positivo de 32 bits |
<= 0 |
No está soportado |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
object | ❌ No | - |
Configuración global de GraphQL.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ No | None |
runtime.graphql |
path |
string | ❌ No | "/graphql" |
runtime.graphql |
depth-limit |
integer | ❌ No | Ninguno (ilimitado) |
runtime.graphql |
allow-introspection |
boolean | ❌ No | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ No | False |
Notas de la propiedad
- No se permiten subrutas para la
pathpropiedad . - Use
depth-limitpara restringir las consultas anidadas. - Establézcalo
allow-introspectionenfalsepara ocultar el esquema de GraphQL. - Se usa
multiple-mutationspara insertar varias entidades en una sola mutación.
Format
{
"runtime": {
"graphql": {
"enabled": <true> (default) | <false>
"depth-limit": <integer|null> (default: `null`),
"path": <string> (default: /graphql),
"allow-introspection": <true> (default) | <false>,
"multiple-mutations": {
"create": {
"enabled": <true> | <false> (default)
}
}
}
}
}
Ejemplo: varias mutaciones
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
Mutación de GraphQL
mutation {
createUsers(input: [
{ name: "Alice", age: 30, isAdmin: true },
{ name: "Bob", age: 25, isAdmin: false },
{ name: "Charlie", age: 35, isAdmin: true }
]) {
id
name
age
isAdmin
}
}
REST (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
rest |
object | ❌ No | - |
Configuración de REST global.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ No | None |
runtime.rest |
path |
string | ❌ No | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ No | True |
Notas de la propiedad
- Si global
enabledesfalse, el nivelenabledde entidad individual no importa. - La
pathpropiedad no admite valores de subruta como/api/data. -
request-body-strictse introdujo para ayudar a simplificar los objetos POCO de .NET.
request-body-strict |
Behavior |
|---|---|
true |
Los campos adicionales del cuerpo de la solicitud provocan una BadRequest excepción. |
false |
Se omiten los campos adicionales del cuerpo de la solicitud. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Ejemplo: request-body-strict
- Las columnas con un
default()valor se omiten solo cuandoINSERTsu valor en la carga esnull. Como consecuencia,INSERTlas operaciones endefault()columnas, cuandorequest-body-strictestrue, no pueden dar lugar a valores explícitosnull. Para lograr este comportamiento, se requiere unaUPDATEoperación. - Las columnas con un
default()no se omiten durante independientementeUPDATEdel valor de carga. - Las columnas calculadas siempre se omiten.
- Las columnas generadas automáticamente siempre se omiten.
Tabla de ejemplo
CREATE TABLE Users (
Id INT PRIMARY KEY IDENTITY, -- auto-generated column
Name NVARCHAR(50) NOT NULL,
Age INT DEFAULT 18, -- column with default
IsAdmin BIT DEFAULT 0, -- column with default
IsMinor AS IIF(Age <= 18, 1, 0) -- computed column
);
Carga de solicitud
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Insertar comportamiento cuando request-body-strict = false
INSERT INTO Users (Name) VALUES ('Alice');
-- Default values for Age (18) and IsAdmin (0) are applied by the database.
-- IsMinor is ignored because it’s a computed column.
-- ExtraField is ignored.
-- The database generates the Id value.
Carga de respuesta
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Comportamiento de actualización cuando request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Carga de respuesta
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (tiempo de ejecución de host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
object | ❌ No | - |
Configuración de CORS global.
Tip
CORS significa "Uso compartido de recursos entre orígenes". Se trata de una característica de seguridad del explorador que controla si las páginas web pueden realizar solicitudes a un dominio diferente al que les ha servido.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ No | False |
runtime.host.cors |
origins |
matriz de cadena | ❌ No | None |
Note
La allow-credentials propiedad establece el Access-Control-Allow-Credentials encabezado CORS.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> | <false> (default),
"origins": ["<array-of-strings>"]
}
}
}
}
Note
El carácter comodín * es válido como un valor para origins.
Proveedor (entorno de ejecución del host de autenticación)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
enumeración (Unauthenticated | StaticWebApps | AppService | EntraId | Custom | Simulator) |
❌ No | Unauthenticated |
Selecciona el método de autenticación. Cada proveedor valida la identidad de forma diferente. Para la configuración paso a paso, consulte las guías paso a paso de la tabla siguiente.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Resumen del proveedor
| Provider | Caso de uso | Origen de identidad | Guía paso a paso |
|---|---|---|---|
Unauthenticated |
DAB se encuentra detrás de un front-end de confianza (valor predeterminado) | Ninguno: todas las solicitudes se ejecutan como anonymous |
Configuración del proveedor no autenticado |
AppService |
Aplicaciones hospedadas en Azure (EasyAuth) | Encabezado X-MS-CLIENT-PRINCIPAL |
Configuración de la autenticación de App Service |
EntraID |
Microsoft Entra ID (Azure AD) | Token de portador JWT | Configurar la autenticación Entra ID |
Custom |
IdP de terceros (Okta, Auth0) | Token de portador JWT | Configuración de la autenticación JWT personalizada |
Simulator |
Solo pruebas locales | Simulada | Configuración de la autenticación del simulador |
Note
Anteriormente, el EntraId proveedor se denominaba AzureAd. El nombre anterior sigue funcionando por compatibilidad.
Sin autenticar (valor predeterminado)
Cuando Unauthenticated se establece (o no se especifica ningún proveedor), DAB no inspecciona ni valida ningún JWT. Todas las solicitudes se ejecutan como rol anonymous . Un servicio front-end, como Azure API Management o una puerta de enlace de aplicaciones, todavía puede controlar la autenticación o la directiva de acceso antes de que las solicitudes lleguen a DAB, pero DAB sigue autorizando solo como anonymous.
Important
Cuando Unauthenticated está activo y authenticated los roles personalizados definidos en los permisos de entidad nunca se activan. Si la configuración contiene esos roles, DAB emite una advertencia al iniciarse.
{
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
AppService
Confía en los encabezados de identidad insertados por EasyAuth de Azure App Service.
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
EntraID
Valida los tokens JWT emitidos por microsoft Entra ID.
{
"host": {
"authentication": {
"provider": "EntraId",
"jwt": {
"audience": "<application-id>",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
}
}
}
}
Custom
Valida tokens JWT de proveedores de identidades de terceros.
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<api-audience>",
"issuer": "https://<your-idp-domain>/"
}
}
}
}
Simulador
Simula la autenticación para el desarrollo y las pruebas locales.
{
"host": {
"authentication": {
"provider": "Simulator"
}
}
}
Important
El Simulator proveedor solo funciona cuando runtime.host.mode es development. DAB no se inicia si el simulador está configurado en modo de producción.
Selección de roles
Para todos los proveedores excepto Simulador, el X-MS-API-ROLE encabezado selecciona qué rol se va a usar en las notificaciones del usuario autenticado. Si se omite, la solicitud usa el rol del Authenticated sistema. Para más información sobre la evaluación de roles, consulte Introducción a la autorización.
JWT (entorno de ejecución del host de autenticación)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
object | ❌ No | - |
Configuración global de JSON Web Token (JWT).
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ✔️ Sí* | None |
runtime.host.authentication.jwt |
issuer |
string | ✔️ Sí* | None |
* Ambos audience y issuer son necesarios cuando el jwt objeto está presente. El jwt propio objeto es necesario cuando el proveedor es EntraID, AzureADo Custom.
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Paginación (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
object | ❌ No | - |
Límites de paginación global para puntos de conexión REST y GraphQL.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ No | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ No | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ No | false |
Valores admitidos de tamaño máximo de página
| Value | Result |
|---|---|
integer |
Se admite cualquier entero positivo de 32 bits. |
0 |
No está soportado. |
-1 |
El valor predeterminado es el valor máximo admitido. |
< -1 |
No está soportado. |
Valores admitidos de tamaño de página predeterminado
| Value | Result |
|---|---|
integer |
Cualquier entero positivo menor que el max-page-sizeactual. |
0 |
No está soportado. |
-1 |
El valor predeterminado es el valor de max-page-size actual. |
< -1 |
No está soportado. |
Comportamiento relativo al vínculo siguiente
Cuando next-link-relative es true, los valores de paginación nextLink usan direcciones URL relativas en lugar de direcciones URL absolutas.
| Value | Example |
|---|---|
false (valor predeterminado) |
"nextLink": "https://localhost:5001/api/users?$after=..." |
true |
"nextLink": "/api/users?$after=..." |
Format
{
"runtime": {
"pagination": {
"max-page-size": <integer; default: 100000>,
"default-page-size": <integer; default: 100>,
"next-link-relative": <boolean; default: false>
}
}
}
Note
Cuando el valor es mayor que max-page-size, los resultados se limitan a max-page-size.
Ejemplo: Paginación en REST
Request
GET https://localhost:5001/api/users
Carga de respuesta
{
"value": [
{
"Id": 1,
"Name": "Alice",
"Age": 30,
"IsAdmin": true,
"IsMinor": false
},
{
"Id": 2,
"Name": "Bob",
"Age": 17,
"IsAdmin": false,
"IsMinor": true
}
],
"nextLink": "https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}
Página Siguiente de solicitud
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Ejemplo: Paginación en GraphQL
Carga de solicitud (consulta)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Carga de respuesta
{
"data": {
"users": {
"items": [
{
"Id": 1,
"Name": "Alice",
"Age": 30,
"IsAdmin": true,
"IsMinor": false
},
{
"Id": 2,
"Name": "Bob",
"Age": 17,
"IsAdmin": false,
"IsMinor": true
}
],
"hasNextPage": true,
"endCursor": "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}
}
}
Página Siguiente de solicitud
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Ejemplo: Acceso max-page-size en solicitudes
Use el max-page-size valor estableciendo $limit (REST) o first (GraphQL) en -1.
REST
GET https://localhost:5001/api/users?$limit=-1
GraphQL
query {
users(first: -1) {
items {
...
}
}
}
Compresión (tiempo de ejecución)
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
compression |
object | ❌ No | - |
Configuración de compresión de respuesta HTTP. Cuando se habilita, DAB comprime los cuerpos de respuesta para reducir los tamaños de carga y mejorar las velocidades de transferencia.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.compression |
level |
string | ❌ No | "optimal" |
Valores admitidos para level
| Value | Description | Ahorros de compresión | Impacto en el rendimiento |
|---|---|---|---|
optimal |
Equilibra la relación y la velocidad (valor predeterminado) | Gzip: 90.5% / Brotli: 92.2% | Moderación del uso de CPU, aumento leve de la latencia |
fastest |
Prioriza la velocidad con respecto a la relación | Gzip: 89.8% / Brotli: 91.1% | Uso de CPU bajo, latencia mínima |
none |
Sin compresión | 0% (línea base: 12 673 bytes) | None |
Encabezados HTTP de cliente
El encabezado del Accept-Encoding cliente invoca la compresión. Los algoritmos admitidos son Gzip y Brotli. La level configuración configura la estrategia de compresión cuando el cliente y el servidor admiten varios algoritmos.
Encabezados admitidos
| Encabezado HTTP | Algoritmo usado |
|---|---|
Accept-Encoding: gzip |
Gzip |
Accept-Encoding: br |
Brotli |
Format
{
"runtime": {
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
}
}
}
Example
{
"runtime": {
"compression": {
"level": "optimal"
}
}
}
Caché (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
cache |
object | ❌ No | - |
Configuración de caché global.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ No | False |
runtime.cache |
ttl-seconds |
integer | ❌ No | 5 |
runtime.cache |
level-2 |
object | ❌ No | - |
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache.level-2 |
enabled |
boolean | ❌ No | False |
runtime.cache.level-2 |
provider |
string | ❌ No | redis |
runtime.cache.level-2 |
connection-string |
string | ❌ No | None |
runtime.cache.level-2 |
partition |
string | ❌ No | None |
Tip
La propiedad de nivel cache.ttl-seconds de entidad tiene como valor predeterminado este valor global.
Tip
Para ver ejemplos de configuración de un extremo a otro, comportamiento de nivel de caché y Redis, consulte Implementación de la caché de nivel 2.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level-2": {
"enabled": <boolean>,
"provider": "redis",
"connection-string": <string>,
"partition": <string>
}
}
}
}
Important
Si global enabled es false, el nivel enabled de entidad individual no importa.
Cuando level-2.enabled es true, DAB usa el proveedor de caché distribuida configurado además de la memoria caché local en memoria. Una entidad configurada con el nivel L1L2 de caché comprueba primero la caché local y, después, la caché distribuida, antes de ir a la base de datos.
Telemetría (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
object | ❌ No | - |
Configuración de telemetría global.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dictionary | ❌ No | None |
runtime.telemetry |
application-insights |
object | ❌ No | - |
runtime.telemetry |
open-telemetry |
object | ❌ No | - |
runtime.telemetry |
azure-log-analytics |
object | ❌ No | - |
runtime.telemetry |
file |
object | ❌ No | - |
Configura el nivel de detalle del registro por espacio de nombres. Esta configuración sigue las convenciones de registro estándar de .NET y permite un control pormenorizado, aunque supone cierta familiaridad con los internos del Generador de API de datos. Data API Builder es de código abierto: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level se puede volver a cargar en caliente tanto en desarrollo como en producción. Actualmente es la única propiedad que admite la recarga activa en producción.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (telemetría)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
object | ❌ No | - |
Configura el registro en Application Insights.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ No | true |
runtime.telemetry.application-insights |
connection-string |
string | ✔️ Sí | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (telemetría)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
object | ❌ No | - |
Configura el registro en Abrir telemetría.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ No | true |
runtime.telemetry.open-telemetry |
endpoint |
string | ✔️ Sí | None |
runtime.telemetry.open-telemetry |
headers |
string | ❌ No | None |
runtime.telemetry.open-telemetry |
service-name |
string | ❌ No | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
enumeración (grpc | httpprotobuf) |
❌ No | grpc |
Hay varios encabezados separados (comas , ).
Format
{
"runtime": {
"telemetry": {
"open-telemetry": {
"enabled": <true> (default) | <false>,
"endpoint": <string>,
"headers": <string>,
"service-name": <string> (default: "dab"),
"exporter-protocol": <"grpc" (default) | "httpprotobuf">
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"open-telemetry": {
"enabled": true,
// a gRPC endpoint example
"endpoint": "http://localhost:4317",
// an HTTP/protobuf endpoint example
"endpoint": "http://localhost:4318/v1/metrics",
"headers": "api-key=key,other-config-value=value",
"service-name": "dab",
}
}
}
}
Obtenga más información sobre OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) es más rápido y admite el streaming, pero requiere más pasos de configuración. HTTP/protobuf (4318) es más sencillo y fácil de depurar, pero menos eficaz.
Azure Log Analytics (telemetría)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
azure-log-analytics |
object | ❌ No | - |
Configura el registro en Azure Log Analytics a través de un punto de conexión de recopilación de datos. Cuando está habilitada, DAB envía datos de telemetría en lotes a un intervalo configurable.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics |
enabled |
boolean | ❌ No | false |
runtime.telemetry.azure-log-analytics |
dab-identifier |
string | ❌ No | "DabLogs" |
runtime.telemetry.azure-log-analytics |
flush-interval-seconds |
integer | ❌ No | 5 |
runtime.telemetry.azure-log-analytics |
auth |
object | ✔️ Sí* | - |
*
auth es necesario cuando enabled es true.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics.auth |
custom-table-name |
string | ✔️ Sí* | null |
runtime.telemetry.azure-log-analytics.auth |
dcr-immutable-id |
string | ✔️ Sí* | null |
runtime.telemetry.azure-log-analytics.auth |
dce-endpoint |
string | ✔️ Sí* | null |
* Obligatorio cuando enabled es true.
-
dab-identifier: una etiqueta que se pasa a Log Analytics para ayudar a diferenciar qué registros proceden del generador de Data API. -
flush-interval-seconds: intervalo de tiempo (en segundos) entre el envío de lotes de datos de telemetría. -
custom-table-name: el nombre de la tabla personalizada en Azure Log Analytics donde se almacenan los datos. -
dcr-immutable-id: el identificador inmutable de la regla de recopilación de datos que define cómo se recopilan los datos. -
dce-endpoint: la dirección URL del punto de conexión de recopilación de datos que se usa para enviar datos de telemetría.
Format
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": <true> | <false> (default),
"dab-identifier": <string> (default: "DabLogs"),
"flush-interval-seconds": <integer> (default: 5),
"auth": {
"custom-table-name": "<string>",
"dcr-immutable-id": "<string>",
"dce-endpoint": "<string>"
}
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": true,
"dab-identifier": "MyDabInstance",
"flush-interval-seconds": 10,
"auth": {
"custom-table-name": "DabTelemetry_CL",
"dcr-immutable-id": "dcr-abc123def456",
"dce-endpoint": "https://my-dce.eastus-1.ingest.monitor.azure.com"
}
}
}
}
}
Archivo (telemetría)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
file |
object | ❌ No | - |
Configura la escritura de registros de telemetría en un archivo local. Cuando se habilita, DAB escribe la salida del registro estructurado en la ruta de acceso del archivo especificada con intervalos graduales y límites de tamaño configurables.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.file |
enabled |
boolean | ❌ No | false |
runtime.telemetry.file |
path |
string | ✔️ Sí* | "/logs/dab-log.txt" |
runtime.telemetry.file |
rolling-interval |
enum | ❌ No | "Day" |
runtime.telemetry.file |
retained-file-count-limit |
integer | ❌ No | 1 |
runtime.telemetry.file |
file-size-limit-bytes |
integer | ❌ No | 1048576 |
*
path es necesario cuando enabled es true.
Valores de intervalo gradual
| Value | Description |
|---|---|
Minute |
Nuevo archivo de registro cada minuto |
Hour |
Nuevo archivo de registro cada hora |
Day |
Nuevo archivo de registro todos los días (valor predeterminado) |
Month |
Nuevo archivo de registro cada mes |
Year |
Nuevo archivo de registro cada año |
Infinite |
Nunca se reversión a un nuevo archivo |
Format
{
"runtime": {
"telemetry": {
"file": {
"enabled": <true> | <false> (default),
"path": <string> (default: "/logs/dab-log.txt"),
"rolling-interval": <"Day"> (default) | <"Minute"> | <"Hour"> | <"Month"> | <"Year"> | <"Infinite">,
"retained-file-count-limit": <integer> (default: 1),
"file-size-limit-bytes": <integer> (default: 1048576)
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"file": {
"enabled": true,
"path": "/var/log/dab/dab-telemetry.txt",
"rolling-interval": "Hour",
"retained-file-count-limit": 24,
"file-size-limit-bytes": 5242880
}
}
}
}
MCP (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
mcp |
object | ❌ No | - |
Configura el servidor del Protocolo de contexto de modelo de SQL (MCP), que expone entidades de base de datos como herramientas de MCP para agentes de IA.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Propiedades anidadas
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp |
enabled |
boolean | ❌ No | true |
runtime.mcp |
path |
string | ❌ No | "/mcp" |
runtime.mcp |
description |
string | ❌ No | null |
runtime.mcp |
dml-tools |
booleano o objeto | ❌ No | true |
La dml-tools propiedad acepta un valor booleano para habilitar o deshabilitar todas las herramientas, o un objeto para controlar herramientas individuales:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp.dml-tools |
describe-entities |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
create-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
read-records |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
update-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
delete-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
execute-entity |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
aggregate-records |
booleano o objeto | ❌ No | true |
La aggregate-records herramienta acepta un valor booleano o un objeto con más opciones de configuración:
| Parent | Property | Type | Required | Default | Range |
|---|---|---|---|---|---|
runtime.mcp.dml-tools.aggregate-records |
enabled |
boolean | ❌ No | true |
|
runtime.mcp.dml-tools.aggregate-records |
query-timeout |
integer | ❌ No | 30 |
De 1 a 600 segundos |
Format
{
"runtime": {
"mcp": {
"enabled": <true> (default) | <false>,
"path": <string> (default: "/mcp"),
"description": <string>,
"dml-tools": {
"describe-entities": <true> | <false>,
"create-record": <true> | <false>,
"read-records": <true> | <false>,
"update-record": <true> | <false>,
"delete-record": <true> | <false>,
"execute-entity": <true> | <false>,
"aggregate-records": {
"enabled": <true> | <false>,
"query-timeout": <integer; default: 30>
}
}
}
}
}
Example
{
"runtime": {
"mcp": {
"enabled": true,
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true,
"execute-entity": true,
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Para habilitar o deshabilitar todas las herramientas DML a la vez, establezca en "dml-tools"true o false.
Al deshabilitar una herramienta en el nivel de tiempo de ejecución, la herramienta nunca aparece en la respuesta mcP tools/list y no se puede invocar, independientemente de los permisos de nivel de entidad. Para obtener más información sobre las herramientas de DML individuales, consulte Herramientas de lenguaje de manipulación de datos (DML).
Uso de la CLI
dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true
dab configure --runtime.mcp.dml-tools.aggregate-records.enabled true
Estado (tiempo de ejecución)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
health |
object | ❌ No | - |
Configuración del punto de conexión de comprobación de estado global ()./health
Propiedades anidadas
| Parent | Property | Type | Required | Default | Rango/Notas |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ No | true |
|
runtime.health |
roles |
matriz de cadena | ✔️ Sí* | null |
*Obligatorio en modo de producción |
runtime.health |
cache-ttl-seconds |
integer | ❌ No | 5 |
Min: 0 |
runtime.health |
max-query-parallelism |
integer | ❌ No | 4 |
Min: One, Max: Ocho (abrazado) |
Comportamiento en desarrollo frente a producción
| Condition | Comportamiento de desarrollo | Comportamiento de producción |
|---|---|---|
health.enabled = falso |
403 estado |
403 estado |
health.enabled = verdadero |
Depende del rol | Depende del rol |
roles omitido o null |
Estado mostrado |
403 estado |
rol actual no en roles |
403 estado |
403 estado |
rol actual en roles |
Estado mostrado | Estado mostrado |
roles Incluye anonymous |
Estado mostrado | Estado mostrado |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Si global enabled es false, el nivel enabled de entidad individual no importa.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}