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 | Unauthenticated |
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 |
| runtime.cache.level-2.enabled | false |
Abilita la cache di livello 2 distribuita a livello globale |
| runtime.cache.level-2.provider | "redis" |
Provider di cache distribuita per la cache di livello 2 |
| runtime.cache.level-2.connection-string | null |
Stringa di connessione per il provider di cache di livello 2 |
| runtime.cache.level-2.partition | null |
Nome di partizione facoltativo per isolare lo spazio della cache distribuita |
Impostazioni di compressione
| Property | Default | Description |
|---|---|---|
| runtime.compression.level | optimal |
Livello di compressione della risposta HTTP (optimal, fastesto none) |
Impostazioni di telemetria
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Stringa di connessione di Application Insights |
| runtime.telemetry.application-insights.enabled | true |
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.open-telemetry.enabled | true |
Abilita o disabilita OpenTelemetry |
| runtime.telemetry.azure-log-analytics.enabled | false |
Abilita o disabilita Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.dab-identifier | "DabLogs" |
Identificatore per DAB in Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.flush-interval-seconds | 5 |
Intervallo tra push batch di log (secondi) |
| runtime.telemetry.azure-log-analytics.auth.custom-table-name | null |
Nome tabella personalizzato per Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id | null |
ID non modificabile della regola di raccolta dati |
| runtime.telemetry.azure-log-analytics.auth.dce-endpoint | null |
URL dell'endpoint di raccolta dati |
| runtime.telemetry.file.enabled | false |
Abilita o disabilita la registrazione del sink di file |
| runtime.telemetry.file.path | "/logs/dab-log.txt" |
Percorso file per i log di telemetria |
| runtime.telemetry.file.rolling-interval | "Day" |
Intervallo di sequenza per i file di log |
| runtime.telemetry.file.retained-file-count-limit | 1 |
Numero massimo di file di log conservati |
| runtime.telemetry.file.file-size-limit-bytes | 1048576 |
Dimensioni massime dei file in byte prima del rollforward |
| 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) |
Impostazioni mcp
| Property | Default | Description |
|---|---|---|
| runtime.mcp.enabled | true |
Abilita o disabilita l'endpoint MCP a livello globale |
| runtime.mcp.path | "/mcp" |
Percorso di base per l'endpoint MCP |
| runtime.mcp.description | null |
Descrizione del server inviata ai client MCP durante l'inizializzazione |
| runtime.mcp.dml-tools | true |
Abilita o disabilita tutti gli strumenti DML o un oggetto per il controllo per ogni strumento |
| runtime.mcp.dml-tools.describe-entities | true |
Abilita lo strumento describe_entities |
| runtime.mcp.dml-tools.create-record | true |
Abilita lo strumento create_record |
| runtime.mcp.dml-tools.read-records | true |
Abilita lo strumento read_records |
| runtime.mcp.dml-tools.update-record | true |
Abilita lo strumento di update_record |
| runtime.mcp.dml-tools.delete-record | true |
Abilita lo strumento delete_record |
| runtime.mcp.dml-tools.execute-entity | true |
Abilita lo strumento execute_entity |
| runtime.mcp.dml-tools.aggregate-records | true |
Abilita lo strumento aggregate_records (booleano o oggetto con timeout query) |
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: "Unauthenticated"),
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
},
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
},
"cache": {
"enabled": <true>|<false> (default: `false`),
"ttl-seconds": <integer> (default: `5`),
"level-2": {
"enabled": <true>|<false> (default: `false`),
"provider": <"redis">,
"connection-string": <string>,
"partition": <string>
}
},
"telemetry": {
"application-insights": {
"connection-string": "<string>",
"enabled": <true>|<false> (default: `true`)
},
"open-telemetry": {
"endpoint": "<string>",
"headers": "<string>",
"service-name": <string> (default: "dab"),
"exporter-protocol": <"grpc"> (default) | <"httpprotobuf">,
"enabled": <true>|<false> (default: `true`)
},
"azure-log-analytics": {
"enabled": <true>|<false> (default: `false`),
"dab-identifier": <string> (default: "DabLogs"),
"flush-interval-seconds": <integer> (default: `5`),
"auth": {
"custom-table-name": <string>,
"dcr-immutable-id": <string>,
"dce-endpoint": <string>
}
},
"file": {
"enabled": <true>|<false> (default: `false`),
"path": <string> (default: "/logs/dab-log.txt"),
"rolling-interval": <string> (default: "Day"),
"retained-file-count-limit": <integer> (default: `1`),
"file-size-limit-bytes": <integer> (default: `1048576`)
},
"log-level": {
// namespace keys
"<namespace>": <"trace"|"debug"|"information"|"warning"|"error"|"critical"|"none"|null>
}
},
"health": {
"enabled": <true>|<false> (default: `true`),
"roles": [ "<string>" ],
"cache-ttl-seconds": <integer> (default: `5`),
"max-query-parallelism": <integer> (default: `4`)
},
"mcp": {
"enabled": <true>|<false> (default: `true`),
"path": <string> (default: `"/mcp"`),
"description": <string>,
"dml-tools": <true>|<false> | {
"describe-entities": <true>|<false> (default: `true`),
"create-record": <true>|<false> (default: `true`),
"read-records": <true>|<false> (default: `true`),
"update-record": <true>|<false> (default: `true`),
"delete-record": <true>|<false> (default: `true`),
"execute-entity": <true>|<false> (default: `true`),
"aggregate-records": <true>|<false> | {
"enabled": <true>|<false> (default: `true`),
"query-timeout": <integer> (default: `30`)
}
}
}
}
}
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> | <false> (default)
}
}
}
}
}
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>
}
}
}
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. Per eseguire questo comportamento, è 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> | <false> (default),
"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 (Unauthenticated | StaticWebApps | AppService | EntraId | Custom | Simulator) |
❌ No | Unauthenticated |
Seleziona il metodo di autenticazione. Ogni provider convalida l'identità in modo diverso. Per la configurazione dettagliata, vedere le guide pratiche nella tabella seguente.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Riepilogo provider
| Provider | Caso d'uso | Origine identità | Guida pratica |
|---|---|---|---|
Unauthenticated |
DAB si trova dietro un front-end attendibile (impostazione predefinita) | Nessuno: tutte le richieste vengono eseguite come anonymous |
Configurare il provider non autenticato |
AppService |
App ospitate in Azure (EasyAuth) |
X-MS-CLIENT-PRINCIPAL Intestazione |
Configurare l'autenticazione del servizio app |
EntraID |
Microsoft Entra ID (Azure AD) | Token di connessione JWT | Configurare l'autenticazione con ID Entra |
Custom |
Provider di identità di terze parti (Okta, Auth0) | Token di connessione JWT | Configurare l'autenticazione JWT personalizzata |
Simulator |
Solo test locali | Simulato | Configurare l'autenticazione del simulatore |
Note
Il EntraId provider era precedentemente denominato AzureAd. Il nome precedente funziona ancora per la compatibilità.
Non autenticato (impostazione predefinita)
Quando Unauthenticated è impostato (o non è specificato alcun provider), DAB non controlla o convalida alcun token JWT. Tutte le richieste vengono eseguite come anonymous ruolo. Un servizio front-end, ad esempio Gestione API di Azure o un gateway applicazione, può comunque gestire l'autenticazione o i criteri di accesso prima che le richieste raggiungano DAB, ma DAB continua a autorizzare solo come anonymous.
Important
Quando Unauthenticated è attivo authenticated e i ruoli personalizzati definiti nelle autorizzazioni di entità non vengono mai attivati. Se la configurazione contiene tali ruoli, DAB genera un avviso all'avvio.
{
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
AppService
Considera attendibili le intestazioni di identità inserite da EasyAuth del servizio app di Azure.
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
EntraID
Convalida i token JWT emessi dall'ID Microsoft Entra.
{
"host": {
"authentication": {
"provider": "EntraId",
"jwt": {
"audience": "<application-id>",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
}
}
}
}
Custom
Convalida i token JWT dai provider di identità di terze parti.
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<api-audience>",
"issuer": "https://<your-idp-domain>/"
}
}
}
}
Simulatore
Simula l'autenticazione per lo sviluppo e il test locali.
{
"host": {
"authentication": {
"provider": "Simulator"
}
}
}
Important
Il Simulator provider funziona solo quando runtime.host.mode è development. L'avvio di DAB non riesce se il simulatore è configurato in modalità di produzione.
Selezione dei ruoli
Per tutti i provider ad eccezione del simulatore, l'intestazione X-MS-API-ROLE seleziona il ruolo da usare dalle attestazioni dell'utente autenticato. Se omesso, la richiesta usa il ruolo di Authenticated sistema. Per informazioni dettagliate sulla valutazione dei ruoli, vedere Panoramica dell'autorizzazione.
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 | ✔️ Sì* | None |
runtime.host.authentication.jwt |
issuer |
string | ✔️ Sì* | None |
* Sia audience che issuer sono necessari quando l'oggetto jwt è presente. L'oggetto jwt stesso è obbligatorio quando il provider è EntraID, AzureADo Custom.
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 {
...
}
}
}
Compressione (runtime)
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
compression |
object | ❌ No | - |
Configurazione della compressione della risposta HTTP. Se abilitata, DAB comprime i corpi di risposta per ridurre le dimensioni del payload e migliorare la velocità di trasferimento.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.compression |
level |
string | ❌ No | "optimal" |
Valori supportati per level
| Value | Description | Risparmio di compressione | Impatto sulle prestazioni |
|---|---|---|---|
optimal |
Rapporto di bilanciamento e velocità (impostazione predefinita) | Gzip: 90.5%/ Brotli: 92.2% | Moderare l'utilizzo della CPU, un lieve aumento della latenza |
fastest |
Assegna priorità alla velocità rispetto al rapporto | Gzip: 89.8%/ Brotli: 91.1% | Utilizzo ridotto della CPU, latenza minima |
none |
Nessuna compressione | 0% (baseline: 12.673 byte) | None |
Intestazioni HTTP client
La compressione viene richiamata dall'intestazione del Accept-Encoding client. Gli algoritmi supportati sono Gzip e Brotli. L'impostazione level configura la strategia di compressione quando sia il client che il server supportano più algoritmi.
Intestazioni supportate
| Intestazione HTTP | Algoritmo usato |
|---|---|
Accept-Encoding: gzip |
Gzip |
Accept-Encoding: br |
Brotli |
Format
{
"runtime": {
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
}
}
}
Example
{
"runtime": {
"compression": {
"level": "optimal"
}
}
}
Cache (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
cache |
object | ❌ 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 |
runtime.cache |
level-2 |
object | ❌ No | - |
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache.level-2 |
enabled |
boolean | ❌ No | False |
runtime.cache.level-2 |
provider |
string | ❌ No | redis |
runtime.cache.level-2 |
connection-string |
string | ❌ No | None |
runtime.cache.level-2 |
partition |
string | ❌ No | None |
Tip
Per impostazione predefinita, la proprietà a livello cache.ttl-seconds di entità corrisponde a questo valore globale.
Tip
Per esempi di configurazione end-to-end, comportamento a livello di cache e Redis, vedere Implementare la cache di livello 2.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level-2": {
"enabled": <boolean>,
"provider": "redis",
"connection-string": <string>,
"partition": <string>
}
}
}
}
Important
Se global enabled è false, il livello enabled di entità individuale non è rilevante.
Quando level-2.enabled è true, DAB usa il provider di cache distribuito configurato oltre alla cache in memoria locale. Un'entità configurata con livello L1L2 di cache controlla prima la cache locale, quindi la cache distribuita, prima di passare al database.
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 | - |
runtime.telemetry |
azure-log-analytics |
object | ❌ No | - |
runtime.telemetry |
file |
object | ❌ No | - |
Configura il livello di dettaglio della registrazione per ogni spazio dei nomi. Questa configurazione 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 | true |
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 più passaggi di configurazione. HTTP/protobuf (4318) è più semplice e più semplice da eseguire, ma meno efficiente.
Azure Log Analytics (telemetria)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
azure-log-analytics |
object | ❌ No | - |
Configura la registrazione ad Azure Log Analytics tramite un endpoint di raccolta dati. Se abilitata, DAB invia i dati di telemetria in batch a un intervallo configurabile.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics |
enabled |
boolean | ❌ No | false |
runtime.telemetry.azure-log-analytics |
dab-identifier |
string | ❌ No | "DabLogs" |
runtime.telemetry.azure-log-analytics |
flush-interval-seconds |
integer | ❌ No | 5 |
runtime.telemetry.azure-log-analytics |
auth |
object | ✔️ Sì* | - |
*
auth è obbligatorio quando enabled è true.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics.auth |
custom-table-name |
string | ✔️ Sì* | null |
runtime.telemetry.azure-log-analytics.auth |
dcr-immutable-id |
string | ✔️ Sì* | null |
runtime.telemetry.azure-log-analytics.auth |
dce-endpoint |
string | ✔️ Sì* | null |
* Obbligatorio quando enabled è true.
-
dab-identifier: un'etichetta passata a Log Analytics per distinguere i log provenienti dal generatore di API dati. -
flush-interval-seconds— intervallo di tempo (in secondi) tra l'invio di batch di dati di telemetria. -
custom-table-name: nome della tabella personalizzata in Azure Log Analytics in cui vengono archiviati i dati. -
dcr-immutable-id: ID non modificabile della regola di raccolta dati che definisce la modalità di raccolta dei dati. -
dce-endpoint: l'URL dell'endpoint di raccolta dati usato per inviare dati di telemetria.
Format
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": <true> | <false> (default),
"dab-identifier": <string> (default: "DabLogs"),
"flush-interval-seconds": <integer> (default: 5),
"auth": {
"custom-table-name": "<string>",
"dcr-immutable-id": "<string>",
"dce-endpoint": "<string>"
}
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": true,
"dab-identifier": "MyDabInstance",
"flush-interval-seconds": 10,
"auth": {
"custom-table-name": "DabTelemetry_CL",
"dcr-immutable-id": "dcr-abc123def456",
"dce-endpoint": "https://my-dce.eastus-1.ingest.monitor.azure.com"
}
}
}
}
}
File (telemetria)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
file |
object | ❌ No | - |
Configura la scrittura di log di telemetria in un file locale. Se abilitata, DAB scrive l'output del log strutturato nel percorso del file specificato con intervalli di sequenza e limiti di dimensioni configurabili.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.file |
enabled |
boolean | ❌ No | false |
runtime.telemetry.file |
path |
string | ✔️ Sì* | "/logs/dab-log.txt" |
runtime.telemetry.file |
rolling-interval |
enum | ❌ No | "Day" |
runtime.telemetry.file |
retained-file-count-limit |
integer | ❌ No | 1 |
runtime.telemetry.file |
file-size-limit-bytes |
integer | ❌ No | 1048576 |
*
path è obbligatorio quando enabled è true.
Valori di intervallo in sequenza
| Value | Description |
|---|---|
Minute |
Nuovo file di log ogni minuto |
Hour |
Nuovo file di log ogni ora |
Day |
Nuovo file di log ogni giorno (impostazione predefinita) |
Month |
Nuovo file di log ogni mese |
Year |
Nuovo file di log ogni anno |
Infinite |
Non eseguire mai il rollback in un nuovo file |
Format
{
"runtime": {
"telemetry": {
"file": {
"enabled": <true> | <false> (default),
"path": <string> (default: "/logs/dab-log.txt"),
"rolling-interval": <"Day"> (default) | <"Minute"> | <"Hour"> | <"Month"> | <"Year"> | <"Infinite">,
"retained-file-count-limit": <integer> (default: 1),
"file-size-limit-bytes": <integer> (default: 1048576)
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"file": {
"enabled": true,
"path": "/var/log/dab/dab-telemetry.txt",
"rolling-interval": "Hour",
"retained-file-count-limit": 24,
"file-size-limit-bytes": 5242880
}
}
}
}
MCP (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
mcp |
object | ❌ No | - |
Configura il server MCP (SQL Model Context Protocol), che espone le entità di database come strumenti MCP per gli agenti di intelligenza artificiale.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp |
enabled |
boolean | ❌ No | true |
runtime.mcp |
path |
string | ❌ No | "/mcp" |
runtime.mcp |
description |
string | ❌ No | null |
runtime.mcp |
dml-tools |
booleano o oggetto | ❌ No | true |
La dml-tools proprietà accetta un valore booleano per abilitare o disabilitare tutti gli strumenti o un oggetto per controllare i singoli strumenti:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp.dml-tools |
describe-entities |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
create-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
read-records |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
update-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
delete-record |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
execute-entity |
boolean | ❌ No | true |
runtime.mcp.dml-tools |
aggregate-records |
booleano o oggetto | ❌ No | true |
Lo aggregate-records strumento accetta un valore booleano o un oggetto con altre impostazioni:
| Parent | Property | Type | Required | Default | Intervallo |
|---|---|---|---|---|---|
runtime.mcp.dml-tools.aggregate-records |
enabled |
boolean | ❌ No | true |
|
runtime.mcp.dml-tools.aggregate-records |
query-timeout |
integer | ❌ No | 30 |
1-600 secondi |
Format
{
"runtime": {
"mcp": {
"enabled": <true> (default) | <false>,
"path": <string> (default: "/mcp"),
"description": <string>,
"dml-tools": {
"describe-entities": <true> | <false>,
"create-record": <true> | <false>,
"read-records": <true> | <false>,
"update-record": <true> | <false>,
"delete-record": <true> | <false>,
"execute-entity": <true> | <false>,
"aggregate-records": {
"enabled": <true> | <false>,
"query-timeout": <integer; default: 30>
}
}
}
}
}
Example
{
"runtime": {
"mcp": {
"enabled": true,
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true,
"execute-entity": true,
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Per abilitare o disabilitare tutti gli strumenti DML contemporaneamente, impostare su "dml-tools"true o false.
Quando si disabilita uno strumento a livello di runtime, lo strumento non viene mai visualizzato nella risposta MCP tools/list e non può essere richiamato, indipendentemente dalle autorizzazioni a livello di entità. Per altre informazioni sui singoli strumenti DML, vedere Strumenti DML (Data Manipulation Language).
Uso dell'interfaccia della riga di comando
dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true
dab configure --runtime.mcp.dml-tools.aggregate-records.enabled true
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: One, Max: Eight (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
}
}