Partager via


Runtime

Paramètres de configuration qui déterminent le comportement d’exécution.

Paramètres de pagination

Property Default Description
runtime.pagination.max-page-size Définit le nombre maximal d’enregistrements par page
runtime.pagination.default-page-size Définit les enregistrements par défaut par réponse

Paramètres REST

Property Default Description
runtime.rest.path "/api" Chemin d’accès de base pour les points de terminaison REST
runtime.rest.enabled true Autorise l’activation ou la désactivation des requêtes REST pour toutes les entités
runtime.rest.request-body-strict true Interdit les champs superflus dans le corps de la demande quand la valeur est true

Paramètres GraphQL

Property Default Description
runtime.graphql.allow-introspection true Permet l’interrogation du schéma GraphQL sous-jacent
runtime.graphql.path "/graphql" Chemin d’accès de base pour le point de terminaison GraphQL
runtime.graphql.enabled true Autorise l’activation ou la désactivation des requêtes GraphQL pour toutes les entités
runtime.graphql.depth-limit null Profondeur maximale autorisée d’une requête GraphQL
runtime.graphql.multiple-mutations.create.enabled false Permet de créer plusieurs mutations pour toutes les entités

Paramètres de l’hôte

Property Default Description
runtime.host.max-response-size-mb 158 Taille maximale (Mo) de la réponse de base de données autorisée dans un résultat unique
runtime.host.mode "production" Mode en cours d’exécution ; "production" ou "development"

Paramètres CORS

Property Default Description
runtime.host.cors.origins [] Origines CORS autorisées
runtime.host.cors.allow-credentials false Définit la valeur de l’en-tête Access-Control-Allow-Credentials

Paramètres d’authentification

Property Default Description
runtime.host.authentication.provider Unauthenticated Fournisseur d’authentification
runtime.host.authentication.jwt.audience null Audience JWT
runtime.host.authentication.jwt.issuer null Émetteur JWT

Paramètres du cache

Property Default Description
runtime.cache.enabled false Active la mise en cache des réponses globalement
runtime.cache.ttl-seconds 5 Durée de vie (secondes) du cache global
runtime.cache.level-2.enabled false Active globalement le cache de niveau 2 distribué
runtime.cache.level-2.provider "redis" Fournisseur de cache distribué pour le cache de niveau 2
runtime.cache.level-2.connection-string null Chaîne de connexion pour le fournisseur de cache de niveau 2
runtime.cache.level-2.partition null Nom de partition facultatif pour isoler l’espace de cache distribué

Paramètres de compression

Property Default Description
runtime.compression.level optimal Niveau de compression de réponse HTTP (optimal, fastestou none)

Paramètres de télémétrie

Property Default Description
runtime.telemetry.application-insights.connection-string null Chaîne de connexion Application Insights
runtime.telemetry.application-insights.enabled true Active ou désactive la télémétrie Application Insights
runtime.telemetry.open-telemetry.endpoint null URL du collecteur OpenTelemetry
runtime.telemetry.open-telemetry.headers {} En-têtes d’exportation OpenTelemetry
runtime.telemetry.open-telemetry.service-name "dab" Nom du service OpenTelemetry
runtime.telemetry.open-telemetry.exporter-protocol "grpc" Protocole OpenTelemetry (« grpc » ou « httpprotobuf »)
runtime.telemetry.open-telemetry.enabled true Active ou désactive OpenTelemetry
runtime.telemetry.open-telemetry.enabled true Active ou désactive OpenTelemetry
runtime.telemetry.azure-log-analytics.enabled false Active ou désactive Azure Log Analytics
runtime.telemetry.azure-log-analytics.dab-identifier "DabLogs" Identificateur de DAB dans Azure Log Analytics
runtime.telemetry.azure-log-analytics.flush-interval-seconds 5 Intervalle entre les envois par lots de journaux (secondes)
runtime.telemetry.azure-log-analytics.auth.custom-table-name null Nom de table personnalisé pour Azure Log Analytics
runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id null ID immuable de la règle de collecte de données
runtime.telemetry.azure-log-analytics.auth.dce-endpoint null URL du point de terminaison de collecte de données
runtime.telemetry.file.enabled false Active ou désactive la journalisation du récepteur de fichiers
runtime.telemetry.file.path "/logs/dab-log.txt" Chemin d’accès de fichier pour les journaux de télémétrie
runtime.telemetry.file.rolling-interval "Day" Intervalle propagé pour les fichiers journaux
runtime.telemetry.file.retained-file-count-limit 1 Nombre maximal de fichiers journaux conservés
runtime.telemetry.file.file-size-limit-bytes 1048576 Taille maximale du fichier en octets avant le déploiement
runtime.telemetry.log-level.namespace null Remplacement au niveau du journal spécifique à l’espace de noms
runtime.health.enabled true Active ou désactive le point de terminaison de contrôle d’intégrité globalement
runtime.health.roles null Rôles autorisés pour le point de terminaison d’intégrité complet
runtime.health.cache-ttl-seconds 5 Durée de vie (secondes) de l’entrée du cache du rapport de contrôle d’intégrité
runtime.health.max-query-parallelism 4 Nombre maximal de requêtes de contrôle d’intégrité simultanées (plage : 1 à 8)

