Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 | null |
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 |
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 | false |
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.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) |
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: "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`)
}
}
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
pathpropriété. - Permet
depth-limitde limiter les requêtes imbriquées. - Définissez cette option
allow-introspectionpourfalsemasquer le schéma GraphQL. - Permet
multiple-mutationsd’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> (default) | <false>
}
}
}
}
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
enabledestfalse, le niveauenabledd’entité individuel n’a pas d’importance. - La
pathpropriété ne prend pas en charge les valeurs de sous-chemin comme/api/data. -
request-body-stricta é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 uniquementINSERTlorsque leur valeur dans la charge utile estnull. Par conséquent,INSERTles opérations endefault()colonnes, quand c’estrequest-body-strictle castrue, ne peuvent pas entraîner de valeurs explicitesnull. Pour accomplir ce comportement, uneUPDATEopération est requise. - Les colonnes avec un
default()ne sont pas ignorées pendantUPDATEquelle 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> (default) | <false>,
"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 (AppServiceSimulator | | EntraId | Custom) |
❌ Non | AppService |
Définit la méthode d’authentification utilisée par le générateur d’API de données.
Anonyme uniquement (fournisseur d’authentification)
{
"host": {
// omit the authentication section
}
}
Lorsque la section entière authentication est omise à partir du fichier dab-config.json, aucun fournisseur d’authentification n’est utilisé. Dans ce cas, le générateur d’API de données fonctionne en mode « sans authentification ». Dans ce mode, DAB ne recherche pas de jetons ou Authorization d’en-têtes. L’en-tête X-MS-API-ROLE est également ignoré dans cette configuration.
Note
Chaque demande entrante dans le moteur est automatiquement et immédiatement affectée au rôle système de anonymous. Le contrôle d’accès est ensuite géré exclusivement par les autorisations que vous définissez sur chaque entité.
Exemple d’autorisations d’entité.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
}
}
Dans cet exemple, étant donné qu’aucun fournisseur n’est authentication configuré, toutes les requêtes entrantes sont automatiquement considérées comme provenant d’un anonymous utilisateur. Le permissions tableau de l’entité Book accorde explicitement au anonymous rôle la possibilité d’effectuer des read opérations. Toute tentative d’exécution d’autres actions (comme create, , update, delete) ou d’accès à d’autres entités non configurées pour anonymous l’accès est refusée.
AppService (fournisseur d’authentification)
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
Ce fournisseur est destiné aux applications hébergées sur Azure App Service, telles qu’Azure Container Apps. L’environnement d’hébergement Azure gère l’authentification, puis transmet les informations d’identité de l’utilisateur à l’application via des en-têtes de requête. Il est destiné aux développeurs qui souhaitent une solution d’authentification simple et prête à l’emploi gérée par la plateforme Azure.
Ce fournisseur n’utilise pas de jeton JWT à partir de l’en-tête Authorization . Il s’appuie sur un en-tête spécial, X-MS-CLIENT-PRINCIPALinjecté par la plateforme App Service. Cet en-tête contient un objet JSON encodé en base64 avec les détails de l’identité de l’utilisateur.
Anonyme : si le AppService fournisseur est configuré mais qu’une requête arrive sans l’en-tête X-MS-CLIENT-PRINCIPAL , la demande est affectée au rôle système de anonymous.
Le JSON décodé à partir de l’en-tête X-MS-CLIENT-PRINCIPAL ressemble généralement à ceci :
{
"auth_typ": "aad",
"claims": [
{"typ": "roles", "val": "admin"},
{"typ": "roles", "val": "contributor"}
],
"name_typ": "...",
"role_typ": "..."
}
Les rôles sont contenus dans le claims tableau.
À propos de l’en-tête X-MS-API-ROLE
-
Rôle et comportement : l’en-tête
X-MS-API-ROLEest utilisé pour spécifier le rôle que l’utilisateur souhaite supposer pour la requête actuelle. La valeur de cet en-tête doit correspondre à l’une des valeurs de rôle trouvées dans leclaimstableau de l’objetX-MS-CLIENT-PRINCIPAL. -
Est-ce nécessaire ?: Non. Si l’en-tête
X-MS-API-ROLEest absent, la requête est traitée dans le contexte duauthenticatedrôle système. Ce comportement signifie que l’utilisateur est reconnu comme connecté, mais pas comme un rôle spécifique défini par l’application à partir du jeton. -
Comportement sur correspondance : si l’en-tête
X-MS-API-ROLEest fourni et que sa valeur correspond à un rôle dans le principal du client, l’utilisateurclaimsassume ce rôle pour la requête. -
Comportement en cas d’incompatibilité : si l’en-tête
X-MS-API-ROLEest fourni, mais que la valeur ne correspond à aucun rôle dans le principal du client, la demande est rejetée avec un code d’état403 Forbidden. Cette validation garantit qu’un utilisateur ne peut pas revendiquer un rôle qu’il n’a pas été affecté.
EntraId (fournisseur d’authentification)
{
"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"
}
}
}
}
Ce fournisseur sécurise les points de terminaison avec des identités d’utilisateur et d’application dans Microsoft Entra. Il est idéal pour tout service où les utilisateurs ou d’autres services ont besoin d’un accès sécurisé au sein du locataire Entra.
Note
Le EntraId fournisseur a été précédemment nommé AzureAd. L’ancien nom fonctionne toujours, mais les développeurs sont encouragés à migrer leurs configurations de AzureAd vers EntraId.
Ce fournisseur attend un jeton JWT Bearer standard dans l’en-tête Authorization , émis par Microsoft Entra. Le jeton doit être configuré pour l’application spécifique (à l’aide de la audience revendication). Les rôles de l’utilisateur ou du principal de service sont censés se trouver dans une revendication dans le jeton. Le code recherche une roles revendication par défaut.
Anonyme : si le EntraId fournisseur est configuré mais qu’une requête arrive sans l’en-tête Authorization , la demande est affectée au rôle système de anonymous.
Une charge utile JWT décodée peut ressembler à ceci :
{
"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
}
À propos de l’en-tête X-MS-API-ROLE
-
Rôle et comportement : l’en-tête
X-MS-API-ROLEest utilisé pour spécifier un rôle que l’utilisateur souhaite assumer pour la demande. La valeur de cet en-tête doit correspondre à l’une des valeurs de rôle trouvées dans larolesrevendication du jeton JWT. -
Est-ce nécessaire ?: Non. Si l’en-tête
X-MS-API-ROLEest absent, la requête est traitée dans le contexte duauthenticatedrôle système. Ce comportement signifie que l’utilisateur est reconnu comme connecté, mais pas comme un rôle spécifique défini par l’application à partir du jeton. -
Comportement sur correspondance : si l’en-tête
X-MS-API-ROLEest fourni et qu’il correspond à un rôle dans larolesrevendication, le contexte de l’utilisateur est défini sur ce rôle. -
Comportement en cas d’incompatibilité : si l’en-tête
X-MS-API-ROLEest fourni, mais que sa valeur ne correspond à aucun rôle dans larolesrevendication, la demande est rejetée avec un code d’état403 Forbidden. Cette validation garantit qu’un utilisateur ne peut pas revendiquer un rôle qu’il n’a pas été affecté.
Personnalisé (fournisseur d’authentification)
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<client-id-or-api-audience>",
"issuer": "https://<your-domain>/oauth2/default"
}
}
}
}
Ce fournisseur est destiné aux développeurs qui souhaitent intégrer le générateur d’API de données à un fournisseur d’identité tiers (comme Auth0, Okta ou un serveur d’identité personnalisé) qui émet des JWTs. Il offre la possibilité de configurer les jetons attendus audience et issuer les jetons.
Le Custom fournisseur attend un jeton JWT Bearer standard dans l’en-tête Authorization . La principale différence par rapport au EntraId fournisseur est que vous configurez le fichier de configuration valide issuer et audience dans le fichier de configuration du générateur d’API de données. Le fournisseur valide le jeton en vérifiant que l’autorité approuvée l’a émise. Les rôles de l’utilisateur sont censés se trouver dans une roles revendication dans la charge utile JWT.
Note
Dans certains cas, selon le fournisseur d’identité tiers, les développeurs doivent forcer la structure de leur JWT pour correspondre à la structure attendue par le générateur d’API de données (illustré dans l’exemple suivant).
Anonyme : si le Custom fournisseur est configuré mais qu’une requête arrive sans l’en-tête Authorization , la demande est affectée au rôle système de anonymous.
Une charge utile JWT décodée pour un custom fournisseur peut ressembler à ceci :
{
"aud": "my-api-audience", // Must match configuration
"iss": "https://my-custom-issuer.com/", // Must match configuration
"sub": "user-id",
"roles": [
"editor",
"viewer"
],
// ... other claims
}
À propos de l’en-tête X-MS-API-ROLE
-
Rôle et comportement : l’en-tête
X-MS-API-ROLEfonctionne exactement comme avec leEntraIdfournisseur. Il permet à l’utilisateur de sélectionner l’un de ses rôles attribués. La valeur de cet en-tête doit correspondre à l’un des rôles de larolesrevendication dans le jeton JWT personnalisé. -
Est-ce nécessaire ?: Non. Si l’en-tête
X-MS-API-ROLEest absent, l’utilisateur est traité comme étant dans leauthenticatedrôle système. -
Comportement sur correspondance : si la valeur de l’en-tête
X-MS-API-ROLEcorrespond à un rôle dans la revendication derolesJWT, le contexte de l’utilisateur est défini sur ce rôle à des fins d’autorisation. -
Comportement en cas d’incompatibilité : si la valeur de l’en-tête
X-MS-API-ROLEne correspond à aucun rôle dans larolesrevendication, la demande est rejetée avec un code d’état403 Forbidden. Cette validation garantit qu’un utilisateur ne peut pas revendiquer un rôle qu’il n’a pas été affecté.
Simulateur (fournisseur d’authentification)
Ce fournisseur est conçu pour permettre aux développeurs de tester facilement leur configuration, en particulier authorization les stratégies, sans avoir à configurer un fournisseur d’authentification complet comme Entra Identity ou EasyAuth. Il simule un authenticated utilisateur.
Le Simulator fournisseur n’utilise pas de jetons JWT. L’authentification est simulée. Lorsque vous utilisez ce fournisseur, le générateur d’API de données traite toutes les requêtes comme si elles proviennent d’un utilisateur authentifié.
À propos de l’en-tête X-MS-API-ROLE
-
Rôle et comportement : l’en-tête
X-MS-API-ROLEest la seule façon de spécifier un rôle lors de l’utilisation duSimulator. Étant donné qu’il n’existe aucun jeton avec une liste de rôles, le système approuve implicitement le rôle envoyé dans cet en-tête. - Est-ce nécessaire ?: Non.
-
Comportement en absence : si l’en-tête
X-MS-API-ROLEest absent, la requête est traitée dans le contexte duauthenticatedrôle système. -
Comportement en présence : si l’en-tête
X-MS-API-ROLEest présent, la requête est traitée dans le contexte du rôle spécifié dans la valeur de l’en-tête. Il n’existe aucune validation par rapport à une liste de revendications, afin que le développeur puisse simuler n’importe quel rôle dont il a besoin pour tester ses stratégies.
Simulateur en production
Si la valeur est définie Simulator pendant l’exécutionproduction, le authentication.providerruntime.host.mode générateur d’API de données ne démarre pas.
"host": {
"mode": "production", // or "development"
"authentication": {
"provider": "Simulator"
}
}
JWT (runtime d’hôte d’authentification)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
object | ❌ Non | - |
Configuration JWT (Global JSON Web Token).
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ❌ Non | None |
runtime.host.authentication.jwt |
issuer |
string | ❌ Non | None |
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. |
Comportement relatif au lien suivant
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 {
...
}
}
}
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 |
Tip
La propriété au niveau cache.ttl-seconds de l’entité est définie par défaut sur cette valeur globale.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>
}
}
}
Important
Si global enabled est false, le niveau enabled d’entité individuel n’a pas d’importance.
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 | - |
Configure la journalisation détaillée par espace de noms. Cela suit les conventions de journalisation .NET standard et permet un contrôle granulaire, bien qu’il 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 | False |
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.
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 : 1, Max : 8 (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
}
}