Compartir a través de


Runtime

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 path propiedad .
  • Use depth-limit para restringir las consultas anidadas.
  • Establézcalo allow-introspection en false para ocultar el esquema de GraphQL.
  • Se usa multiple-mutations para 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 enabled es false, el nivel enabled de entidad individual no importa.
  • La path propiedad no admite valores de subruta como /api/data.
  • request-body-strict se 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 cuando INSERT su valor en la carga es null. Como consecuencia, INSERT las operaciones en default() columnas, cuando request-body-strict es true, no pueden dar lugar a valores explícitos null . Para lograr este comportamiento, se requiere una UPDATE operación.
  • Las columnas con un default() no se omiten durante independientemente UPDATE del 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).

Diagrama de compatibilidad con tokens web JSON en Data API Builder.

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.

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
  }
}