Paramètres MCP

Property Default Description
runtime.mcp.enabled true Active ou désactive le point de terminaison MCP globalement
runtime.mcp.path "/mcp" Chemin d’accès de base pour le point de terminaison MCP
runtime.mcp.description null Description du serveur envoyée aux clients MCP lors de l’initialisation
runtime.mcp.dml-tools true Active ou désactive tous les outils DML ou un objet pour le contrôle par outil
runtime.mcp.dml-tools.describe-entities true Active l’outil describe_entities
runtime.mcp.dml-tools.create-record true Active l’outil create_record
runtime.mcp.dml-tools.read-records true Active l’outil read_records
runtime.mcp.dml-tools.update-record true Active l’outil update_record
runtime.mcp.dml-tools.delete-record true Active l’outil delete_record
runtime.mcp.dml-tools.execute-entity true Active l’outil execute_entity
runtime.mcp.dml-tools.aggregate-records true Active l’outil aggregate_records (booléen ou objet avec délai d’expiration de requête)

Vue d’ensemble du format

{
  "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`)
        }
      }
    }
  }
}

Mode (runtime d’hôte)

Parent Property Type Required Default
runtime host enum (production | development) ❌ Non production

Comportement de développement

  • Enabled Nitro (anciennement Banana Cake Pop) pour les tests GraphQL
  • Activation de l’interface utilisateur Swagger pour les tests REST
  • Vérifications d’intégrité anonymes activées
  • Augmentation du détail de journalisation (débogage)

Format

{
  "runtime": {
    "host": {
      "mode": "production" (default) | "development"
    }
  }
}

Taille de réponse maximale (runtime de l’hôte)

Parent Property Type Required Default
runtime.host max-response-size-mb integer ❌ Non 158

Définit la taille maximale (en mégaoctets) pour un résultat donné. Comme les réponses volumineuses peuvent forcer le système, max-response-size-mb limite la taille totale (différente du nombre de lignes) pour empêcher la surcharge, ce qui est particulièrement avec de grandes colonnes telles que du texte ou JSON.

Value Result
non défini Utiliser la valeur par défaut
null Utiliser la valeur par défaut
integer Entier 32 bits positif
<= 0 Non prise en charge

Format

{
  "runtime": {
    "host": {
      "max-response-size-mb": <integer; default: 158>
    }
  }
}

GraphQL (runtime)

Parent Property Type Required Default
runtime graphql object ❌ Non -

Configuration globale de GraphQL.

Propriétés imbriquées

Parent Property Type Required Default
runtime.graphql enabled boolean ❌ Non None
runtime.graphql path string ❌ Non "/graphql"
runtime.graphql depth-limit integer ❌ Non Aucun (illimité)
runtime.graphql allow-introspection boolean ❌ Non True
runtime.graphql multiple-mutations.create.enabled boolean ❌ Non False

Notes de propriété

  • Les sous-chemins ne sont pas autorisés pour la path propriété.
  • Permet depth-limit de limiter les requêtes imbriquées.
  • Définissez cette option allow-introspection pour false masquer le schéma GraphQL.
  • Permet multiple-mutations d’insérer plusieurs entités dans une seule mutation.

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

Exemple : mutations multiples

Configuration

