Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konfigurationseinstellungen, die das Laufzeitverhalten bestimmen.
Paginierungseinstellungen
| Property | Default | Description |
|---|---|---|
| runtime.pagination.max-Seitengröße | Definiert maximale Datensätze pro Seite | |
| runtime.pagination.default-page-size | Legt Standarddatensätze pro Antwort fest |
REST-Einstellungen
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Basispfad für REST-Endpunkte |
| runtime.rest.enabled | true |
Ermöglicht das Aktivieren oder Deaktivieren von REST-Anforderungen für alle Entitäten. |
| runtime.rest.request-body-strict | true |
Unzulässige zusätzliche Felder im Anforderungstext, wenn "true" ist |
GraphQL-Einstellungen
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Ermöglicht abfragen des zugrunde liegenden GraphQL-Schemas |
| runtime.graphql.path | "/graphql" |
Basispfad für den GraphQL-Endpunkt |
| runtime.graphql.enabled | true |
Ermöglicht das Aktivieren oder Deaktivieren von GraphQL-Anforderungen für alle Entitäten |
| runtime.graphql.depth-limit | null |
Maximale zulässige Tiefe einer GraphQL-Abfrage |
| runtime.graphql.multiple-mutations.create.enabled | false |
Ermöglicht mehrfach erstellte Mutationen für alle Entitäten. |
Hosteinstellungen
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Maximale Größe (MB) der Datenbankantwort, die in einem einzigen Ergebnis zulässig ist |
| runtime.host.mode | "production" |
Ausführungsmodus; "production" oder "development" |
CORS-Einstellungen
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Zulässige CORS-Ursprünge |
| runtime.host.cors.allow-credentials | false |
Legt den Wert für den Access-Control-Allow-Credentials-Header fest. |
Authentifizierungseinstellungen
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | Unauthenticated |
Authentifizierungsanbieter |
| runtime.host.authentication.jwt.audience | null |
JWT-Zielgruppe |
| runtime.host.authentication.jwt.issuer | null |
JWT-Aussteller |
Cacheeinstellungen
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Ermöglicht das zwischenspeichern von Antworten global |
| runtime.cache.ttl-seconds | 5 |
Zeit für live (Sekunden) für den globalen Cache |
| runtime.cache.level-2.enabled | false |
Aktiviert global verteilten Cache der Ebene 2 |
| runtime.cache.level-2.provider | "redis" |
Verteilter Cacheanbieter für Cache der Ebene 2 |
| runtime.cache.level-2.connection-string | null |
Verbindungszeichenfolge für den Cacheanbieter der Ebene 2 |
| runtime.cache.level-2.partition | null |
Optionaler Partitionsname zum Isolieren des verteilten Cachespeichers |
Komprimierungseinstellungen
| Property | Default | Description |
|---|---|---|
| runtime.compression.level | optimal |
HTTP-Antwortkomprimierungsebene (optimal, fastestoder none) |
Telemetrie-Einstellungen
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Application Insights-Verbindungszeichenfolge |
| runtime.telemetry.application-insights.enabled | true |
Aktiviert oder deaktiviert Die Telemetrie von Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
OpenTelemetry-Sammel-URL |
| runtime.telemetry.open-telemetry.headers | {} |
OpenTelemetry-Exportheader |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Name des OpenTelemetry-Diensts |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
OpenTelemetry-Protokoll ("grpc" oder "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Aktiviert oder deaktiviert OpenTelemetry |
| runtime.telemetry.open-telemetry.enabled | true |
Aktiviert oder deaktiviert OpenTelemetry |
| runtime.telemetry.azure-log-analytics.enabled | false |
Aktiviert oder deaktiviert Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.dab-identifier | "DabLogs" |
Bezeichner für DAB in Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.flush-interval-seconds | 5 |
Intervall zwischen Protokollbatch-Pushs (Sekunden) |
| runtime.telemetry.azure-log-analytics.auth.custom-table-name | null |
Benutzerdefinierter Tabellenname für Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id | null |
Unveränderliche ID der Datensammlungsregel |
| runtime.telemetry.azure-log-analytics.auth.dce-endpoint | null |
Endpunkt-URL der Datensammlung |
| runtime.telemetry.file.enabled | false |
Aktiviert oder deaktiviert die Dateisenkenprotokollierung |
| runtime.telemetry.file.path | "/logs/dab-log.txt" |
Dateipfad für Telemetrieprotokolle |
| runtime.telemetry.file.rolling-interval | "Day" |
Rollintervall für Protokolldateien |
| runtime.telemetry.file.retained-file-count-limit | 1 |
Maximale Anzahl aufbewahrter Protokolldateien |
| runtime.telemetry.file.file-size-limit-bytes | 1048576 |
Maximale Dateigröße in Bytes vor dem Rollen |
| runtime.telemetry.log-level.namespace | null |
Außerkraftsetzung auf namespacespezifischer Protokollebene |
| runtime.health.enabled | true |
Aktiviert oder deaktiviert den Integritätsprüfungsendpunkt global |
| runtime.health.roles | null |
Zulässige Rollen für den umfassenden Integritätsendpunkt |
| runtime.health.cache-ttl-seconds | 5 |
Zeit für den Cacheeintrag für die Integritätsprüfung (Sekunden) |
| runtime.health.max-Abfrage-Parallelität | 4 |
Maximale Anzahl gleichzeitiger Integritätsprüfungsabfragen (Bereich: 1-8) |
MCP-Einstellungen
| Property | Default | Description |
|---|---|---|
| runtime.mcp.enabled | true |
Aktiviert oder deaktiviert den MCP-Endpunkt global |
| runtime.mcp.path | "/mcp" |
Basispfad für den MCP-Endpunkt |
| runtime.mcp.description | null |
Serverbeschreibung, die während der Initialisierung an MCP-Clients gesendet wird |
| runtime.mcp.dml-tools | true |
Aktiviert oder deaktiviert alle DML-Tools oder ein Objekt für die Steuerelementsteuerung pro Tool |
| runtime.mcp.dml-tools.describe-entities | true |
Aktiviert das describe_entities Tool |
| runtime.mcp.dml-tools.create-record | true |
Aktiviert das tool create_record |
| runtime.mcp.dml-tools.read-records | true |
Aktiviert das tool read_records |
| runtime.mcp.dml-tools.update-record | true |
Aktiviert das tool update_record |
| runtime.mcp.dml-tools.delete-record | true |
Aktiviert das tool delete_record |
| runtime.mcp.dml-tools.execute-entity | true |
Aktiviert das execute_entity Tool |
| runtime.mcp.dml-tools.aggregate-records | true |
Aktiviert das aggregate_records-Tool (boolescher Wert oder Objekt mit Abfragetimeout) |
Formatübersicht
{
"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`)
}
}
}
}
}
Modus (Hostlaufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
host |
Enumeration (production | development) |
❌ Nein | production |
Entwicklungsverhalten
- Enabled Nitro (ehemals Banana Cake Pop) für GraphQL-Tests
- Aktivierte Swagger-UI für REST-Tests
- Anonyme Integritätsprüfungen aktiviert
- Erweiterte Protokollierungsverknündlichkeit (Debug)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Maximale Antwortgröße (Hostlaufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
integer | ❌ Nein | 158 |
Legt die maximale Größe (in Megabyte) für ein bestimmtes Ergebnis fest. Da große Antworten das System belasten können, max-response-size-mb wird die Gesamtgröße (anders als die Zeilenanzahl) begrenzt, um eine Überladung zu verhindern, insbesondere bei großen Spalten wie Text oder JSON.
| Value | Result |
|---|---|
| nicht festgelegt | Standard verwenden |
null |
Standard verwenden |
integer |
Beliebige positive 32-Bit-Ganzzahl |
<= 0 |
Nicht unterstützt |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
object | ❌ Nein | - |
Globale GraphQL-Konfiguration.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ Nein | None |
runtime.graphql |
path |
string | ❌ Nein | "/graphql" |
runtime.graphql |
depth-limit |
integer | ❌ Nein | Keine (unbegrenzt) |
runtime.graphql |
allow-introspection |
boolean | ❌ Nein | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ Nein | False |
Eigenschaftsnotizen
- Unterpfade sind für die
pathEigenschaft nicht zulässig. - Wird verwendet
depth-limit, um geschachtelte Abfragen einzuschränken. - Legen Sie fest
allow-introspection,falsedass das GraphQL-Schema ausgeblendet wird. - Wird verwendet
multiple-mutations, um mehrere Entitäten in eine einzelne Mutation einzufügen.
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)
}
}
}
}
}
Beispiel: Mehrere Mutationen
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
GraphQL-Mutation
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 (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
rest |
object | ❌ Nein | - |
Globale REST-Konfiguration.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ Nein | None |
runtime.rest |
path |
string | ❌ Nein | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ Nein | True |
Eigenschaftsnotizen
- Wenn global
enabledistfalse, spielt die einzelne Entitätsebeneenabledkeine Rolle. - Die
pathEigenschaft unterstützt keine Unterpfadwerte wie/api/data. -
request-body-strictwurde eingeführt, um .NET POCO-Objekte zu vereinfachen.
request-body-strict |
Behavior |
|---|---|
true |
Zusätzliche Felder im Anforderungstext verursachen eine BadRequest Ausnahme. |
false |
Zusätzliche Felder im Anforderungstext werden ignoriert. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Beispiel: anforderungstext-strict
- Spalten mit einem
default()Wert werden nur ignoriertINSERT, wenn ihr Wert in der Nutzlast istnull.INSERTDaher können Vorgänge indefault()Spalten, wennrequest-body-strictdies der Wert isttrue, nicht zu explizitennullWerten führen. Um dieses Verhalten zu erreichen, ist einUPDATEVorgang erforderlich. - Spalten mit einer
default()werden unabhängig vom Nutzlastwert nicht ignoriertUPDATE. - Berechnete Spalten werden immer ignoriert.
- Automatisch generierte Spalten werden immer ignoriert.
Beispieltabelle
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
);
Anforderungsnutzlast
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Einfügeverhalten bei 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.
Antwortnutzlast
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Verhalten aktualisieren, wenn request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Antwortnutzlast
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (Hostlaufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
object | ❌ Nein | - |
Globale CORS-Konfiguration.
Tip
CORS steht für "Cross-Origin Resource Sharing". Es handelt sich um ein Browsersicherheitsfeature, das steuert, ob Webseiten Anforderungen an eine andere Domäne stellen können als die, die sie bereitgestellt hat.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ Nein | False |
runtime.host.cors |
origins |
Zeichenfolgenarray | ❌ Nein | None |
Note
Die allow-credentials Eigenschaft legt den Access-Control-Allow-Credentials CORS-Header fest.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> | <false> (default),
"origins": ["<array-of-strings>"]
}
}
}
}
Note
Der Wildcard * ist als Wert gültig für origins.
Anbieter (Authentifizierungshostlaufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
Enumeration (Unauthenticated | StaticWebApps | AppService | EntraId | Custom | Simulator) |
❌ Nein | Unauthenticated |
Wählt die Authentifizierungsmethode aus. Jeder Anbieter überprüft die Identität anders. Schritt-für-Schritt-Setup finden Sie in den Anleitungen in der folgenden Tabelle.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Anbieterzusammenfassung
| Provider | Anwendungsfall | Identitätsquelle | Schrittanleitung |
|---|---|---|---|
Unauthenticated |
DAB befindet sich hinter einem vertrauenswürdigen Front-End (Standard) | Keine – alle Anforderungen werden als anonymous |
Konfigurieren des nicht authentifizierten Anbieters |
AppService |
In Azure gehostete Apps (EasyAuth) |
X-MS-CLIENT-PRINCIPAL-Header |
Konfigurieren der App Service-Authentifizierung |
EntraID |
Microsoft Entra-ID (Azure AD) | JWT-Bearertoken | Konfigurieren Sie die Entra ID-Authentifizierung |
Custom |
IdPs von Drittanbietern (Okta, Auth0) | JWT-Bearertoken | Konfigurieren der benutzerdefinierten JWT-Authentifizierung |
Simulator |
Nur lokale Tests | Simuliert | Konfigurieren der Simulatorauthentifizierung |
Note
Der EntraId Anbieter wurde zuvor benannt AzureAd. Der alte Name funktioniert weiterhin aus Gründen der Kompatibilität.
Nicht authentifiziert (Standard)
Wenn Unauthenticated festgelegt ist (oder kein Anbieter angegeben ist), prüft oder überprüft DAB keine JWT. Alle Anforderungen werden als anonymous Rolle ausgeführt. Ein Front-End-Dienst wie Azure API Management oder ein Anwendungsgateway kann weiterhin Authentifizierungs- oder Zugriffsrichtlinie verarbeiten, bevor Anforderungen DAB erreichen, aber DAB weiterhin nur als anonymousautorisiert.
Important
Wenn Unauthenticated aktiv ist und benutzerdefinierte Rollen, die in Entitätsberechtigungen definiert sind, authenticated werden nie aktiviert. Wenn Ihre Konfiguration diese Rollen enthält, gibt DAB beim Start eine Warnung aus.
{
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
AppService
Vertrauenswürdige Identitätsheader, die von Azure App Service EasyAuth eingefügt werden.
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
EntraID
Überprüft JWT-Token, die von der Microsoft Entra-ID ausgestellt wurden.
{
"host": {
"authentication": {
"provider": "EntraId",
"jwt": {
"audience": "<application-id>",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
}
}
}
}
Kundenspezifisch
Überprüft JWT-Token von Identitätsanbietern von Drittanbietern.
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<api-audience>",
"issuer": "https://<your-idp-domain>/"
}
}
}
}
Simulator
Simuliert die Authentifizierung für lokale Entwicklung und Tests.
{
"host": {
"authentication": {
"provider": "Simulator"
}
}
}
Important
Der Simulator Anbieter funktioniert nur, wenn runtime.host.mode dies der Zeitpunkt ist development. DAB kann nicht gestartet werden, wenn Simulator im Produktionsmodus konfiguriert ist.
Rollenauswahl
Für alle Anbieter mit Ausnahme von Simulator wählt der X-MS-API-ROLE Header aus, welche Rolle aus den Ansprüchen des authentifizierten Benutzers verwendet werden soll. Wenn sie weggelassen wird, verwendet die Anforderung die Authenticated Systemrolle. Ausführliche Informationen zur Rollenauswertung finden Sie in der Autorisierungsübersicht.
JWT (Authentifizierungshostlaufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
object | ❌ Nein | - |
Konfiguration des globalen JSON-Webtokens (JWT).
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ✔️ Ja* | None |
runtime.host.authentication.jwt |
issuer |
string | ✔️ Ja* | None |
* Beide und audienceissuer sind erforderlich, wenn das jwt Objekt vorhanden ist. Das jwt Objekt selbst ist erforderlich, wenn der Anbieter , EntraIDAzureADoder Custom.
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Paginierung (Runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
object | ❌ Nein | - |
Globale Paginierungsgrenzwerte für REST- und GraphQL-Endpunkte.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ Nein | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ Nein | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ Nein | false |
Unterstützte Max-Page-Size-Werte
| Value | Result |
|---|---|
integer |
Jede positive 32-Bit-Ganzzahl wird unterstützt. |
0 |
Nicht unterstützt. |
-1 |
Standardmäßig wird der maximal unterstützte Wert verwendet. |
< -1 |
Nicht unterstützt. |
Unterstützte Standardseitenwerte
| Value | Result |
|---|---|
integer |
Eine positive ganze Zahl kleiner als die aktuelle max-page-size. |
0 |
Nicht unterstützt. |
-1 |
Standardmäßig wird die aktuelle max-page-size Einstellung festgelegt. |
< -1 |
Nicht unterstützt. |
Next-Link-relatives Verhalten
Ist next-link-relative dies trueder Grund, verwenden Paginierungswerte nextLink relative URLs anstelle absoluter URLs.
| Value | Example |
|---|---|
false (Standardwert) |
"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
Wenn der Wert größer als max-page-sizeist, werden die Ergebnisse auf max-page-size.
Beispiel: Paging in REST
Request
GET https://localhost:5001/api/users
Antwortnutzlast
{
"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=="
}
Nächste Seite anfordern
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Beispiel: Paging in GraphQL
Anforderungsnutzlast (Abfrage)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Antwortnutzlast
{
"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=="
}
}
}
Nächste Seite anfordern
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Beispiel: Zugreifen auf max-page-size Anforderungen
Verwenden Sie den max-page-size Wert durch Festlegen $limit (REST) oder first (GraphQL) auf -1.
REST
GET https://localhost:5001/api/users?$limit=-1
GraphQL
query {
users(first: -1) {
items {
...
}
}
}
Komprimierung (Laufzeit)
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
compression |
object | ❌ Nein | - |
Konfiguration der HTTP-Antwortkomprimierung. Wenn diese Option aktiviert ist, komprimiert DAB Antwortkörper, um Nutzlastgrößen zu reduzieren und Übertragungsgeschwindigkeiten zu verbessern.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.compression |
level |
string | ❌ Nein | "optimal" |
Unterstützte Werte für level
| Value | Description | Komprimierungseinsparungen | Auswirkungen auf die Leistung |
|---|---|---|---|
optimal |
Verhältnis und Geschwindigkeit (Standard) | Gzip: 90,5% / Brotli: 92.2% | Moderate CPU-Auslastung, leichte Latenzsteigerung |
fastest |
Priorisiert geschwindigkeitsüberverhältnis | Gzip: 89,8% / Brotli: 91.1% | Geringe CPU-Auslastung, minimale Latenz |
none |
Keine Komprimierung | 0% (Basisplan: 12.673 Bytes) | None |
Client-HTTP-Header
Die Komprimierung wird vom Header des Accept-Encoding Clients aufgerufen. Unterstützte Algorithmen sind Gzip und Brotli. Die level Einstellung konfiguriert die Komprimierungsstrategie, wenn sowohl der Client als auch der Server mehrere Algorithmen unterstützen.
Unterstützte Header
| HTTP-Header | Verwendeter Algorithmus |
|---|---|
Accept-Encoding: gzip |
GZip |
Accept-Encoding: br |
Brotli |
Format
{
"runtime": {
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
}
}
}
Example
{
"runtime": {
"compression": {
"level": "optimal"
}
}
}
Cache (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
cache |
object | ❌ Nein | - |
Globale Cachekonfiguration.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ Nein | False |
runtime.cache |
ttl-seconds |
integer | ❌ Nein | 5 |
runtime.cache |
level-2 |
object | ❌ Nein | - |
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache.level-2 |
enabled |
boolean | ❌ Nein | False |
runtime.cache.level-2 |
provider |
string | ❌ Nein | redis |
runtime.cache.level-2 |
connection-string |
string | ❌ Nein | None |
runtime.cache.level-2 |
partition |
string | ❌ Nein | None |
Tip
Die Eigenschaft auf Entitätsebene cache.ttl-seconds wird standardmäßig auf diesen globalen Wert festgelegt.
Tip
Beispiele für End-to-End-Setup, Verhalten auf Cacheebene und Redis finden Sie unter Implementieren des Caches der Ebene 2.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level-2": {
"enabled": <boolean>,
"provider": "redis",
"connection-string": <string>,
"partition": <string>
}
}
}
}
Important
Wenn global enabled ist false, spielt die einzelne Entitätsebene enabled keine Rolle.
In diesem level-2.enabled Zeitraum trueverwendet DAB zusätzlich zum lokalen Speichercache den konfigurierten verteilten Cacheanbieter. Eine Entität, die mit Cacheebene L1L2 konfiguriert ist, überprüft zuerst den lokalen Cache, und verteilten Cache, bevor Sie zur Datenbank wechseln.
Telemetrie (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
object | ❌ Nein | - |
Globale Telemetriekonfiguration.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dictionary | ❌ Nein | None |
runtime.telemetry |
application-insights |
object | ❌ Nein | - |
runtime.telemetry |
open-telemetry |
object | ❌ Nein | - |
runtime.telemetry |
azure-log-analytics |
object | ❌ Nein | - |
runtime.telemetry |
file |
object | ❌ Nein | - |
Konfiguriert die Ausführlichkeit der Protokollierung pro Namespace. Diese Konfiguration folgt standardmäßigen .NET-Protokollierungskonventionen und ermöglicht eine granulare Kontrolle, obwohl es davon ausgeht, dass sie mit internen Daten-API-Generatoren vertraut ist. Der Daten-API-Generator ist Open Source: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level kann sowohl in der Entwicklung als auch in der Produktion heiß neu geladen werden. Es ist derzeit die einzige Eigenschaft, die hot reload in der Produktion unterstützt.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (Telemetrie)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
object | ❌ Nein | - |
Konfiguriert die Protokollierung für Application Insights.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ Nein | true |
runtime.telemetry.application-insights |
connection-string |
string | ✔️ Ja | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (Telemetrie)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
object | ❌ Nein | - |
Konfiguriert die Protokollierung für "Telemetrie öffnen".
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ Nein | true |
runtime.telemetry.open-telemetry |
endpoint |
string | ✔️ Ja | None |
runtime.telemetry.open-telemetry |
headers |
string | ❌ Nein | None |
runtime.telemetry.open-telemetry |
service-name |
string | ❌ Nein | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
Enumeration (grpc | httpprotobuf) |
❌ Nein | grpc |
Mehrere Kopfzeilen sind , (Komma) getrennt.
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",
}
}
}
}
Erfahren Sie mehr über OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) ist schneller und unterstützt Streaming, erfordert jedoch weitere Einrichtungsschritte. HTTP/protobuf (4318) ist einfacher und einfacher zu debuggen, aber weniger effizient.
Azure Log Analytics (Telemetrie)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
azure-log-analytics |
object | ❌ Nein | - |
Konfiguriert die Protokollierung mit Azure Log Analytics über einen Datensammlungsendpunkt. Wenn diese Option aktiviert ist, sendet DAB Telemetriedaten in Batches in einem konfigurierbaren Intervall.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics |
enabled |
boolean | ❌ Nein | false |
runtime.telemetry.azure-log-analytics |
dab-identifier |
string | ❌ Nein | "DabLogs" |
runtime.telemetry.azure-log-analytics |
flush-interval-seconds |
integer | ❌ Nein | 5 |
runtime.telemetry.azure-log-analytics |
auth |
object | ✔️ Ja* | - |
*
auth ist erforderlich, wenn enabled dies der Zeitpunkt ist true.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics.auth |
custom-table-name |
string | ✔️ Ja* | null |
runtime.telemetry.azure-log-analytics.auth |
dcr-immutable-id |
string | ✔️ Ja* | null |
runtime.telemetry.azure-log-analytics.auth |
dce-endpoint |
string | ✔️ Ja* | null |
* Erforderlich, wenn enabled dies der Zeitpunkt ist true.
-
dab-identifier– eine an Log Analytics übergebene Bezeichnung, um zu unterscheiden, welche Protokolle aus dem Daten-API-Generator stammen. -
flush-interval-seconds— das Zeitintervall (in Sekunden) zwischen dem Senden von Batches von Telemetriedaten. -
custom-table-name– der Name der benutzerdefinierten Tabelle in Azure Log Analytics, in der Daten gespeichert werden. -
dcr-immutable-id— die unveränderliche ID der Datensammlungsregel, die definiert, wie Daten gesammelt werden. -
dce-endpoint– die Endpunkt-URL der Datensammlung, die zum Senden von Telemetriedaten verwendet wird.
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"
}
}
}
}
}
Datei (Telemetrie)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
file |
object | ❌ Nein | - |
Konfiguriert das Schreiben von Telemetrieprotokollen in eine lokale Datei. Wenn diese Option aktiviert ist, schreibt DAB die strukturierte Protokollausgabe in den angegebenen Dateipfad mit konfigurierbaren Rollintervallen und Größenbeschränkungen.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.file |
enabled |
boolean | ❌ Nein | false |
runtime.telemetry.file |
path |
string | ✔️ Ja* | "/logs/dab-log.txt" |
runtime.telemetry.file |
rolling-interval |
enum | ❌ Nein | "Day" |
runtime.telemetry.file |
retained-file-count-limit |
integer | ❌ Nein | 1 |
runtime.telemetry.file |
file-size-limit-bytes |
integer | ❌ Nein | 1048576 |
*
path ist erforderlich, wenn enabled dies der Zeitpunkt ist true.
Rollintervallwerte
| Value | Description |
|---|---|
Minute |
Neue Protokolldatei jede Minute |
Hour |
Neue Protokolldatei jede Stunde |
Day |
Neue Protokolldatei täglich (Standard) |
Month |
Neue Protokolldatei jeden Monat |
Year |
Neue Protokolldatei jedes Jahr |
Infinite |
Nie ein Rollup zu einer neuen Datei |
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 (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
mcp |
object | ❌ Nein | - |
Konfiguriert den SQL Model Context Protocol (MCP)-Server, der Datenbankentitäten als MCP-Tools für KI-Agents verfügbar macht.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp |
enabled |
boolean | ❌ Nein | true |
runtime.mcp |
path |
string | ❌ Nein | "/mcp" |
runtime.mcp |
description |
string | ❌ Nein | null |
runtime.mcp |
dml-tools |
Boolescher Wert oder Objekt | ❌ Nein | true |
Die dml-tools Eigenschaft akzeptiert einen booleschen Wert, um alle Tools zu aktivieren oder zu deaktivieren, oder ein Objekt zum Steuern einzelner Tools:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp.dml-tools |
describe-entities |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
create-record |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
read-records |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
update-record |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
delete-record |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
execute-entity |
boolean | ❌ Nein | true |
runtime.mcp.dml-tools |
aggregate-records |
Boolescher Wert oder Objekt | ❌ Nein | true |
Das aggregate-records Tool akzeptiert einen booleschen Wert oder ein Objekt mit weiteren Einstellungen:
| Parent | Property | Type | Required | Default | Bereich |
|---|---|---|---|---|---|
runtime.mcp.dml-tools.aggregate-records |
enabled |
boolean | ❌ Nein | true |
|
runtime.mcp.dml-tools.aggregate-records |
query-timeout |
integer | ❌ Nein | 30 |
1–600 Sekunden |
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
}
}
}
}
}
Um alle DML-Tools auf einmal zu aktivieren oder zu deaktivieren, legen Sie diesen "dml-tools" fest true oder false.
Wenn Sie ein Tool auf Laufzeitebene deaktivieren, wird das Tool nie in der MCP-Antwort tools/list angezeigt und kann unabhängig von Berechtigungen auf Entitätsebene nicht aufgerufen werden. Weitere Informationen zu einzelnen DML-Tools finden Sie unter DML-Tools (Data Manipulation Language).
Verwenden der CLI
dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true
dab configure --runtime.mcp.dml-tools.aggregate-records.enabled true
Integrität (Laufzeit)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
health |
object | ❌ Nein | - |
Konfiguration des globalen Integritätsprüfungsendpunkts (/health)
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default | Bereich/Notizen |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ Nein | true |
|
runtime.health |
roles |
Zeichenfolgenarray | ✔️ Ja* | null |
*Erforderlich im Produktionsmodus |
runtime.health |
cache-ttl-seconds |
integer | ❌ Nein | 5 |
Min: 0 |
runtime.health |
max-query-parallelism |
integer | ❌ Nein | 4 |
Min: Eins, Max: Acht (geklemmt) |
Verhalten bei der Entwicklung im Vergleich zur Produktion
| Condition | Entwicklungsverhalten | Produktionsverhalten |
|---|---|---|
health.enabled = falsch |
403 Status |
403 Status |
health.enabled = wahr |
Hängt von der Rolle ab | Hängt von der Rolle ab |
roles nicht angegeben oder null |
Angezeigte Integrität |
403 Status |
Aktuelle Rolle nicht in roles |
403 Status |
403 Status |
aktuelle Rolle in roles |
Angezeigte Integrität | Angezeigte Integrität |
roles Enthält anonymous |
Angezeigte Integrität | Angezeigte Integrität |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Wenn global enabled ist false, spielt die einzelne Entitätsebene enabled keine Rolle.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}