Freigeben über


Neuerungen in Data API Builder Version 2.0 (März 2026)

Hinweis

Version 2.0 befindet sich in der öffentlichen Vorschau. Einige Features werden möglicherweise noch nicht für die Produktionsverwendung empfohlen. Ausführliche Informationen zur Verfügbarkeit und Stabilität von Features finden Sie in der Dokumentation.

Der Daten-API-Generator 2.0 konzentriert sich auf die Integration von Model Context Protocol (MCP) und KI, einfachere Authentifizierungsstandards und eine bessere Konfigurationsautomatisierung. Diese Version bietet auch eine stärkere Observability und flexiblere REST- und OpenAPI-Verhaltensweisen.

Einführung: Automatische Konfiguration

Die automatische Konfiguration ist ein leistungsfähiges Feature, mit dem Sie Muster definieren können, die Datenbankobjekte automatisch in Ihrer Konfiguration suchen und verfügbar machen. Dieser Ansatz kann eine Konfigurationsdatei erheblich verkleinern, insbesondere, wenn Objekte und Berechtigungen vorhersagbar sind. Darüber hinaus autoentities werden die Muster bei jedem Start von DAB neu ausgewertet und angewendet, sodass neue Tabellen, die mit dem Muster übereinstimmen, automatisch als Entitäten ohne manuelle Konfigurationsänderungen hinzugefügt werden.

Hinweis

In Version 2.0 dab auto-config werden nur Tabellen in einer oder mehreren Microsoft SQL-Datenbanken unterstützt. Wenn Sie eine andere Datenquelle oder einen anderen Datenbanktyp benötigen, können Sie Ihre Entitäten weiterhin manuell definieren.

Why?

Mit auto-config, können Sie ein gesamtes Datenbankschema als DAB-API verbinden, ohne einen einzelnen Entitätsblock manuell zu schreiben. Definieren Sie Ihre Muster einmal, und DAB erledigt den Rest.

Es ist erwähnenswert, dass autoentities keine Umstellung bei DAB zu einer schemagesteuerten API darstellt. Das Problem bei schemagesteuerten APIs ist, dass sie das Schema offenlegen und die Datenbank belasten, sich an die API statt an einen gut gestalteten Datenbankentwurf anzupassen. Autoentities Lösen Sie dieses Problem, indem Sie Muster definieren können, die Ihrem Datenbankschema entsprechen, und automatisch eine Teilmenge von Entitäten aus diesen Mustern generieren. Darüber hinaus können Sie mehrere autoentities mit eindeutigen Mustern und Berechtigungen definieren, an MCP teilnehmen und vieles mehr, ohne dass manuelle Konfigurationsupdates vorhanden sind, während sich Ihre Datenbank weiterentwickelt.

Befehlszeile

dab auto-config my-def \
	--patterns.include "dbo.%" \
	--patterns.exclude "dbo.internal%" \
	--patterns.name "{schema}_{table}" \
	--permissions "anonymous:read"

dab auto-config my-def \
	--template.rest.enabled true \
	--template.graphql.enabled true \
	--template.cache.enabled true \
	--template.cache.ttl-seconds 30 \
	--template.cache.level L1L2

Resultierende Konfiguration

{
	"autoentities": {
		"my-def": {
			"patterns": {
				"include": [ "dbo.%" ],
				"exclude": [ "dbo.internal%" ],
				"name": "{schema}_{table}"
			},
			"template": {
				"rest": { "enabled": true },
				"graphql": { "enabled": true },
				"cache": {
					"enabled": true,
					"ttl-seconds": 30,
					"level": "l1l2"
				}
			},
			"permissions": [
				{
					"role": "anonymous",
					"actions": [ "read" ]
				}
			]
		}
	}
}

Testen der Konfiguration

dab auto-config-simulate Gibt eine Vorschau an, welche Datenbankobjekte Ihren autoentities Mustern entsprechen, bevor Sie änderungen übernehmen. Sie stellt eine Verbindung mit der Datenbank bereit, löst jedes Muster auf und druckt die übereinstimmenden Objekte. Jetzt können Sie überprüfen, ob Ihre Ein- und Ausschlussmuster genau die Entitäten erzeugen, die Sie erwarten, bevor Sie die Livekonfiguration berühren.

dab auto-config-simulate
Resultierende Ausgabe
AutoEntities Simulation Results

Filter: my-def
Matches: 3
	dbo_Products  →  dbo.Products
	dbo_Inventory →  dbo.Inventory
	dbo_Pricing   →  dbo.Pricing

Lesen der Dokumente

Einführung: On-Behalf-Of (OBO) Benutzerdelegierung