{
  "runtime": {
    "graphql": {
      "multiple-mutations": {
        "create": {
          "enabled": true
        }
      }
    }
  },
  "entities": {
    "User": {
      "source": "dbo.Users",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["create"] // entity permissions are required
        }
      ]
    }
  }
}

Mutation 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 (temps d'exécution)

Parent Property Type Required Default
runtime rest object ❌ Non -

Configuration REST globale.

Propriétés imbriquées

Parent Property Type Required Default
runtime.rest enabled boolean ❌ Non None
runtime.rest path string ❌ Non "/api"
runtime.rest request-body-strict boolean ❌ Non True

Notes de propriété

  • Si global enabled est false, le niveau enabled d’entité individuel n’a pas d’importance.
  • La path propriété ne prend pas en charge les valeurs de sous-chemin comme /api/data.
  • request-body-strict a été introduit pour simplifier les objets .NET POCO.
request-body-strict Behavior
true Des champs supplémentaires dans le corps de la requête provoquent une BadRequest exception.
false Les champs supplémentaires dans le corps de la demande sont ignorés.

Format

{
  "runtime": {
    "rest": {
      "enabled": <true> (default) | <false>,
      "path": <string> (default: /api),
      "request-body-strict": <true> (default) | <false>
    }
  }
}

Exemple : request-body-strict

  • Les colonnes avec une default() valeur sont ignorées uniquement INSERT lorsque leur valeur dans la charge utile est null. Par conséquent, INSERT les opérations en default() colonnes, quand c’est request-body-strictle castrue, ne peuvent pas entraîner de valeurs explicitesnull. Pour accomplir ce comportement, une UPDATE opération est requise.
  • Les colonnes avec un default() ne sont pas ignorées pendant UPDATE quelle que soit la valeur de la charge utile.
  • Les colonnes calculées sont toujours ignorées.
  • Les colonnes générées automatiquement sont toujours ignorées.

Exemple de table

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
);

Charge utile de la demande

{
  "Id": 999,
  "Name": "Alice",
  "Age": null,
  "IsAdmin": null,
  "IsMinor": false,
  "ExtraField": "ignored"
}

Comportement d’insertion lorsque 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.

Charge utile de la réponse

{
  "Id": 1,          // Auto-generated by the database
  "Name": "Alice",
  "Age": 18,        // Default applied
  "IsAdmin": false, // Default applied
  "IsMinor": true   // Computed
}

Mettre à jour le comportement quand request-body-strict = false

UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.

Charge utile de la réponse

{
  "Id": 1,
  "Name": "Alice Updated",
  "Age": null,
  "IsAdmin": false,
  "IsMinor": false // Recomputed by the database (false when age is `null`)
}

CORS (runtime d’hôte)

Parent Property Type Required Default
runtime.host cors object ❌ Non -

Configuration CORS globale.

Tip

CORS signifie « Partage de ressources cross-origin ». Il s’agit d’une fonctionnalité de sécurité du navigateur qui contrôle si les pages web peuvent effectuer des requêtes à un domaine différent de celui qui les a servis.

Propriétés imbriquées

Parent Property Type Required Default
runtime.host.cors allow-credentials boolean ❌ Non False
runtime.host.cors origins tableau de chaînes ❌ Non None

Note

La allow-credentials propriété définit l’en-tête Access-Control-Allow-Credentials CORS.

Format

{
  "runtime": {
    "host": {
      "cors": {
        "allow-credentials": <true> | <false> (default),
        "origins": ["<array-of-strings>"]
      }
    }
  }
}

Note

Le caractère générique * est valide comme valeur pour origins.

Fournisseur (runtime d’hôte d’authentification)

Parent Property Type Required Default
runtime.host.authentication provider enum (UnauthenticatedSimulator | Custom | | | EntraId | StaticWebAppsAppService) ❌ Non Unauthenticated

Sélectionne la méthode d’authentification. Chaque fournisseur valide l’identité différemment. Pour connaître la configuration pas à pas, consultez les guides pratiques du tableau suivant.

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Résumé du fournisseur

