Freigeben über


Runtime

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 path Eigenschaft nicht zulässig.
  • Wird verwendet depth-limit , um geschachtelte Abfragen einzuschränken.
  • Legen Sie fest allow-introspection , false dass 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 enabled ist false, spielt die einzelne Entitätsebene enabled keine Rolle.
  • Die path Eigenschaft unterstützt keine Unterpfadwerte wie /api/data.
  • request-body-strict wurde 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 ignoriert INSERT , wenn ihr Wert in der Nutzlast ist null. INSERT Daher können Vorgänge in default() Spalten, wenn request-body-strict dies der Wert isttrue, nicht zu expliziten null Werten führen. Um dieses Verhalten zu erreichen, ist ein UPDATE Vorgang erforderlich.
  • Spalten mit einer default() werden unabhängig vom Nutzlastwert nicht ignoriert UPDATE .
  • 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).

Diagramm von JSON-Webtoken, die im Daten-API-Generator unterstützt werden.

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.

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