DAB 2.0 fügt die On-Behalf-Of-Authentifizierung (OBO), auch als Pass-Through-Authentifizierung bekannt, für Microsoft SQL-Datenbanken mit Microsoft Entra ID hinzu. Wenn diese Option aktiviert ist, tauscht DAB das eingehende Benutzertoken gegen ein nachgeschaltetes SQL-Token, sodass die Datenbank den tatsächlichen aufrufenden Benutzer authentifiziert.

Why?

Mit der OBO-Authentifizierung können Sie APIs erstellen, bei denen die SQL-Datenbank die echte Benutzeridentität sieht und erzwingt, was für einige Sicherheitsszenarien auf Zeilenebene und Complianceüberwachung hilfreich sein kann. Dieses Verhalten ist besonders in MCP-Szenarien hilfreich, in denen unklar werden kann, wer handelt; OBO ermöglicht eine transparente Benutzeridentifikation.

Voraussetzungen für OBO

  1. Eine Entra-ID-App-Registrierung mit den entsprechenden API-Berechtigungen zum Anfordern von Token für die Datenbank
  2. Ein upstream-Identitätsanbieter, der JWTs ausgibt, die von DAB akzeptiert werden (Entra-ID oder ein benutzerdefinierter Anbieter, den Sie konfigurieren)
  3. MSSQL-Datenbank, die für die Annahme von Microsoft Entra-ID-Token konfiguriert ist

Konfigurationsanforderungen

  • Erfordert data-source.database-type: "mssql"
  • Erfordert data-source.user-delegated-auth.database-audience
  • erfordert, dass runtime.cache deaktiviert wird, wenn OBO konfiguriert ist.
  • erfordert die Umgebungsvariable DAB_OBO_CLIENT_ID mit der Client-ID der OBO-App-Registrierung
  • erfordert die Umgebungsvariable DAB_OBO_TENANT_ID mit der Mandanten-ID der OBO-App-Registrierung
  • erfordert die Umgebungsvariable DAB_OBO_CLIENT_SECRET mit dem geheimen Clientschlüssel der OBO-App-Registrierung

Befehlszeile

set DAB_OBO_CLIENT_ID=1234-abcd-5678-efgh
set DAB_OBO_TENANT_ID=abcd-1234-efgh-567
set DAB_OBO_CLIENT_SECRET=supersecretvalue

dab configure --data-source.database-type mssql
dab configure --runtime.cache.enabled false

dab configure --data-source.user-delegated-auth.enabled true
dab configure --data-source.user-delegated-auth.provider EntraId
dab configure --data-source.user-delegated-auth.database-audience "https://database.windows.net"

Resultierende Konfiguration

{
	"data-source": {
		"database-type": "mssql",
		"connection-string": "@env('SQL_CONNECTION_STRING')",
		"user-delegated-auth": {
			"enabled": true,
			"provider": "EntraId",
			"database-audience": "https://database.windows.net"
		}
	},
	"runtime": {
		"cache": {
			"enabled": false
		}
	}
}

Hinweis

Wenn OBO aktiviert ist, verwaltet DAB separate SQL-Verbindungspools pro Benutzer, sodass das Zugriffstoken eines Benutzers nie für die Anforderung eines anderen Benutzers wiederverwendet wird. Jetzt, wo die Sicherheit auf Zeilenebene davon abhängt, wer verbunden ist, können Sie sicher sein, dass die Wiederverwendung von Verbindungen zwischen Benutzern nicht unbemerkt den falschen Zugriff gewährt.

Lesen der Dokumente

Einführung: Benutzerdefinierte MCP-Tools

Wenn custom-tool: true für eine Entität mit gespeicherten Prozeduren festgelegt wird, registriert DAB diese Prozedur dynamisch als benanntes MCP-Tool, das über die Standard tools/list - und tools/call Methoden verfügbar gemacht wird.

Why?

Jetzt können Sie KI-Agents zweckdienlich erstellte Tools zur Verfügung stellen, die von Ihren vorhandenen gespeicherten Prozeduren unterstützt werden, ohne Klebecode zu schreiben. Das Tool wird in der MCP-Toolliste angezeigt und akzeptiert dieselben Parameter wie die Prozedur.

Befehlszeile

dab add GetBookById \
  --source dbo.get_book_by_id \
  --source.type "stored-procedure" \
  --permissions "anonymous:execute" \
  --mcp.custom-tool true

Resultierende Konfiguration

{
	"entities": {
		"GetBookById": {
			"source": {
				"type": "stored-procedure",
				"object": "dbo.get_book_by_id"
			},
			"mcp": {
				"custom-tool": true
			},
			"permissions": [
				{
					"role": "anonymous",
					"actions": [ "execute" ]
				}
			]
		}
	}
}