Provider Cas d’utilisation Source d’identité Guide pratique
Unauthenticated DAB se trouve derrière un serveur frontal approuvé (valeur par défaut) Aucun : toutes les requêtes s’exécutent en tant que anonymous Configurer le fournisseur non authentifié
AppService Applications hébergées par Azure (EasyAuth) En-tête X-MS-CLIENT-PRINCIPAL Configurer l’authentification App Service
EntraID Microsoft Entra ID (Azure AD) Jeton du porteur JWT Configurer l’authentification Entra ID
Custom Fournisseurs d’identité tiers (Okta, Auth0) Jeton du porteur JWT Configurer l’authentification JWT personnalisée
Simulator Tests locaux uniquement Simulé Configurer l’authentification du simulateur

Note

Le EntraId fournisseur a été précédemment nommé AzureAd. L’ancien nom fonctionne toujours pour la compatibilité.

Non authentifié (valeur par défaut)

Quand Unauthenticated est défini (ou qu’aucun fournisseur n’est spécifié), DAB n’inspecte ni ne valide aucun JWT. Toutes les requêtes s’exécutent anonymous en tant que rôle. Un service frontal tel que Gestion des API Azure ou une passerelle d’application peut toujours gérer l’authentification ou la stratégie d’accès avant que les requêtes atteignent DAB, mais DAB continue d’autoriser uniquement en tant que anonymous.

Important

Lorsqu’il Unauthenticated est actif authenticated et que les rôles personnalisés définis dans les autorisations d’entité ne sont jamais activés. Si votre configuration contient ces rôles, DAB émet un avertissement au démarrage.

{
  "host": {
    "authentication": {
      "provider": "Unauthenticated"
    }
  }
}

AppService

Approuve les en-têtes d’identité injectés par Azure App Service EasyAuth.

{
  "host": {
    "authentication": {
      "provider": "AppService"
    }
  }
}

EntraID

Valide les jetons JWT émis par l’ID Microsoft Entra.

{
  "host": {
    "authentication": {
      "provider": "EntraId",
      "jwt": {
        "audience": "<application-id>",
        "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
      }
    }
  }
}

Coutume

Valide les jetons JWT des fournisseurs d’identité tiers.

{
  "host": {
    "authentication": {
      "provider": "Custom",
      "jwt": {
        "audience": "<api-audience>",
        "issuer": "https://<your-idp-domain>/"
      }
    }
  }
}

Simulateur

Simule l’authentification pour le développement et les tests locaux.

{
  "host": {
    "authentication": {
      "provider": "Simulator"
    }
  }
}

Important

Le Simulator fournisseur fonctionne uniquement lorsque runtime.host.mode c’est development. DAB ne parvient pas à démarrer si Le simulateur est configuré en mode de production.

Sélection de rôle

Pour tous les fournisseurs, à l’exception du simulateur, l’en-tête X-MS-API-ROLE sélectionne le rôle à utiliser à partir des revendications de l’utilisateur authentifié. Si elle est omise, la requête utilise le Authenticated rôle système. Pour plus d’informations sur l’évaluation des rôles, consultez vue d’ensemble de l’autorisation.

JWT (runtime d’hôte d’authentification)

Parent Property Type Required Default
runtime.host.authentication jwt object ❌ Non -

Configuration JWT (Global JSON Web Token).

Diagramme des jetons web JSON pris en charge dans le générateur d’API de données.

Propriétés imbriquées

Parent Property Type Required Default
runtime.host.authentication.jwt audience string ✔️ Oui* None
runtime.host.authentication.jwt issuer string ✔️ Oui* None

* Les deux audience et issuer sont obligatoires lorsque l’objet jwt est présent. L’objet jwt lui-même est requis lorsque le fournisseur est EntraID, AzureADou Custom.

Format

{
  "runtime": {
    "host": {
      "authentication": {
        "jwt": {
          "audience": "<client-id>",
          "issuer": "<issuer-url>"
        }
      }
    }
  }
}

Pagination (runtime)

Parent Property Type Required Default
runtime pagination object ❌ Non -

Limites de pagination globales pour les points de terminaison REST et GraphQL.

Propriétés imbriquées

Parent Property Type Required Default
runtime.pagination max-page-size int ❌ Non 100,000
runtime.pagination default-page-size int ❌ Non 100
runtime.pagination next-link-relative boolean ❌ Non false

Valeurs prises en charge par la taille maximale de page

Value Result
integer Tout entier 32 bits positif est pris en charge.
0 Non pris en charge.
-1 Correspond par défaut à la valeur maximale prise en charge.
< -1 Non pris en charge.

Valeurs prises en charge par défaut de la taille de page

