Runtime

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 path properti .
  • Gunakan depth-limit untuk membatasi kueri berlapis.
  • Atur allow-introspection ke false untuk menyembunyikan skema GraphQL.
  • Gunakan multiple-mutations untuk 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 enabled adalah false, tingkat enabled entitas individu tidak masalah.
  • Properti path tidak mendukung nilai subpath seperti /api/data.
  • request-body-strict diperkenalkan 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 selama INSERT nilainya dalam payload adalah null. Sebagai konsekuensinya, INSERT operasi ke dalam default() kolom, kapan request-body-strict adalah true, tidak dapat menghasilkan nilai eksplisit null . Untuk mencapai perilaku ini, UPDATE diperlukan operasi.
  • Kolom dengan default() tidak diabaikan selama UPDATE terlepas 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).

Diagram dukungan token web JSON di penyusun API Data.

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.

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