Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Impostazioni di configurazione che determinano il comportamento di runtime.
Impostazioni di paginazione
| Property | Default | Description |
|---|---|---|
| runtime.pagination.max-page-size | Definisce il numero massimo di record per pagina | |
| runtime.pagination.default-page-size | Imposta i record predefiniti per risposta |
Impostazioni REST
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Percorso di base per gli endpoint REST |
| runtime.rest.enabled | true |
Consente di abilitare o disabilitare le richieste REST per tutte le entità |
| runtime.rest.request-body-strict | true |
Non consente campi estranei nel corpo della richiesta quando true |
Impostazioni di GraphQL
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Consente l'esecuzione di query sullo schema GraphQL sottostante |
| runtime.graphql.path | "/graphql" |
Percorso di base per l'endpoint GraphQL |
| runtime.graphql.enabled | true |
Consente di abilitare o disabilitare le richieste GraphQL per tutte le entità |
| runtime.graphql.depth-limit | null |
Profondità massima consentita di una query GraphQL |
| runtime.graphql.multiple-mutations.create.enabled | false |
Consente mutazioni multiple per tutte le entità |
Impostazioni host
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Dimensione massima (MB) della risposta al database consentita in un singolo risultato |
| runtime.host.mode | "production" |
Modalità di esecuzione; "production" o "development" |
Impostazioni CORS
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Origini CORS consentite |
| runtime.host.cors.allow-credentials | false |
Imposta il valore per l'intestazione access-control-Allow-Credentials |
Impostazioni di autenticazione
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | null |
Provider di autenticazione |
| runtime.host.authentication.jwt.audience | null |
Destinatari JWT |
| runtime.host.authentication.jwt.issuer | null |
Autorità emittente JWT |
Impostazioni della cache
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Abilita la memorizzazione nella cache delle risposte a livello globale |
| runtime.cache.ttl-seconds | 5 |
Durata (secondi) per la cache globale |
Impostazioni di telemetria
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Stringa di connessione di Application Insights |
| runtime.telemetry.application-insights.enabled | false |
Abilita o disabilita i dati di telemetria di Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
URL dell'agente di raccolta OpenTelemetry |
| runtime.telemetry.open-telemetry.headers | {} |
Intestazioni di esportazione OpenTelemetry |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Nome del servizio OpenTelemetry |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
Protocollo OpenTelemetry ("grpc" o "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Abilita o disabilita OpenTelemetry |
| runtime.telemetry.log-level.namespace | null |
Override del livello di log specifico dello spazio dei nomi |
| runtime.health.enabled | true |
Abilita o disabilita l'endpoint di controllo integrità a livello globale |
| runtime.health.roles | null |
Ruoli consentiti per l'endpoint di integrità completo |
| runtime.health.cache-ttl-seconds | 5 |
Durata (secondi) per la voce della cache del report di controllo integrità |
| parallelismo di runtime.health.max query | 4 |
Numero massimo di query simultanee di controllo integrità (intervallo: 1-8) |
Panoramica del formato
{
"runtime": {
"pagination": {
"max-page-size": <integer|null> (default: `100000`),
"default-page-size": <integer|null> (default: `100`)
},
"rest": {
"path": <string> (default: "/api"),
"enabled": <true>|<false>,
"request-body-strict": <true>|<false> (default: `true`)
},
"graphql": {
"path": <string> (default: "/graphql"),
"enabled": <true>|<false>,
"allow-introspection": <true>|<false>,
"depth-limit": <integer|null> (default: `null`),
"multiple-mutations": {
"create": {
"enabled": <true>|<false> (default: `false`)
}
}
},
"host": {
"mode": <"production"> (default) | <"development">,
"max-response-size-mb": <integer|null> (default: `158`),
"cors": {
"origins": [ "<string>" ],
"allow-credentials": <true>|<false> (default: `false`)
},
"authentication": {
"provider": <string> (default: "AppService"),
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
},
"cache": {
"enabled": <true>|<false> (default: `false`),
"ttl-seconds": <integer> (default: `5`)
},
"telemetry": {
"application-insights": {
"connection-string": "<string>",
"enabled": <true>|<false> (default: `true`)
},
"open-telemetry": {
"endpoint": "<string>",
"headers": "<string>",
"service-name": <string> (default: "dab"),
"exporter-protocol": <"grpc"> (default) | <"httpprotobuf">,
"enabled": <true>|<false> (default: `true`)
},
"log-level": {
// namespace keys
"<namespace>": <"trace"|"debug"|"information"|"warning"|"error"|"critical"|"none"|null>
}
},
"health": {
"enabled": <true>|<false> (default: `true`),
"roles": [ "<string>" ],
"cache-ttl-seconds": <integer> (default: `5`),
"max-query-parallelism": <integer> (default: `4`)
}
}
Modalità (runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
host |
enumerazione (production | development) |
❌ No | production |
Comportamento di sviluppo
- Enabled Nitro (in precedenza Banana Cake Pop) per i test di GraphQL
- Interfaccia utente di Swagger abilitata per i test REST
- Controlli di integrità anonimi abilitati
- Maggiore dettaglio della registrazione (debug)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Dimensioni massime della risposta (runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
integer | ❌ No | 158 |
Imposta le dimensioni massime (in megabyte) per qualsiasi risultato specificato. Poiché le risposte di grandi dimensioni possono sovraccaricare il sistema, max-response-size-mb limitare le dimensioni totali (diverse dal numero di righe) per evitare l'overload, in particolare con colonne di grandi dimensioni come testo o JSON.
| Value | Result |
|---|---|
| non impostato | Usa valore predefinito |
null |
Usa valore predefinito |
integer |
Qualsiasi intero positivo a 32 bit |
<= 0 |
Non supportato |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
object | ❌ No | - |
Configurazione globale di GraphQL.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ No | None |
runtime.graphql |
path |
string | ❌ No | "/graphql" |
runtime.graphql |
depth-limit |
integer | ❌ No | Nessuno (illimitato) |
runtime.graphql |
allow-introspection |
boolean | ❌ No | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ No | False |
Note delle proprietà
- I percorsi secondari non sono consentiti per la
pathproprietà . - Usare
depth-limitper vincolare le query nidificate. - Impostare
allow-introspectionsufalseper nascondere lo schema GraphQL. - Usare
multiple-mutationsper inserire più entità in una singola mutazione.
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>
}
}
}
}
Esempio: più mutazioni
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
Mutazione 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 (tempo di esecuzione)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
rest |
object | ❌ No | - |
Configurazione REST globale.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ No | None |
runtime.rest |
path |
string | ❌ No | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ No | True |
Note delle proprietà
- Se global
enabledèfalse, il livelloenableddi entità individuale non è rilevante. - La
pathproprietà non supporta valori di sottopercorso come/api/data. -
request-body-strictè stato introdotto per semplificare gli oggetti POCO .NET.
request-body-strict |
Behavior |
|---|---|
true |
I campi aggiuntivi nel corpo della richiesta causano un'eccezione BadRequest . |
false |
I campi aggiuntivi nel corpo della richiesta vengono ignorati. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Note
Quando si distribuisce Generatore API dati usando App Web statiche (anteprima), il servizio di Azure inserisce automaticamente un altro sottopercorso /data-api nell'URL. Questo comportamento garantisce la compatibilità con le funzionalità di App Web statiche esistenti. L'endpoint risultante sarà /data-api/api/<entity>. Questa nota è rilevante solo per le app Web statiche.
Esempio: request-body-strict
- Le colonne con un
default()valore vengono ignorate duranteINSERTsolo quando il relativo valore nel payload ènull. Di conseguenza,INSERTle operazioni indefault()colonne, quandorequest-body-strictètrue, non possono generare valori esplicitinull. A tale scopo, è necessaria un'operazioneUPDATE. - Le colonne con un
default()oggetto non vengono ignorate duranteUPDATEindipendentemente dal valore del payload. - Le colonne calcolate vengono sempre ignorate.
- Le colonne generate automaticamente vengono sempre ignorate.
Tabella di esempio
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
);
Payload della richiesta
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Comportamento di inserimento quando 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.
Carico della risposta
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Aggiornare il comportamento quando request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Carico della risposta
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
object | ❌ No | - |
Configurazione CORS globale.
Tip
CORS è l'acronimo di "Cross-Origin Resource Sharing". Si tratta di una funzionalità di sicurezza del browser che controlla se le pagine Web possono effettuare richieste a un dominio diverso da quello che li ha serviti.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ No | False |
runtime.host.cors |
origins |
matrice di stringhe | ❌ No | None |
Note
La allow-credentials proprietà imposta l'intestazione Access-Control-Allow-Credentials CORS.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> (default) | <false>,
"origins": ["<array-of-strings>"]
}
}
}
}
Note
Il carattere jolly * è valido come valore per origins.
Provider (runtime host di autenticazione)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
enumerazione (AppService | EntraId | Custom | Simulator) |
❌ No | AppService |
Definisce il metodo di autenticazione usato dal generatore di API dati.
Solo anonimo (provider di autenticazione)
{
"host": {
// omit the authentication section
}
}
Quando l'intera authentication sezione viene omessa dal file di dab-config.json, non viene usato alcun provider di autenticazione. In questo caso, il generatore di API dati opera in modalità "no-auth". In questa modalità, DAB non cerca token o Authorization intestazioni. L'intestazione X-MS-API-ROLE viene ignorata anche in questa configurazione.
[! Nota] A ogni richiesta che entra nel motore viene assegnato automaticamente e immediatamente il ruolo di sistema di
anonymous. Il controllo di accesso viene quindi gestito esclusivamente dalle autorizzazioni definite per ogni entità.
Esempio di autorizzazioni per le entità.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
}
}
In questo esempio, poiché non è configurato alcun authentication provider, tutte le richieste in ingresso vengono considerate automaticamente da un anonymous utente. La permissions matrice per l'entità Book concede in modo esplicito al anonymous ruolo la possibilità di eseguire read operazioni. Qualsiasi tentativo di eseguire altre azioni (ad esempio create, update, delete) o l'accesso ad altre entità non configurate per anonymous l'accesso viene negato.
StaticWebApps (provider di autenticazione) [deprecato]
{
"host": {
"authentication": {
"provider": "StaticWebApps"
}
}
}
Questo provider è deprecato perché la funzionalità Data Connections di anteprima app Web statiche è stata ritirata a novembre 2025. Anche se rimane funzionale, è stato progettato per un'implementazione legacy dell'autenticazione in App Web statiche di Azure. Gli sviluppatori devono eseguire la migrazione al AppService provider per una migliore coerenza e supporto a lungo termine con la piattaforma "Easy Auth" di Azure più ampia.
[! Nota] La migrazione non è semplice come la modifica del nome del provider nel file di configurazione. I
StaticWebAppsprovider eAppServiceprevedono strutture JSON diverse all'interno dell'intestazione per l'elaborazionex-ms-client-principaldei ruoli.
AppService (provider di autenticazione)
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
Questo provider è destinato alle applicazioni ospitate nel servizio app di Azure, ad esempio App Azure Container. L'ambiente di hosting di Azure gestisce l'autenticazione e quindi passa le informazioni sull'identità dell'utente all'applicazione tramite intestazioni di richiesta. È destinato agli sviluppatori che vogliono una soluzione di autenticazione semplice e predefinita gestita dalla piattaforma Azure.
Questo provider non usa un token JWT dall'intestazione Authorization . Si basa su un'intestazione speciale, X-MS-CLIENT-PRINCIPAL, inserita dalla piattaforma del servizio app. Questa intestazione contiene un oggetto JSON con codifica Base64 con i dettagli dell'identità dell'utente.
Anonimo: se il AppService provider è configurato ma una richiesta arriva senza l'intestazione X-MS-CLIENT-PRINCIPAL , la richiesta viene assegnata al ruolo di sistema di anonymous.
Il codice JSON decodificato dall'intestazione X-MS-CLIENT-PRINCIPAL è in genere simile al seguente:
{
"auth_typ": "aad",
"claims": [
{"typ": "roles", "val": "admin"},
{"typ": "roles", "val": "contributor"}
],
"name_typ": "...",
"role_typ": "..."
}
I ruoli sono contenuti all'interno della claims matrice.
Informazioni sull'intestazione diAPI-ROLE X-MS
-
Ruolo e comportamento: l'intestazione
X-MS-API-ROLEviene usata per specificare il ruolo che l'utente desidera presupporre per la richiesta corrente. Il valore di questa intestazione deve corrispondere a uno dei valori del ruolo trovati nellaclaimsmatrice dell'oggettoX-MS-CLIENT-PRINCIPAL. -
È obbligatorio?: No. Se l'intestazione
X-MS-API-ROLEè assente, la richiesta viene elaborata nel contesto del ruolo diauthenticatedsistema. Ciò significa che l'utente viene riconosciuto come connesso, ma non come ruolo specifico definito dall'applicazione dal token. -
Comportamento in corrispondenza: se l'intestazione
X-MS-API-ROLEviene specificata e il relativo valore corrisponde a un ruolo nell'entità client,claimsl'utente assume tale ruolo per la richiesta. -
Comportamento in caso di mancata corrispondenza: se l'intestazione
X-MS-API-ROLEviene specificata ma il valore non corrisponde ad alcun ruolo nell'entità client, la richiesta viene rifiutata con un403 Forbiddencodice di stato. In questo modo, un utente non può richiedere un ruolo a cui non è stato assegnato.
EntraId (provider di autenticazione)
{
"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"
}
}
}
}
Questo provider protegge gli endpoint con identità utente e applicazione in Microsoft Entra. È ideale per qualsiasi servizio in cui gli utenti o altri servizi necessitano di accesso sicuro all'interno del tenant Entra.
[! NOTA] Il
EntraIdprovider era precedentemente denominatoAzureAd. Il nome precedente funziona ancora, ma gli sviluppatori sono invitati a eseguire la migrazione delle configurazioni daAzureAdaEntraId.
Questo provider prevede un token JWT Bearer standard nell'intestazione Authorization , rilasciato da Microsoft Entra. Il token deve essere configurato per l'applicazione specifica (usando l'attestazione audience ). I ruoli per l'utente o l'entità servizio devono trovarsi in un'attestazione all'interno del token. Il codice cerca un'attestazione roles per impostazione predefinita.
Anonimo: se il EntraId provider è configurato ma una richiesta arriva senza l'intestazione Authorization , la richiesta viene assegnata al ruolo di sistema di anonymous.
Un payload JWT decodificato potrebbe essere simile al seguente:
{
"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
}
Informazioni sull'intestazione diAPI-ROLE X-MS
-
Ruolo e comportamento: l'intestazione
X-MS-API-ROLEviene usata per specificare un ruolo che l'utente desidera assumere per la richiesta. Il valore di questa intestazione deve corrispondere a uno dei valori del ruolo trovati nell'attestazionerolesdel token JWT. -
È obbligatorio?: No. Se l'intestazione
X-MS-API-ROLEè assente, la richiesta viene elaborata nel contesto del ruolo diauthenticatedsistema. Ciò significa che l'utente viene riconosciuto come connesso, ma non come ruolo specifico definito dall'applicazione dal token. -
Comportamento in corrispondenza: se l'intestazione
X-MS-API-ROLEviene specificata e corrisponde a un ruolo nell'attestazioneroles, il contesto dell'utente viene impostato su tale ruolo. -
Comportamento non corrispondente: se l'intestazione
X-MS-API-ROLEviene specificata ma il relativo valore non corrisponde ad alcun ruolo nell'attestazioneroles, la richiesta viene rifiutata con un403 Forbiddencodice di stato. In questo modo, un utente non può richiedere un ruolo a cui non è stato assegnato.
Personalizzato (provider di autenticazione)
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<client-id-or-api-audience>",
"issuer": "https://<your-domain>/oauth2/default"
}
}
}
}
Questo provider è destinato agli sviluppatori che vogliono integrare Data API Builder con un provider di identità di terze parti (ad esempio Auth0, Okta o un server di identità personalizzato) che rilascia JWT. Offre la flessibilità necessaria per configurare i token previsti audience e issuer i token.
Il Custom provider prevede un token JWT Bearer standard nell'intestazione Authorization . La differenza principale del EntraId provider consiste nel configurare il file di configurazione valido issuer e audience nel file di configurazione del generatore di API dati. Il provider convalida il token controllando che l'autorità attendibile l'ha emessa. I ruoli dell'utente devono trovarsi in un'attestazione roles all'interno del payload JWT.
[! NOTA] In alcuni casi, a seconda del provider di identità di terze parti, gli sviluppatori devono coercire la struttura del token JWT in modo che corrisponda alla struttura prevista dal generatore di API dati (illustrato di seguito).
Anonimo: se il Custom provider è configurato ma una richiesta arriva senza l'intestazione Authorization , la richiesta viene assegnata al ruolo di sistema di anonymous.
Un payload JWT decodificato per un custom provider potrebbe essere simile al seguente:
{
"aud": "my-api-audience", // Must match configuration
"iss": "https://my-custom-issuer.com/", // Must match configuration
"sub": "user-id",
"roles": [
"editor",
"viewer"
],
// ... other claims
}
Informazioni sull'intestazione diAPI-ROLE X-MS
-
Ruolo e comportamento: l'intestazione
X-MS-API-ROLEfunziona esattamente come funziona con ilEntraIdprovider. Consente all'utente di selezionare uno dei ruoli assegnati. Il valore di questa intestazione deve corrispondere a uno dei ruoli dell'attestazionerolesnel token JWT personalizzato. -
È obbligatorio?: No. Se l'intestazione
X-MS-API-ROLEè assente, l'utente viene considerato come nel ruolo diauthenticatedsistema. -
Comportamento in corrispondenza: se il
X-MS-API-ROLEvalore dell'intestazione corrisponde a un ruolo nell'attestazione delrolestoken JWT, il contesto dell'utente viene impostato su tale ruolo a scopo di autorizzazione. -
Comportamento in caso di mancata corrispondenza: se il
X-MS-API-ROLEvalore dell'intestazione non corrisponde ad alcun ruolo nell'attestazioneroles, la richiesta viene rifiutata con un403 Forbiddencodice di stato. In questo modo, un utente non può richiedere un ruolo a cui non è stato assegnato.
Simulatore (provider di autenticazione)
Questo provider è progettato per semplificare per gli sviluppatori di testare la configurazione, in particolare authorization i criteri, senza dover configurare un provider di autenticazione completo come Entra Identity o EasyAuth. Simula un authenticated utente.
Il Simulator provider non usa token JWT. L'autenticazione viene simulata. Quando si usa questo provider, tutte le richieste vengono considerate come se provenissero da un utente autenticato.
Informazioni sull'intestazione diAPI-ROLE X-MS
-
Ruolo e comportamento: l'intestazione
X-MS-API-ROLEè l'unico modo per specificare un ruolo quando si usa .SimulatorPoiché non è presente alcun token con un elenco di ruoli, il sistema considera implicitamente attendibile il ruolo inviato in questa intestazione. - È obbligatorio?: No.
-
Comportamento in assenza: se l'intestazione
X-MS-API-ROLEè assente, la richiesta viene elaborata nel contesto del ruolo diauthenticatedsistema. -
Comportamento in presenza: se l'intestazione
X-MS-API-ROLEè presente, la richiesta viene elaborata nel contesto del ruolo specificato nel valore dell'intestazione. Non esiste alcuna convalida rispetto a un elenco di attestazioni, quindi lo sviluppatore può simulare qualsiasi ruolo necessario per testare i criteri.
Simulatore in produzione
authentication.provider Se è impostato su Simulator mentre runtime.host.mode è production, il generatore di API dati non verrà avviato.
"host": {
"mode": "production", // or "development"
"authentication": {
"provider": "Simulator"
}
}
JWT (runtime host di autenticazione)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
object | ❌ No | - |
Configurazione JWT (Global JSON Web Token).
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ❌ No | None |
runtime.host.authentication.jwt |
issuer |
string | ❌ No | None |
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Paginazione (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
object | ❌ No | - |
Limiti di paginazione globali per gli endpoint REST e GraphQL.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ No | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ No | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ No | false |
Valori supportati max-page-size
| Value | Result |
|---|---|
integer |
È supportato qualsiasi numero intero positivo a 32 bit. |
0 |
Non supportato. |
-1 |
Il valore predefinito è il valore massimo supportato. |
< -1 |
Non supportato. |
Valori supportati per le dimensioni predefinite della pagina
| Value | Result |
|---|---|
integer |
Qualsiasi numero intero positivo minore del max-page-sizecorrente. |
0 |
Non supportato. |
-1 |
Il valore predefinito è l'impostazione max-page-size corrente. |
< -1 |
Non supportato. |
Comportamento relativo al collegamento successivo
Quando next-link-relative è true, i valori di paginazione nextLink usano URL relativi anziché URL assoluti.
| Value | Example |
|---|---|
false (impostazione predefinita) |
"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
Quando il valore è maggiore di max-page-size, i risultati vengono limitati a max-page-size.
Esempio: paging in REST
Request
GET https://localhost:5001/api/users
Carico della risposta
{
"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=="
}
Pagina Successiva richiesta
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Esempio: Paging in GraphQL
Payload della richiesta (query)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Carico della risposta
{
"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=="
}
}
}
Pagina Successiva richiesta
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Esempio: accesso alle max-page-size richieste
Usare il max-page-size valore impostando $limit (REST) o first (GraphQL) su -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 | ❌ No | - |
Configurazione della Cache globale.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ No | False |
runtime.cache |
ttl-seconds |
integer | ❌ No | 5 |
Tip
Per impostazione predefinita, la proprietà a livello cache.ttl-seconds di entità corrisponde a questo valore globale.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>
}
}
}
Important
Se global enabled è false, il livello enabled di entità individuale non è rilevante.
Telemetria (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
object | ❌ No | - |
Configurazione della telemetria globale.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dictionary | ❌ No | None |
runtime.telemetry |
application-insights |
object | ❌ No | - |
runtime.telemetry |
open-telemetry |
object | ❌ No | - |
Configura il livello di dettaglio della registrazione per ogni spazio dei nomi. Ciò segue le convenzioni di registrazione standard di .NET e consente un controllo granulare, anche se presuppone una certa familiarità con gli elementi interni di Generatore API dati. Il generatore di API dati è open source: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level può essere ricaricato a caldo sia nello sviluppo che nella produzione. È attualmente l'unica proprietà che supporta il ricaricamento rapido nell'ambiente di produzione.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (telemetria)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
object | ❌ No | - |
Configura la registrazione in Application Insights.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ No | False |
runtime.telemetry.application-insights |
connection-string |
string | ✔️ Sì | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (telemetria)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
object | ❌ No | - |
Configura la registrazione in Apri telemetria.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ No | true |
runtime.telemetry.open-telemetry |
endpoint |
string | ✔️ Sì | None |
runtime.telemetry.open-telemetry |
headers |
string | ❌ No | None |
runtime.telemetry.open-telemetry |
service-name |
string | ❌ No | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
enumerazione (grpc | httpprotobuf) |
❌ No | grpc |
Più intestazioni sono , separate da virgole.
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",
}
}
}
}
Altre informazioni sulle OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) è più veloce e supporta lo streaming, ma richiede una configurazione maggiore. HTTP/protobuf (4318) è più semplice e più semplice da eseguire, ma meno efficiente.
Integrità (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
health |
object | ❌ No | - |
Configurazione dell'endpoint controllo integrità globale (/health).
Proprietà annidate
| Parent | Property | Type | Required | Default | Intervallo/Note |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ No | true |
|
runtime.health |
roles |
matrice di stringhe | ✔️ Sì* | null |
*Obbligatorio in modalità di produzione |
runtime.health |
cache-ttl-seconds |
integer | ❌ No | 5 |
Min: 0 |
runtime.health |
max-query-parallelism |
integer | ❌ No | 4 |
Min: 1, Max: 8 (bloccato) |
Comportamento in fase di sviluppo e produzione
| Condition | Comportamento di sviluppo | Comportamento di produzione |
|---|---|---|
health.enabled = falso |
403 stato |
403 stato |
health.enabled = vero |
Dipende dal ruolo | Dipende dal ruolo |
roles omesso o null |
Integrità visualizzata |
403 stato |
ruolo corrente non in roles |
403 stato |
403 stato |
ruolo corrente in roles |
Integrità visualizzata | Integrità visualizzata |
roles Include anonymous |
Integrità visualizzata | Integrità visualizzata |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Se global enabled è false, il livello enabled di entità individuale non è rilevante.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}