Value Result
integer Entier positif inférieur à l'max-page-sizeactuel .
0 Non pris en charge.
-1 La valeur par défaut est le paramètre de max-page-size actuel.
< -1 Non pris en charge.

Quand next-link-relative c’est truele cas, les valeurs de pagination nextLink utilisent des URL relatives au lieu d’URL absolues.

Value Example
false (valeur par défaut) "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

Lorsque la valeur est supérieure max-page-sizeà , les résultats sont limités à max-page-size.

Exemple : Pagination dans REST

Request

GET https://localhost:5001/api/users

Charge utile de la réponse

{
  "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=="
}

Page Suivante de la demande

GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==

Exemple : Pagination dans GraphQL

Charge utile de la requête (requête)

query {
  users {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

Charge utile de la réponse

{
  "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=="
    }
  }
}

Page Suivante de la demande

query {
  users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

Exemple : accès max-page-size aux demandes

Utilisez la max-page-size valeur en définissant $limit (REST) ou first (GraphQL) sur -1.

REST

GET https://localhost:5001/api/users?$limit=-1

GraphQL

query {
  users(first: -1) {
    items {
      ...
    }
  }
}

Compression (runtime)

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Parent Property Type Required Default
runtime compression object ❌ Non -

Configuration de la compression de réponse HTTP. Lorsqu’il est activé, DAB compresse les corps de réponse pour réduire les tailles de charge utile et améliorer les vitesses de transfert.

Propriétés imbriquées

Parent Property Type Required Default
runtime.compression level string ❌ Non "optimal"

Valeurs prises en charge pour level

Value Description Économies de compression Impact sur les performances
optimal Équilibre les ratios et la vitesse (valeur par défaut) Gzip : 90,5% / Brotli : 92.2% Utilisation modérée du processeur, légère augmentation de la latence
fastest Hiérarchise la vitesse par rapport aux proportions Gzip : 89.8% / Brotli : 91.1% Faible utilisation du processeur, latence minimale
none Pas de compression 0% (ligne de base : 12 673 octets) None

En-têtes HTTP du client

La compression est appelée par l’en-tête du Accept-Encoding client. Les algorithmes pris en charge sont Gzip et Brotli. Le level paramètre configure la stratégie de compression lorsque le client et le serveur prennent en charge plusieurs algorithmes.

En-têtes pris en charge

En-tête HTTP Algorithme utilisé
Accept-Encoding: gzip Gzip
Accept-Encoding: br Brotli

Format

{
  "runtime": {
    "compression": {
      "level": <"optimal"> (default) | <"fastest"> | <"none">
    }
  }
}

Example

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

Cache (runtime)

Parent Property Type Required Default
runtime cache object ❌ Non -

Configuration globale du cache.

Propriétés imbriquées

Parent Property Type Required Default
runtime.cache enabled boolean ❌ Non False
runtime.cache ttl-seconds integer ❌ Non 5
runtime.cache level-2 object ❌ Non -
Parent Property Type Required Default
runtime.cache.level-2 enabled boolean ❌ Non False
runtime.cache.level-2 provider string ❌ Non redis
runtime.cache.level-2 connection-string string ❌ Non None
runtime.cache.level-2 partition string ❌ Non None

Tip

La propriété au niveau cache.ttl-seconds de l’entité est définie par défaut sur cette valeur globale.

Tip

Pour obtenir des exemples de configuration de bout en bout, de comportement au niveau du cache et de Redis, consultez Implémenter le cache de niveau 2.

Format

{
  "runtime": {
    "cache":  {
      "enabled": <boolean>,
      "ttl-seconds": <integer>,
      "level-2": {
        "enabled": <boolean>,
        "provider": "redis",
        "connection-string": <string>,
        "partition": <string>
      }
    }
  }
}

Important

Si global enabled est false, le niveau enabled d’entité individuel n’a pas d’importance.

Quand level-2.enabled c’est truele cas, DAB utilise le fournisseur de cache distribué configuré en plus du cache local en mémoire. Une entité configurée avec le niveau L1L2 du cache vérifie d’abord le cache local, puis le cache distribué, avant d’accéder à la base de données.

Télémétrie (runtime)

Parent Property Type Required Default
runtime telemetry object ❌ Non -

Configuration globale de la télémétrie.

Propriétés imbriquées

Parent Property Type Required Default
runtime.telemetry log-level dictionary ❌ Non None
runtime.telemetry application-insights object ❌ Non -
runtime.telemetry open-telemetry object ❌ Non -
runtime.telemetry azure-log-analytics object ❌ Non -
runtime.telemetry file object ❌ Non -

Configure la journalisation détaillée par espace de noms. Cette configuration suit les conventions de journalisation .NET standard et permet un contrôle granulaire, bien qu’elle suppose une certaine familiarité avec les internes du générateur d’API de données. Le générateur d’API de données est open source : https://aka.ms/dab

Format

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "namespace": "log-level",
        "namespace": "log-level"
      }
    }
  }
}

