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 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 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> (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 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> (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-ROLE est 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 le claims tableau de l’objet X-MS-CLIENT-PRINCIPAL .
  • Est-ce nécessaire ?: Non. Si l’en-tête X-MS-API-ROLE est absent, la requête est traitée dans le contexte du authenticated rô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-ROLE est fourni et que sa valeur correspond à un rôle dans le principal du client, l’utilisateur claimsassume ce rôle pour la requête.
  • Comportement en cas d’incompatibilité : si l’en-tête X-MS-API-ROLE est fourni, mais que la valeur ne correspond à aucun rôle dans le principal du client, la demande est rejetée avec un code d’état 403 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-ROLE est 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 la roles revendication du jeton JWT.
  • Est-ce nécessaire ?: Non. Si l’en-tête X-MS-API-ROLE est absent, la requête est traitée dans le contexte du authenticated rô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-ROLE est fourni et qu’il correspond à un rôle dans la roles revendication, 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-ROLE est fourni, mais que sa valeur ne correspond à aucun rôle dans la roles revendication, la demande est rejetée avec un code d’état 403 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-ROLE fonctionne exactement comme avec le EntraId fournisseur. 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 la roles revendication dans le jeton JWT personnalisé.
  • Est-ce nécessaire ?: Non. Si l’en-tête X-MS-API-ROLE est absent, l’utilisateur est traité comme étant dans le authenticated rôle système.
  • Comportement sur correspondance : si la valeur de l’en-tête X-MS-API-ROLE correspond à un rôle dans la revendication de roles JWT, 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-ROLE ne correspond à aucun rôle dans la roles revendication, la demande est rejetée avec un code d’état 403 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-ROLE est la seule façon de spécifier un rôle lors de l’utilisation du Simulator. É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-ROLE est absent, la requête est traitée dans le contexte du authenticated rôle système.
  • Comportement en présence : si l’en-tête X-MS-API-ROLE est 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).

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 ❌ 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.

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