Lesen der Dokumente

Einführung: der neue Unauthenticated Anbieter

DAB 2.0 führt als neuer Authentifizierungsanbieter Unauthenticated ein und macht ihn als Standard für neue Konfigurationen. Wenn dieser Anbieter aktiv ist, werden alle Anforderungen als anonymous ausgeführt. DAB überprüft oder validiert kein JSON-Webtoken (JWT). Auch wenn ein anderer Dienst vor DAB den Aufrufer authentifiziert, wertet DAB weiterhin Berechtigungen nur als anonymousaus.

Why?

Wenn Sie möchten, dass DAB nur anonymous bleibt, müssen Sie keinen JWT-Anbieter konfigurieren, um zu beginnen. Beim Ausführen dab init wird eine Arbeitskonfiguration ohne zusätzliche Authentifizierungsoptionen erzeugt.

Befehlszeile

dab init --database-type mssql --connection-string "Server=localhost;Database=mydb;"

Resultierende Konfiguration

{
	"runtime": {
		"host": {
			"authentication": {
				"provider": "Unauthenticated"
			}
		}
	}
}

Von Bedeutung

Wenn Unauthenticated aktiv ist, werden authenticated und benutzerdefinierte Rollen, die in Entitätsberechtigungen definiert sind, nie aktiviert. Wenn Ihre Konfiguration diese Rollen enthält, gibt DAB beim Start eine Warnung aus.

Lesen der Dokumente

Einführung: Rollenvererbung

DAB 2.0 fügt die Rollenvererbung hinzu, sodass Sie denselben Berechtigungsblock nicht für jede Rolle wiederholen müssen. Die Vererbungskette lautet:

	named-role → authenticated → anonymous

Wenn authenticated nicht explizit für eine Entität konfiguriert ist, wird es von anonymous geerbt. Wenn eine benannte Rolle nicht konfiguriert ist, erbt sie von authenticated oder von anonymous, wenn authenticated auch nicht vorhanden ist.

Why?

Mit der Rollenvererbung können Sie Berechtigungen einmal auf anonymous definieren, und alle übergeordneten Rollen erhalten automatisch denselben Zugriff, keine Duplizierung nötig.

{
	"entities": {
		"Book": {
			"source": "dbo.books",
			"permissions": [
				{ "role": "anonymous", "actions": [ "read" ] }
			]
		}
	}
}

Mit dieser Konfiguration können anonymous, authenticated und alle nicht konfigurierten benannten Rollen Book lesen.

Effektive Berechtigungen anzeigen mit der CLI

Aufgrund der Rollenvererbung zeigt eine neue Option --show-effective-permissions auf dab configure die aufgelösten Berechtigungen für jede Entität an. Wenn Sie nicht sicher sind, was eine Rolle tun kann, nachdem Vererbungsregeln wirksam werden, führen Sie diesen Befehl aus, um die Antwort zu erhalten, anstatt die Konfiguration manuell durchzuschlagen.

Befehlszeile

dab configure --show-effective-permissions
dab configure --show-effective-permissions --config my-config.json

Resultierende Ausgabe

Entity: Book
	Role: anonymous        | Actions: Read
	Role: authenticated    | Actions: Read (inherited from: anonymous)
	Unconfigured roles inherit from: anonymous

Entity: Order
	Role: admin            | Actions: Create, Read, Update, Delete
	Role: anonymous        | Actions: Read
	Role: authenticated    | Actions: Read (inherited from: anonymous)
	Unconfigured roles inherit from: authenticated

Lesen der Dokumente

Einführung: erweiterte REST-Pfade

Entitäts-REST-Pfade können jetzt Schrägstriche enthalten, sodass URL-Segmente im Unterverzeichnisstil zugelassen werden.

Why?

Jetzt können Sie verwandte Entitäten unter einem Präfix für gemeinsame Pfade gruppieren, sodass Ihre REST-API ohne Routerkonfiguration natürlicher organisiert wird. Dieser Ansatz kann für Szenarien mit mehreren Mandanten hilfreich sein, in denen ein Mandanten-ID-Segment Endpunkte mit demselben Namen segmentieren kann, wie /api/shopping-cart/item und /api/invoice/items, die zuvor eindeutige Entitätsnamen benötigten.

Befehlszeile

dab add ShoppingCartItem \
  --source dbo.ShoppingCartItem \
  --rest.path "shopping-cart/item"

dab add InvoiceItem \
  --source dbo.InvoiceItem \
  --rest.path "invoice/item"

Resultierende Konfiguration