Tip

log-level peut être rechargé à chaud dans le développement et la production. Il s’agit actuellement de la seule propriété qui prend en charge le rechargement à chaud en production.

Example

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
        "Azure.DataApiBuilder.Core": "information",
        "default": "warning"
      }
    }
  }
}

Application Insights (télémétrie)

Parent Property Type Required Default
runtime.telemetry application-insights object ❌ Non -

Configure la journalisation dans Application Insights.

Propriétés imbriquées

Parent Property Type Required Default
runtime.telemetry.application-insights enabled boolean ❌ Non true
runtime.telemetry.application-insights connection-string string ✔️ Oui None

Format

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": <true; default: true> | <false>
        "connection-string": <string>
      }
    }
  }
}

OpenTelemetry (télémétrie)

Parent Property Type Required Default
runtime.telemetry open-telemetry object ❌ Non -

Configure la journalisation sur Open Telemetry.

Propriétés imbriquées

Parent Property Type Required Default
runtime.telemetry.open-telemetry enabled boolean ❌ Non true
runtime.telemetry.open-telemetry endpoint string ✔️ Oui None
runtime.telemetry.open-telemetry headers string ❌ Non None
runtime.telemetry.open-telemetry service-name string ❌ Non « dab »
runtime.telemetry.open-telemetry exporter-protocol enum (grpc | httpprotobuf) ❌ Non grpc

Plusieurs en-têtes sont , séparés par des virgules.

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

En savoir plus sur OTEL_EXPORTER_OTLP_HEADERS.

Note

gRPC (4317) est plus rapide et prend en charge la diffusion en continu, mais nécessite davantage d’étapes de configuration. HTTP/protobuf (4318) est plus simple et plus facile à déboguer, mais moins efficace.

Azure Log Analytics (télémétrie)

Parent Property Type Required Default
runtime.telemetry azure-log-analytics object ❌ Non -

Configure la journalisation sur Azure Log Analytics via un point de terminaison de collecte de données. En cas d’activation, DAB envoie des données de télémétrie par lots à un intervalle configurable.

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Propriétés imbriquées

Parent Property Type Required Default
runtime.telemetry.azure-log-analytics enabled boolean ❌ Non false
runtime.telemetry.azure-log-analytics dab-identifier string ❌ Non "DabLogs"
runtime.telemetry.azure-log-analytics flush-interval-seconds integer ❌ Non 5
runtime.telemetry.azure-log-analytics auth object ✔️ Oui* -

* auth est requis lorsque enabled c’est true.

Parent Property Type Required Default
runtime.telemetry.azure-log-analytics.auth custom-table-name string ✔️ Oui* null
runtime.telemetry.azure-log-analytics.auth dcr-immutable-id string ✔️ Oui* null
runtime.telemetry.azure-log-analytics.auth dce-endpoint string ✔️ Oui* null

* Obligatoire quand est enabledtrue.

  • dab-identifier: étiquette transmise à Log Analytics pour vous aider à différencier les journaux provenant du générateur d’API de données.
  • flush-interval-seconds— intervalle de temps (en secondes) entre l’envoi de lots de données de télémétrie.
  • custom-table-name— nom de la table personnalisée dans Azure Log Analytics où les données sont stockées.
  • dcr-immutable-id: ID immuable de la règle de collecte de données qui définit la façon dont les données sont collectées.
  • dce-endpoint: URL du point de terminaison de collecte de données utilisée pour envoyer des données de télémétrie.

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

Fichier (télémétrie)

Parent Property Type Required Default
runtime.telemetry file object ❌ Non -

