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 | null |
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 |
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 | false |
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.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) |
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: "AppService"),
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
},
"cache": {
"enabled": <true>|<false> (default: `false`),
"ttl-seconds": <integer> (default: `5`)
},
"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`)
},
"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`)
}
}
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 rutas de acceso secundarias 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> (default) | <false>
}
}
}
}
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>
}
}
}
Note
Al implementar data API Builder mediante Static Web Apps (versión preliminar), el servicio de Azure inserta automáticamente otra subruta /data-api en la dirección URL. Este comportamiento garantiza la compatibilidad con las características existentes de Static Web App. El punto de conexión resultante sería /data-api/api/<entity>. Esta nota solo es relevante para Static Web Apps.
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 ello, 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". Es 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> (default) | <false>,
"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 (AppService | EntraId | Custom | Simulator) |
❌ No | AppService |
Define el método de autenticación que usa el generador de Data API.
Solo anónimo (proveedor de autenticación)
{
"host": {
// omit the authentication section
}
}
Cuando se omite toda authentication la sección del archivo dab-config.json, no se usa ningún proveedor de autenticación. En este caso, data API builder funciona en modo "sin autenticación". En este modo, DAB no busca ningún token ni Authorization encabezado. El X-MS-API-ROLE encabezado también se omite en esta configuración.
[! Nota] Todas las solicitudes que entran en el motor se asignan automáticamente e inmediatamente al rol de sistema de
anonymous. A continuación, el control de acceso se controla exclusivamente mediante los permisos que defina en cada entidad.
Ejemplo de permisos de entidad.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
}
}
En este ejemplo, dado que no hay ningún authentication proveedor configurado, todas las solicitudes entrantes se consideran automáticamente de un anonymous usuario. La permissions matriz de la Book entidad concede explícitamente al anonymous rol la capacidad de realizar read operaciones. Cualquier intento de realizar otras acciones (como create, update, delete) o acceder a otras entidades no configuradas para anonymous el acceso se deniega.
StaticWebApps (proveedor de autenticación) [en desuso]
{
"host": {
"authentication": {
"provider": "StaticWebApps"
}
}
}
Este proveedor está en desuso porque la característica Data Connections de versión preliminar de Static Web Apps se retiró en noviembre de 2025. Aunque sigue siendo funcional, se diseñó para una implementación heredada de la autenticación en Azure Static Web Apps. Los desarrolladores deben migrar al proveedor para mejorar la AppService compatibilidad a largo plazo y la coherencia con la plataforma "Easy Auth" más amplia de Azure.
[! Nota] La migración no es tan simple como cambiar el nombre del proveedor en el archivo de configuración. Los
StaticWebAppsproveedores yAppServiceesperan estructuras JSON diferentes dentro delx-ms-client-principalencabezado para procesar roles.
AppService (proveedor de autenticación)
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
Este proveedor es para aplicaciones hospedadas en Azure App Service, como Azure Container Apps. El entorno de hospedaje de Azure controla la autenticación y, a continuación, pasa la información de identidad del usuario a la aplicación a través de encabezados de solicitud. Está diseñado para desarrolladores que desean una solución de autenticación sencilla y integrada administrada por la plataforma Azure.
Este proveedor no usa un token JWT desde el Authorization encabezado. Se basa en un encabezado especial, X-MS-CLIENT-PRINCIPAL, insertado por la plataforma de App Service. Este encabezado contiene un objeto JSON codificado en base64 con los detalles de identidad del usuario.
Anónimo: si el AppService proveedor está configurado pero una solicitud llega sin el X-MS-CLIENT-PRINCIPAL encabezado , la solicitud se asigna al rol del sistema de anonymous.
El JSON descodificado del X-MS-CLIENT-PRINCIPAL encabezado suele tener este aspecto:
{
"auth_typ": "aad",
"claims": [
{"typ": "roles", "val": "admin"},
{"typ": "roles", "val": "contributor"}
],
"name_typ": "...",
"role_typ": "..."
}
Los roles están incluidos en la claims matriz.
Acerca del encabezado X-MS-API-ROLE
-
Rol y comportamiento: el
X-MS-API-ROLEencabezado se usa para especificar qué rol quiere asumir el usuario para la solicitud actual. El valor de este encabezado debe coincidir con uno de los valores de rol que se encuentran en laclaimsmatriz delX-MS-CLIENT-PRINCIPALobjeto . -
¿Es necesario?: No. Si el
X-MS-API-ROLEencabezado no está presente, la solicitud se procesa en el contexto del rol delauthenticatedsistema. Esto significa que el usuario se reconoce como iniciado sesión, pero no como ningún rol específico definido por la aplicación del token. -
Comportamiento en coincidencia: si se proporciona el
X-MS-API-ROLEencabezado y su valor coincide con un rol en la entidad de seguridad declaimscliente, el usuario asume ese rol para la solicitud. -
Comportamiento en error de coincidencia: si se proporciona el
X-MS-API-ROLEencabezado, pero el valor no coincide con ningún rol en la entidad de seguridad de cliente, la solicitud se rechaza con un403 Forbiddencódigo de estado. Esto garantiza que un usuario no pueda reclamar un rol al que no se le haya asignado.
EntraId (proveedor de autenticación)
{
"host": {
"authentication": {
"provider": "EntraId", // previously AzureAd
"jwt": {
"audience": "00001111-aaaa-2222-bbbb-3333cccc4444",
"issuer": "https://login.microsoftonline.com/98765f43-21ba-400c-a5de-1f2a3d4e5f6a/v2.0"
}
}
}
}
Este proveedor protege los puntos de conexión con identidades de usuario y aplicación en Microsoft Entra. Es ideal para cualquier servicio en el que los usuarios u otros servicios necesiten acceso seguro dentro del inquilino de Entra.
[! NOTA] El
EntraIdproveedor se denominabaAzureAdanteriormente . El nombre anterior sigue funcionando, pero se recomienda a los desarrolladores migrar sus configuraciones deAzureAdaEntraId.
Este proveedor espera un token de portador JWT estándar en el Authorization encabezado emitido por Microsoft Entra. El token debe configurarse para la aplicación específica (mediante la audience notificación). Se espera que los roles para el usuario o la entidad de servicio estén en una notificación dentro del token. El código busca una roles notificación de forma predeterminada.
Anónimo: si el EntraId proveedor está configurado pero una solicitud llega sin el Authorization encabezado , la solicitud se asigna al rol del sistema de anonymous.
Una carga JWT descodificada podría tener este aspecto:
{
"aud": "...", // Audience - your API
"iss": "https://login.microsoftonline.com/{tenant-id}/v2.0", // Issuer
"oid": "...", // User or principal object ID
"roles": [
"reader",
"writer"
],
// ... other claims
}
Acerca del encabezado X-MS-API-ROLE
-
Rol y comportamiento: el
X-MS-API-ROLEencabezado se usa para especificar un rol que el usuario desea asumir para la solicitud. El valor de este encabezado debe coincidir con uno de los valores de rol encontrados en larolesnotificación del token JWT. -
¿Es necesario?: No. Si el
X-MS-API-ROLEencabezado no está presente, la solicitud se procesa en el contexto del rol delauthenticatedsistema. Esto significa que el usuario se reconoce como iniciado sesión, pero no como ningún rol específico definido por la aplicación del token. -
Comportamiento en coincidencia: si se proporciona el
X-MS-API-ROLEencabezado y coincide con un rol en larolesnotificación, el contexto del usuario se establece en ese rol. -
Comportamiento en error de coincidencia: si se proporciona el
X-MS-API-ROLEencabezado pero su valor no coincide con ningún rol de larolesnotificación, la solicitud se rechaza con un403 Forbiddencódigo de estado. Esto garantiza que un usuario no pueda reclamar un rol al que no se le haya asignado.
Personalizado (proveedor de autenticación)
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<client-id-or-api-audience>",
"issuer": "https://<your-domain>/oauth2/default"
}
}
}
}
Este proveedor es para desarrolladores que quieren integrar Data API Builder con un proveedor de identidades de terceros (como Auth0, Okta o un servidor de identidades personalizado) que emite JWT. Proporciona la flexibilidad para configurar los tokens esperados audience y issuer .
El Custom proveedor espera un token de portador JWT estándar en el Authorization encabezado. La diferencia clave del EntraId proveedor es que se configuran los valores válidos issuer y audience en el archivo de configuración del generador de DATA API. El proveedor valida el token comprobando que la autoridad de confianza la emitió. Se espera que los roles del usuario estén en una roles notificación dentro de la carga de JWT.
[! NOTA] En algunos casos, en función del proveedor de identidades de terceros, los desarrolladores deben coertar la estructura de su JWT para que coincida con la estructura esperada por data API Builder (que se muestra a continuación).
Anónimo: si el Custom proveedor está configurado pero una solicitud llega sin el Authorization encabezado , la solicitud se asigna al rol del sistema de anonymous.
Una carga JWT descodificada para un custom proveedor podría tener este aspecto:
{
"aud": "my-api-audience", // Must match configuration
"iss": "https://my-custom-issuer.com/", // Must match configuration
"sub": "user-id",
"roles": [
"editor",
"viewer"
],
// ... other claims
}
Acerca del encabezado X-MS-API-ROLE
-
Rol y comportamiento: el
X-MS-API-ROLEencabezado funciona exactamente igual que con elEntraIdproveedor. Permite al usuario seleccionar uno de sus roles asignados. El valor de este encabezado debe coincidir con uno de los roles de larolesnotificación en el token JWT personalizado. -
¿Es necesario?: No. Si el
X-MS-API-ROLEencabezado no está presente, el usuario se trata como en el rol delauthenticatedsistema. -
Comportamiento en coincidencia: si el
X-MS-API-ROLEvalor del encabezado coincide con un rol en la notificación derolesJWT, el contexto del usuario se establece en ese rol con fines de autorización. -
Comportamiento en error de coincidencia: si el
X-MS-API-ROLEvalor del encabezado no coincide con ningún rol de larolesnotificación, la solicitud se rechaza con un403 Forbiddencódigo de estado. Esto garantiza que un usuario no pueda reclamar un rol al que no se le haya asignado.
Simulador (proveedor de autenticación)
Este proveedor está diseñado para facilitar a los desarrolladores probar su configuración, especialmente authorization las directivas, sin necesidad de configurar un proveedor de autenticación completo, como Entra Identity o EasyAuth. Simula un authenticated usuario.
El Simulator proveedor no usa tokens JWT. La autenticación se simula. Al usar este proveedor, todas las solicitudes se tratan como si provenían de un usuario autenticado.
Acerca del encabezado X-MS-API-ROLE
-
Rol y comportamiento: el
X-MS-API-ROLEencabezado es la única manera de especificar un rol al usar .SimulatorPuesto que no hay ningún token con una lista de roles, el sistema confía implícitamente en el rol enviado en este encabezado. - ¿Es necesario?: No.
-
Comportamiento en ausencia: si el
X-MS-API-ROLEencabezado está ausente, la solicitud se procesa en el contexto del rol delauthenticatedsistema. -
Comportamiento en presencia: si el
X-MS-API-ROLEencabezado está presente, la solicitud se procesa en el contexto del rol especificado en el valor del encabezado. No hay ninguna validación en una lista de notificaciones, por lo que el desarrollador puede simular cualquier rol que necesite para probar sus directivas.
Simulador en producción
Si se establece authentication.provider en Simulator mientras runtime.host.mode es production, Data API Builder no se iniciará.
"host": {
"mode": "production", // or "development"
"authentication": {
"provider": "Simulator"
}
}
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 | ❌ No | None |
runtime.host.authentication.jwt |
issuer |
string | ❌ No | None |
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 {
...
}
}
}
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 |
Tip
La propiedad de nivel cache.ttl-seconds de entidad tiene como valor predeterminado este valor global.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>
}
}
}
Important
Si global enabled es false, el nivel enabled de entidad individual no importa.
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 | - |
Configura el nivel de detalle del registro por espacio de nombres. Esto sigue las convenciones de registro de .NET estándar 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 | False |
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 configuración. HTTP/protobuf (4318) es más sencillo y fácil de depurar, pero menos eficaz.
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: 1, Max: 8 (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
}
}