{
	"entities": {
		"ShoppingCartItem": {
			"source": "dbo.ShoppingCartItem",
			"rest": { "path": "shopping-cart/item" }
		},
		"InvoiceItem": {
			"source": "dbo.InvoiceItem",
			"rest": { "path": "invoice/item" }
		}
	}
}

Resultierende Pfade

https://{server-name}/api/shopping-cart/item
https://{server-name}/api/invoice/item

Lesen der Dokumente

Einführung: Berechtigungsbewusste OpenAPI

Im OpenAPI-Dokument werden jetzt nur die HTTP-Methoden und Felder angezeigt, auf die basierend auf Berechtigungen zugegriffen werden kann. Mit einem neuen rollenspezifischen Pfad /openapi/{role} können Sie genau sehen, was eine bestimmte Rolle tun kann.

Why?

Mit berechtigungsfähigen OpenAPI ist Ihr Dokument ein zuverlässiger Vertrag. Clients und API-Verbraucher sehen nur, was sie aufrufen dürfen, nicht die vollständige interne Oberfläche.

Verfügbare Pfade

/openapi
/openapi/anonymous
/openapi/authenticated
/openapi/{custom-role}

Von Bedeutung

/openapi/{role} ist nur im Entwicklungsmodus verfügbar, um die Rollenaufzählung in der Produktion zu verhindern.

Lesen der Dokumente

Standardmäßige OpenTelemetry-Einstellungen in dab init

Neue Konfigurationen, die jetzt von dab init generiert werden, enthalten einen standardmäßigen OpenTelemetry-Abschnitt, der mit Standard-Umgebungsvariablen von OpenTelemetry (OTEL) vorkonfiguriert ist.

Why?

Wenn Sie NUN DAB in einem Container oder einer Aspire-App bereitstellen, ist die Observability-Sanitärinstallation bereits vorhanden. Sie legen einfach die Umgebungsvariablen fest – es sind keine manuellen Konfigurationsbearbeitungen erforderlich.

{
	"telemetry": {
		"open-telemetry": {
			"enabled": true,
			"endpoint": "@env('OTEL_EXPORTER_OTLP_ENDPOINT')",
			"headers": "@env('OTEL_EXPORTER_OTLP_HEADERS')",
			"service-name": "@env('OTEL_SERVICE_NAME')"
		}
	}
}

Wenn die Umgebungsvariablen nicht festgelegt sind, startet DAB normal und überspringt das OpenTelemetry-Protokoll (OTLP)-Exportersetup. Nicht aufgelöste @env(...) Werte werden beim Start toleriert.

Lesen der Dokumente

Einführung: HTTP-Antwortkomprimierung

DAB 2.0 fügt HTTP-Antwortkomprimierung für REST- und GraphQL-Antworten hinzu. Jetzt können Sie die Nutzlastgrößen über den Draht mit einer einzigen Konfigurationseinstellung reduzieren, was besonders für große Resultsets oder Umgebungen mit geringer Bandbreite nützlich ist.

Unterstützte Ebenen: optimal, fastest, none.

Befehlszeile

dab configure --runtime.compression.level "optimal"

Resultierende Konfiguration

{
	"runtime": {
		"compression": {
			"level": "optimal"
		}
	}
}

Lesen der Dokumente

Schlüssellos PUT und PATCH für automatisch generierte Schlüssel

DAB 2.0 ermöglicht PUT und PATCH anforderungen ohne Schlüssel in der URL, wenn die Datenbank automatisch alle ausgelassenen Schlüsselspalten generiert. Mit Upserts ohne Schlüssel können Sie eine neue Zeile mit einem vom Server generierten Schlüssel einfügen, indem Sie dieselbe Upsert-Semantik verwenden, die Ihnen bereits vertraut ist, ohne den Schlüssel selbst zu generieren oder anzugeben.

Lesen der Dokumente

OpenTelemetry-Ablaufverfolgung für MCP-Ausführung

Die MCP-Toolausführung ist jetzt zusammen mit REST- und GraphQL-Datenverkehr in OpenTelemetry-Ablaufverfolgungen enthalten. Jetzt können Sie KI-Agent-Tools auf die gleiche Weise überwachen und korrelieren, wie Sie API-Anforderungen überwachen – mit denselben Dashboards, den gleichen Ablaufverfolgungs-IDs und demselben Tool. Dies funktioniert automatisch, wenn OpenTelemetry konfiguriert ist. Da dab init jetzt einen standardmäßigen Telemetrieabschnitt generiert, verfügen neue Apps über eine standardmäßige Überwachbarkeit für alle drei Arten von Endpunkten.

Lesen der Dokumente