Configure l’écriture de journaux de télémétrie dans un fichier local. Lorsque cette option est activée, DAB écrit la sortie du journal structuré dans le chemin d’accès de fichier spécifié avec des intervalles de roulement et des limites de taille configurables.

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Propriétés imbriquées

Parent Property Type Required Default
runtime.telemetry.file enabled boolean ❌ Non false
runtime.telemetry.file path string ✔️ Oui* "/logs/dab-log.txt"
runtime.telemetry.file rolling-interval enum ❌ Non "Day"
runtime.telemetry.file retained-file-count-limit integer ❌ Non 1
runtime.telemetry.file file-size-limit-bytes integer ❌ Non 1048576

* path est requis lorsque enabled c’est true.

Valeurs d’intervalle propagé

Value Description
Minute Nouveau fichier journal toutes les minutes
Hour Nouveau fichier journal toutes les heures
Day Nouveau fichier journal tous les jours (par défaut)
Month Nouveau fichier journal tous les mois
Year Nouveau fichier journal chaque année
Infinite Ne jamais rouler dans un nouveau fichier

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 (runtime)

Parent Property Type Required Default
runtime mcp object ❌ Non -

Configure le serveur MCP (SQL Model Context Protocol), qui expose les entités de base de données en tant qu’outils MCP pour les agents IA.

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Propriétés imbriquées

Parent Property Type Required Default
runtime.mcp enabled boolean ❌ Non true
runtime.mcp path string ❌ Non "/mcp"
runtime.mcp description string ❌ Non null
runtime.mcp dml-tools booléen ou objet ❌ Non true

La dml-tools propriété accepte une valeur booléenne pour activer ou désactiver tous les outils, ou un objet pour contrôler les outils individuels :

Parent Property Type Required Default
runtime.mcp.dml-tools describe-entities boolean ❌ Non true
runtime.mcp.dml-tools create-record boolean ❌ Non true
runtime.mcp.dml-tools read-records boolean ❌ Non true
runtime.mcp.dml-tools update-record boolean ❌ Non true
runtime.mcp.dml-tools delete-record boolean ❌ Non true
runtime.mcp.dml-tools execute-entity boolean ❌ Non true
runtime.mcp.dml-tools aggregate-records booléen ou objet ❌ Non true

L’outil aggregate-records accepte une valeur booléenne ou un objet avec plus de paramètres :

Parent Property Type Required Default Gamme
runtime.mcp.dml-tools.aggregate-records enabled boolean ❌ Non true
runtime.mcp.dml-tools.aggregate-records query-timeout integer ❌ Non 30 1 à 600 secondes

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

Pour activer ou désactiver tous les outils DML à la fois, définis "dml-tools" sur true ou false.

Lorsque vous désactivez un outil au niveau du runtime, l’outil n’apparaît jamais dans la réponse MCP tools/list et ne peut pas être appelé, quelles que soient les autorisations au niveau de l’entité. Pour plus d’informations sur les outils DML individuels, consultez les outils DML (Data Manipulation Language).

Avec l’aide de l’interface 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

Intégrité (runtime)

Parent Property Type Required Default
runtime health object ❌ Non -

Configuration du point de terminaison de contrôle d’intégrité global (/health).

Propriétés imbriquées

Parent Property Type Required Default Plage/notes
runtime.health enabled boolean ❌ Non true
runtime.health roles tableau de chaînes ✔️ Oui* null *Obligatoire en mode de production
runtime.health cache-ttl-seconds integer ❌ Non 5 Min : 0
runtime.health max-query-parallelism integer ❌ Non 4 Min : One, Max : Eight (limité)

Comportement dans le développement et la production

Condition Comportement de développement Comportement de production
health.enabled = faux 403 statut 403 statut
health.enabled = vrai Dépend du rôle Dépend du rôle
roles omis ou null Intégrité affichée 403 statut
rôle actuel non dans roles 403 statut 403 statut
rôle actuel dans roles Intégrité affichée Intégrité affichée
roles Comprend anonymous Intégrité affichée Intégrité affichée

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 est false, le niveau enabled d’entité individuel n’a pas d’importance.

Example

{
  "health": {
    "enabled": true,
    "roles": ["admin", "support"],
    "cache-ttl-seconds": 10,
    "max-query-parallelism": 6
  }
}