Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengaturan konfigurasi yang menentukan perilaku runtime.
Pengaturan pagination
| Property | Default | Description |
|---|---|---|
| ukuran halaman runtime.pagination.max | Menentukan rekaman maksimum per halaman | |
| runtime.pagination.default-page-size | Mengatur rekaman default per respons |
Pengaturan REST
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Jalur dasar untuk titik akhir REST |
| runtime.rest.enabled | true |
Memungkinkan mengaktifkan atau menonaktifkan permintaan REST untuk semua entitas |
| runtime.rest.request-body-strict | true |
Melarang bidang asing dalam isi permintaan ketika benar |
Pengaturan GraphQL
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Memungkinkan kueri skema GraphQL yang mendasar |
| runtime.graphql.path | "/graphql" |
Jalur dasar untuk titik akhir GraphQL |
| runtime.graphql.enabled | true |
Memungkinkan mengaktifkan atau menonaktifkan permintaan GraphQL untuk semua entitas |
| runtime.graphql.depth-limit | null |
Kedalaman maksimum kueri GraphQL yang diizinkan |
| runtime.graphql.multiple-mutations.create.enabled | false |
Memungkinkan mutasi beberapa buat untuk semua entitas |
Pengaturan host
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Ukuran maksimum (MB) respons database yang diizinkan dalam satu hasil |
| runtime.host.mode | "production" |
Mode berjalan; "production" atau "development" |
Pengaturan CORS
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Asal CORS yang diizinkan |
| runtime.host.cors.allow-credentials | false |
Mengatur nilai untuk header Access-Control-Allow-Credentials |
Pengaturan autentikasi
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | Unauthenticated |
Penyedia autentikasi |
| runtime.host.authentication.jwt.audience | null |
Audiens JWT |
| runtime.host.authentication.jwt.issuer | null |
Penerbit JWT |
Pengaturan cache
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Memungkinkan penembolokan respons secara global |
| runtime.cache.ttl-seconds | 5 |
Waktu hidup (detik) untuk cache global |
| runtime.cache.level-2.enabled | false |
Mengaktifkan cache tingkat 2 terdistribusi secara global |
| runtime.cache.level-2.provider | "redis" |
Penyedia cache terdistribusi untuk cache tingkat 2 |
| runtime.cache.level-2.connection-string | null |
String koneksi untuk penyedia cache tingkat 2 |
| runtime.cache.level-2.partition | null |
Nama partisi opsional untuk mengisolasi ruang cache terdistribusi |
Pengaturan kompresi
| Property | Default | Description |
|---|---|---|
| runtime.compression.level | optimal |
Tingkat kompresi respons HTTP (optimal, , fastestatau none) |
Pengaturan telemetri
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
String koneksi Application Insights |
| runtime.telemetry.application-insights.enabled | true |
Mengaktifkan atau menonaktifkan telemetri Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
URL pengumpul OpenTelemetry |
| runtime.telemetry.open-telemetry.headers | {} |
Header ekspor OpenTelemetry |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Nama layanan OpenTelemetry |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
Protokol OpenTelemetry ("grpc" atau "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Mengaktifkan atau menonaktifkan OpenTelemetry |
| runtime.telemetry.open-telemetry.enabled | true |
Mengaktifkan atau menonaktifkan OpenTelemetry |
| runtime.telemetry.azure-log-analytics.enabled | false |
Mengaktifkan atau menonaktifkan Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.dab-identifier | "DabLogs" |
Pengidentifikasi untuk DAB di Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.flush-interval-seconds | 5 |
Interval antara dorongan batch log (detik) |
| runtime.telemetry.azure-log-analytics.auth.custom-table-name | null |
Nama tabel kustom untuk Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id | null |
ID yang tidak dapat diubah aturan pengumpulan data |
| runtime.telemetry.azure-log-analytics.auth.dce-endpoint | null |
URL titik akhir pengumpulan data |
| runtime.telemetry.file.enabled | false |
Mengaktifkan atau menonaktifkan pengelogan sink file |
| runtime.telemetry.file.path | "/logs/dab-log.txt" |
Jalur file untuk log telemetri |
| runtime.telemetry.file.rolling-interval | "Day" |
Interval bergulir untuk file log |
| runtime.telemetry.file.retained-file-count-limit | 1 |
Jumlah maksimum file log yang dipertahankan |
| runtime.telemetry.file.file-size-limit-byte | 1048576 |
Ukuran file maksimum dalam byte sebelum bergulir |
| runtime.telemetry.log-level.namespace | null |
Penimpaan tingkat log khusus namespace layanan |
| runtime.health.enabled | true |
Mengaktifkan atau menonaktifkan titik akhir pemeriksaan kesehatan secara global |
| runtime.health.roles | null |
Peran yang diizinkan untuk titik akhir kesehatan yang komprehensif |
| runtime.health.cache-ttl-seconds | 5 |
Waktu hidup (detik) untuk entri cache laporan pemeriksaan kesehatan |
| runtime.health.max-query-parallelism | 4 |
Kueri pemeriksaan kesehatan bersamaan maksimum (rentang: 1-8) |
Pengaturan MCP
| Property | Default | Description |
|---|---|---|
| runtime.mcp.enabled | true |
Mengaktifkan atau menonaktifkan titik akhir MCP secara global |
| runtime.mcp.path | "/mcp" |
Jalur dasar untuk titik akhir MCP |
| runtime.mcp.description | null |
Deskripsi server yang dikirim ke klien MCP selama inisialisasi |
| runtime.mcp.dml-tools | true |
Mengaktifkan atau menonaktifkan semua alat DML, atau objek untuk kontrol per alat |
| runtime.mcp.dml-tools.describe-entities | true |
Mengaktifkan alat describe_entities |
| runtime.mcp.dml-tools.create-record | true |
Mengaktifkan alat create_record |
| runtime.mcp.dml-tools.read-records | true |
Mengaktifkan alat read_records |
| runtime.mcp.dml-tools.update-record | true |
Mengaktifkan alat update_record |
| runtime.mcp.dml-tools.delete-record | true |
Mengaktifkan alat delete_record |
| runtime.mcp.dml-tools.execute-entity | true |
Mengaktifkan alat execute_entity |
| runtime.mcp.dml-tools.aggregate-records | true |
Mengaktifkan alat aggregate_records (boolean atau objek dengan batas waktu kueri) |
Gambaran umum format
{
"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`)
}
}
}
}
}
Mode (Runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
host |
enum (production | development) |
❌ Tidak | production |
Perilaku pengembangan
- Diaktifkan Nitro (sebelumnya Banana Cake Pop) untuk pengujian GraphQL
- Mengaktifkan UI Swagger untuk pengujian REST
- Mengaktifkan pemeriksaan kesehatan anonim
- Peningkatan verbositas pengelogan (Debug)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Ukuran respons maksimum (Runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
integer | ❌ Tidak | 158 |
Mengatur ukuran maksimum (dalam megabyte) untuk hasil tertentu. Karena respons besar dapat membatasi sistem, max-response-size-mb membatasi ukuran total (berbeda dari jumlah baris) untuk mencegah kelebihan beban, yang terutama dengan kolom besar seperti teks atau JSON.
| Value | Result |
|---|---|
| belum diatur | Gunakan default |
null |
Gunakan default |
integer |
Bilangan bulat 32-bit positif |
<= 0 |
Tidak didukung |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
objek | ❌ Tidak | - |
Konfigurasi Global GraphQL.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ Tidak | None |
runtime.graphql |
path |
string | ❌ Tidak | "/graphql" |
runtime.graphql |
depth-limit |
integer | ❌ Tidak | Tidak ada (tidak terbatas) |
runtime.graphql |
allow-introspection |
boolean | ❌ Tidak | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ Tidak | False |
Catatan properti
- Subpath tidak diizinkan untuk
pathproperti . - Gunakan
depth-limituntuk membatasi kueri berlapis. - Atur
allow-introspectionkefalseuntuk menyembunyikan skema GraphQL. - Gunakan
multiple-mutationsuntuk menyisipkan beberapa entitas dalam satu mutasi.
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)
}
}
}
}
}
Contoh: beberapa mutasi
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
Mutasi GraphQL
mutation {
createUsers(input: [
{ name: "Alice", age: 30, isAdmin: true },
{ name: "Bob", age: 25, isAdmin: false },
{ name: "Charlie", age: 35, isAdmin: true }
]) {
id
name
age
isAdmin
}
}
REST (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
rest |
objek | ❌ Tidak | - |
Konfigurasi REST global.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ Tidak | None |
runtime.rest |
path |
string | ❌ Tidak | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ Tidak | True |
Catatan properti
- Jika global
enabledadalahfalse, tingkatenabledentitas individu tidak masalah. - Properti
pathtidak mendukung nilai subpath seperti/api/data. -
request-body-strictdiperkenalkan untuk membantu menyederhanakan objek POCO .NET.
request-body-strict |
Behavior |
|---|---|
true |
Bidang tambahan dalam isi permintaan menyebabkan BadRequest pengecualian. |
false |
Bidang tambahan dalam isi permintaan diabaikan. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Contoh: request-body-strict
- Kolom dengan
default()nilai diabaikan hanya selamaINSERTnilainya dalam payload adalahnull. Sebagai konsekuensinya,INSERToperasi ke dalamdefault()kolom, kapanrequest-body-strictadalahtrue, tidak dapat menghasilkan nilai eksplisitnull. Untuk mencapai perilaku ini,UPDATEdiperlukan operasi. - Kolom dengan
default()tidak diabaikan selamaUPDATEterlepas dari nilai payload. - Kolom komputasi selalu diabaikan.
- Kolom yang dibuat secara otomatis selalu diabaikan.
Tabel contoh
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
);
Permintaan muatan
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Sisipkan perilaku saat 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.
Isi Muatan Respons
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Memperbarui perilaku saat request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Isi Muatan Respons
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (runtime host)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
objek | ❌ Tidak | - |
Konfigurasi CORS global.
Tip
CORS adalah singkatan dari "Berbagi Sumber Daya Lintas Asal." Ini adalah fitur keamanan browser yang mengontrol apakah halaman web dapat membuat permintaan ke domain yang berbeda dari yang melayaninya.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ Tidak | False |
runtime.host.cors |
origins |
larik string | ❌ Tidak | None |
Note
Properti allow-credentials mengatur Access-Control-Allow-Credentials header CORS.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> | <false> (default),
"origins": ["<array-of-strings>"]
}
}
}
}
Note
Kartubebas * valid sebagai nilai untuk origins.
Penyedia (Runtime host autentikasi)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
enum (UnauthenticatedSimulator | Custom | | | EntraId | StaticWebAppsAppService) |
❌ Tidak | Unauthenticated |
Memilih metode autentikasi. Setiap penyedia memvalidasi identitas secara berbeda. Untuk penyiapan langkah demi langkah, lihat panduan cara penggunaan dalam tabel berikut ini.
Note
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Ringkasan penyedia
| Provider | Skenario penggunaan | Sumber identitas | Panduan |
|---|---|---|---|
Unauthenticated |
DAB berada di belakang ujung depan tepercaya (default) | Tidak ada—semua permintaan berjalan sebagai anonymous |
Mengonfigurasi penyedia Tidak Diaturentikasi |
AppService |
Aplikasi yang dihosting Azure (EasyAuth) |
X-MS-CLIENT-PRINCIPAL Header |
Mengonfigurasi autentikasi App Service |
EntraID |
Microsoft Entra ID (Azure AD) | Token pembawa JWT | Mengonfigurasi autentikasi ID Entra |
Custom |
IdP pihak ketiga (Okta, Auth0) | Token pembawa JWT | Mengonfigurasi autentikasi JWT kustom |
Simulator |
Pengujian lokal saja | Disimulasikan | Mengonfigurasi autentikasi Simulator |
Note
Penyedia EntraId sebelumnya bernama AzureAd. Nama lama masih berfungsi untuk kompatibilitas.
Tidak diaauthenticated (default)
Ketika Unauthenticated diatur (atau tidak ada penyedia yang ditentukan), DAB tidak memeriksa atau memvalidasi JWT apa pun. Semua permintaan berjalan sebagai anonymous peran. Layanan front-end seperti Azure API Management atau gateway aplikasi masih dapat menangani kebijakan autentikasi atau akses sebelum permintaan mencapai DAB, tetapi DAB terus mengotorisasi hanya sebagai anonymous.
Important
Saat Unauthenticated aktif, authenticated dan peran kustom yang ditentukan dalam izin entitas tidak pernah diaktifkan. Jika konfigurasi Anda berisi peran tersebut, DAB akan memancarkan peringatan saat startup.
{
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
AppService
Mempercayai header identitas yang disuntikkan oleh Azure App Service EasyAuth.
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
EntraID
Memvalidasi token JWT yang dikeluarkan oleh MICROSOFT Entra ID.
{
"host": {
"authentication": {
"provider": "EntraId",
"jwt": {
"audience": "<application-id>",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
}
}
}
}
Custom
Memvalidasi token JWT dari penyedia identitas pihak ketiga.
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<api-audience>",
"issuer": "https://<your-idp-domain>/"
}
}
}
}
Simulator
Mensimulasikan autentikasi untuk pengembangan dan pengujian lokal.
{
"host": {
"authentication": {
"provider": "Simulator"
}
}
}
Important
Penyedia Simulator hanya berfungsi ketika runtime.host.mode adalah development. DAB gagal dimulai jika Simulator dikonfigurasi dalam mode produksi.
Pemilihan peran
Untuk semua penyedia kecuali Simulator, X-MS-API-ROLE header memilih peran mana yang akan digunakan dari klaim pengguna yang diautentikasi. Jika dihilangkan, permintaan menggunakan Authenticated peran sistem. Untuk detail tentang evaluasi peran, lihat Gambaran umum otorisasi.
JWT (Runtime host autentikasi)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
objek | ❌ Tidak | - |
Konfigurasi Global JSON Web Token (JWT).
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ✔️ Ya* | None |
runtime.host.authentication.jwt |
issuer |
string | ✔️ Ya* | None |
* Keduanya audience dan issuer diperlukan ketika jwt objek ada. Objek jwt itu sendiri diperlukan ketika penyedia adalah EntraID, , AzureADatau Custom.
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Penomoran halaman (Runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
objek | ❌ Tidak | - |
Batas penomoran halaman global untuk titik akhir REST dan GraphQL.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ Tidak | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ Tidak | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ Tidak | false |
Nilai yang didukung ukuran halaman maks
| Value | Result |
|---|---|
integer |
Bilangan bulat 32-bit positif didukung. |
0 |
Tidak didukung. |
-1 |
Default ke nilai maksimum yang didukung. |
< -1 |
Tidak didukung. |
Nilai yang didukung ukuran halaman default
| Value | Result |
|---|---|
integer |
Bilangan bulat positif apa pun yang kurang dari max-page-sizesaat ini. |
0 |
Tidak didukung. |
-1 |
Default ke pengaturan max-page-size saat ini. |
< -1 |
Tidak didukung. |
Perilaku relatif tautan berikutnya
Ketika next-link-relative adalah true, nilai penomoran nextLink halaman menggunakan URL relatif alih-alih URL absolut.
| Value | Example |
|---|---|
false (standar) |
"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
Ketika nilai lebih besar dari max-page-size, hasilnya dibatasi pada max-page-size.
Contoh: Halaman di REST
Request
GET https://localhost:5001/api/users
Isi Muatan Respons
{
"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=="
}
Minta Halaman Berikutnya
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Contoh: Penomoran halaman di GraphQL
Payload permintaan (Kueri)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Isi Muatan Respons
{
"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=="
}
}
}
Minta Halaman Berikutnya
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Contoh: Mengakses max-page-size dalam Permintaan
max-page-size Gunakan nilai menurut pengaturan $limit (REST) atau first (GraphQL) ke -1.
REST
GET https://localhost:5001/api/users?$limit=-1
GraphQL
query {
users(first: -1) {
items {
...
}
}
}
Pemadatan (runtime)
Note
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
compression |
objek | ❌ Tidak | - |
Konfigurasi kompresi respons HTTP. Saat diaktifkan, DAB memadatkan badan respons untuk mengurangi ukuran payload dan meningkatkan kecepatan transfer.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.compression |
level |
string | ❌ Tidak | "optimal" |
Nilai yang didukung untuk level
| Value | Description | Penghematan kompresi | Dampak performa |
|---|---|---|---|
optimal |
Rasio dan kecepatan keseimbangan (default) | Gzip: 90.5% / Brotli: 92.2% | Penggunaan CPU sedang, sedikit latensi meningkat |
fastest |
Memprioritaskan kecepatan di atas rasio | Gzip: 89.8% / Brotli: 91.1% | Penggunaan CPU rendah, latensi minimal |
none |
Tidak ada pemadatan | 0% (garis besar: 12.673 byte) | None |
Header HTTP klien
Pemadatan dipanggil oleh header klien Accept-Encoding . Algoritma yang didukung adalah Gzip dan Brotli. Pengaturan mengonfigurasi level strategi kompresi ketika klien dan server mendukung beberapa algoritma.
Header yang didukung
| HTTP Header | Algoritma Yang Digunakan |
|---|---|
Accept-Encoding: gzip |
Gzip |
Accept-Encoding: br |
Brotli |
Format
{
"runtime": {
"compression": {
"level": <"optimal"> (default) | <"fastest"> | <"none">
}
}
}
Example
{
"runtime": {
"compression": {
"level": "optimal"
}
}
}
Cache (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
cache |
objek | ❌ Tidak | - |
Konfigurasi Cache Global.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ Tidak | False |
runtime.cache |
ttl-seconds |
integer | ❌ Tidak | 5 |
runtime.cache |
level-2 |
objek | ❌ Tidak | - |
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache.level-2 |
enabled |
boolean | ❌ Tidak | False |
runtime.cache.level-2 |
provider |
string | ❌ Tidak | redis |
runtime.cache.level-2 |
connection-string |
string | ❌ Tidak | None |
runtime.cache.level-2 |
partition |
string | ❌ Tidak | None |
Tip
Properti tingkat cache.ttl-seconds entitas default ke nilai global ini.
Tip
Untuk pengaturan end-to-end, perilaku tingkat cache, dan contoh Redis, lihat Menerapkan cache tingkat 2.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level-2": {
"enabled": <boolean>,
"provider": "redis",
"connection-string": <string>,
"partition": <string>
}
}
}
}
Important
Jika global enabled adalah false, tingkat enabled entitas individu tidak masalah.
Ketika level-2.enabled adalah true, DAB menggunakan penyedia cache terdistribusi yang dikonfigurasi selain cache dalam memori lokal. Entitas yang dikonfigurasi dengan tingkat L1L2 cache memeriksa cache lokal terlebih dahulu, lalu cache terdistribusi, sebelum masuk ke database.
Telemetri (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
objek | ❌ Tidak | - |
Konfigurasi telemetri global.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dictionary | ❌ Tidak | None |
runtime.telemetry |
application-insights |
objek | ❌ Tidak | - |
runtime.telemetry |
open-telemetry |
objek | ❌ Tidak | - |
runtime.telemetry |
azure-log-analytics |
objek | ❌ Tidak | - |
runtime.telemetry |
file |
objek | ❌ Tidak | - |
Mengonfigurasi verbositas pengelogan per namespace. Konfigurasi ini mengikuti konvensi pengelogan .NET standar dan memungkinkan kontrol terperinci, meskipun mengasumsikan beberapa keakraban dengan internal pembuat API Data. Penyusun API Data adalah sumber terbuka: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level dapat dimuat ulang dalam pengembangan dan produksi. Saat ini adalah satu-satunya properti yang mendukung hot reload dalam produksi.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (telemetri)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
objek | ❌ Tidak | - |
Mengonfigurasi pengelogan ke Application Insights.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ Tidak | true |
runtime.telemetry.application-insights |
connection-string |
string | ✔️ Ya | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (telemetri)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
objek | ❌ Tidak | - |
Mengonfigurasi pengelogan ke Open Telemetry.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ Tidak | true |
runtime.telemetry.open-telemetry |
endpoint |
string | ✔️ Ya | None |
runtime.telemetry.open-telemetry |
headers |
string | ❌ Tidak | None |
runtime.telemetry.open-telemetry |
service-name |
string | ❌ Tidak | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
enum (grpc | httpprotobuf) |
❌ Tidak | grpc |
Beberapa header dipisahkan , (koma).
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",
}
}
}
}
Pelajari selengkapnya tentang OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) lebih cepat dan mendukung streaming tetapi memerlukan lebih banyak langkah penyiapan. HTTP/protobuf (4318) lebih sederhana dan lebih mudah di-debug tetapi kurang efisien.
Azure Log Analytics (telemetri)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
azure-log-analytics |
objek | ❌ Tidak | - |
Mengonfigurasi pengelogan ke Azure Log Analytics melalui titik akhir pengumpulan data. Saat diaktifkan, DAB mengirim data telemetri dalam batch pada interval yang dapat dikonfigurasi.
Note
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics |
enabled |
boolean | ❌ Tidak | false |
runtime.telemetry.azure-log-analytics |
dab-identifier |
string | ❌ Tidak | "DabLogs" |
runtime.telemetry.azure-log-analytics |
flush-interval-seconds |
integer | ❌ Tidak | 5 |
runtime.telemetry.azure-log-analytics |
auth |
objek | ✔️ Ya* | - |
*
auth diperlukan ketika enabled adalah true.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics.auth |
custom-table-name |
string | ✔️ Ya* | null |
runtime.telemetry.azure-log-analytics.auth |
dcr-immutable-id |
string | ✔️ Ya* | null |
runtime.telemetry.azure-log-analytics.auth |
dce-endpoint |
string | ✔️ Ya* | null |
* Diperlukan ketika enabled adalah true.
-
dab-identifier—label yang diteruskan ke Log Analytics untuk membantu membedakan log mana yang berasal dari penyusun API Data. -
flush-interval-seconds—interval waktu (dalam detik) antara mengirim batch data telemetri. -
custom-table-name—nama tabel kustom di Azure Log Analytics tempat data disimpan. -
dcr-immutable-id—ID yang tidak dapat diubah dari aturan pengumpulan data yang menentukan bagaimana data dikumpulkan. -
dce-endpoint—URL titik akhir pengumpulan data yang digunakan untuk mengirim data telemetri.
Format
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": <true> | <false> (default),
"dab-identifier": <string> (default: "DabLogs"),
"flush-interval-seconds": <integer> (default: 5),
"auth": {
"custom-table-name": "<string>",
"dcr-immutable-id": "<string>",
"dce-endpoint": "<string>"
}
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"azure-log-analytics": {
"enabled": true,
"dab-identifier": "MyDabInstance",
"flush-interval-seconds": 10,
"auth": {
"custom-table-name": "DabTelemetry_CL",
"dcr-immutable-id": "dcr-abc123def456",
"dce-endpoint": "https://my-dce.eastus-1.ingest.monitor.azure.com"
}
}
}
}
}
File (telemetri)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
file |
objek | ❌ Tidak | - |
Mengonfigurasi penulisan log telemetri ke file lokal. Saat diaktifkan, DAB menulis output log terstruktur ke jalur file yang ditentukan dengan interval bergulir dan batas ukuran yang dapat dikonfigurasi.
Note
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.file |
enabled |
boolean | ❌ Tidak | false |
runtime.telemetry.file |
path |
string | ✔️ Ya* | "/logs/dab-log.txt" |
runtime.telemetry.file |
rolling-interval |
enum | ❌ Tidak | "Day" |
runtime.telemetry.file |
retained-file-count-limit |
integer | ❌ Tidak | 1 |
runtime.telemetry.file |
file-size-limit-bytes |
integer | ❌ Tidak | 1048576 |
*
path diperlukan ketika enabled adalah true.
Nilai interval bergulir
| Value | Description |
|---|---|
Minute |
File log baru setiap menit |
Hour |
File log baru setiap jam |
Day |
File log baru setiap hari (default) |
Month |
File log baru setiap bulan |
Year |
File log baru setiap tahun |
Infinite |
Jangan pernah menggulung ke file baru |
Format
{
"runtime": {
"telemetry": {
"file": {
"enabled": <true> | <false> (default),
"path": <string> (default: "/logs/dab-log.txt"),
"rolling-interval": <"Day"> (default) | <"Minute"> | <"Hour"> | <"Month"> | <"Year"> | <"Infinite">,
"retained-file-count-limit": <integer> (default: 1),
"file-size-limit-bytes": <integer> (default: 1048576)
}
}
}
}
Example
{
"runtime": {
"telemetry": {
"file": {
"enabled": true,
"path": "/var/log/dab/dab-telemetry.txt",
"rolling-interval": "Hour",
"retained-file-count-limit": 24,
"file-size-limit-bytes": 5242880
}
}
}
}
MCP (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
mcp |
objek | ❌ Tidak | - |
Mengonfigurasi Server SQL Model Context Protocol (MCP), yang mengekspos entitas database sebagai alat MCP untuk agen AI.
Note
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp |
enabled |
boolean | ❌ Tidak | true |
runtime.mcp |
path |
string | ❌ Tidak | "/mcp" |
runtime.mcp |
description |
string | ❌ Tidak | null |
runtime.mcp |
dml-tools |
boolean atau objek | ❌ Tidak | true |
Properti dml-tools menerima boolean untuk mengaktifkan atau menonaktifkan semua alat, atau objek untuk mengontrol alat individual:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.mcp.dml-tools |
describe-entities |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
create-record |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
read-records |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
update-record |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
delete-record |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
execute-entity |
boolean | ❌ Tidak | true |
runtime.mcp.dml-tools |
aggregate-records |
boolean atau objek | ❌ Tidak | true |
Alat ini aggregate-records menerima boolean atau objek dengan lebih banyak pengaturan:
| Parent | Property | Type | Required | Default | Jangkauan |
|---|---|---|---|---|---|
runtime.mcp.dml-tools.aggregate-records |
enabled |
boolean | ❌ Tidak | true |
|
runtime.mcp.dml-tools.aggregate-records |
query-timeout |
integer | ❌ Tidak | 30 |
1–600 detik |
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
}
}
}
}
}
Untuk mengaktifkan atau menonaktifkan semua alat DML sekaligus, atur "dml-tools" ke true atau false.
Saat Anda menonaktifkan alat pada tingkat runtime, alat tidak pernah muncul dalam respons MCP tools/list dan tidak dapat dipanggil, terlepas dari izin tingkat entitas. Untuk informasi selengkapnya tentang alat DML individual, lihat Alat bahasa manipulasi data (DML).
Menggunakan 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
Kesehatan (runtime)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
health |
objek | ❌ Tidak | - |
Konfigurasi titik akhir pemeriksaan kesehatan global (/health).
Properti berlapis
| Parent | Property | Type | Required | Default | Rentang/Catatan |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ Tidak | true |
|
runtime.health |
roles |
larik string | ✔️ Ya* | null |
*Diperlukan dalam mode produksi |
runtime.health |
cache-ttl-seconds |
integer | ❌ Tidak | 5 |
Min: 0 |
runtime.health |
max-query-parallelism |
integer | ❌ Tidak | 4 |
Min: Satu, Maks: Delapan (dijepit) |
Perilaku dalam pengembangan vs. produksi
| Condition | Perilaku Pengembangan | Perilaku Produksi |
|---|---|---|
health.enabled = salah |
403 keadaan |
403 keadaan |
health.enabled = benar |
Tergantung pada peran | Tergantung pada peran |
roles dihilangkan atau null |
Kesehatan ditampilkan |
403 keadaan |
peran saat ini tidak ada di roles |
403 keadaan |
403 keadaan |
peran saat ini dalam roles |
Kesehatan ditampilkan | Kesehatan ditampilkan |
roles Termasuk anonymous |
Kesehatan ditampilkan | Kesehatan ditampilkan |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Jika global enabled adalah false, tingkat enabled entitas individu tidak masalah.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}