Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Параметры конфигурации, определяющие поведение среды выполнения.
Параметры разбиения на страницы
| Property | Default | Description |
|---|---|---|
| размер страницы runtime.pagination.max | Определяет максимальные записи на страницу | |
| runtime.pagination.default-page-size | Задает записи по умолчанию на ответ |
Параметры REST
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Базовый путь для конечных точек REST |
| runtime.rest.enabled | true |
Разрешает включение или отключение запросов REST для всех сущностей |
| runtime.rest.request-body-strict | true |
Запрещает лишние поля в тексте запроса, если значение true |
Параметры GraphQL
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Позволяет запрашивать базовую схему GraphQL |
| runtime.graphql.path | "/graphql" |
Базовый путь для конечной точки GraphQL |
| runtime.graphql.enabled | true |
Разрешает включение или отключение запросов GraphQL для всех сущностей |
| runtime.graphql.depth-limit | null |
Максимальная допустимая глубина запроса GraphQL |
| runtime.graphql.multiple-mutations.create.enabled | false |
Позволяет создавать несколько мутаций для всех сущностей |
Параметры узла
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Максимальный размер ответа базы данных (МБ), разрешенный в одном результате |
| runtime.host.mode | "production" |
Режим выполнения; "production" или "development" |
Параметры CORS
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Разрешенные источники CORS |
| runtime.host.cors.allow-credentials | false |
Задает значение заголовка Access-Control-Allow-Credentials |
Параметры проверки подлинности
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | null |
Поставщик проверки подлинности |
| runtime.host.authentication.jwt.audience | null |
Аудитория JWT |
| runtime.host.authentication.jwt.issuer | null |
Издатель JWT |
Параметры кэша
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Обеспечивает глобальное кэширование ответов |
| runtime.cache.ttl-seconds | 5 |
Время жизни (в секундах) для глобального кэша |
Настройки телеметрии
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Строка подключения Application Insights |
| runtime.telemetry.application-insights.enabled | false |
Включает или отключает данные телеметрии Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
URL-адрес сборщика OpenTelemetry |
| runtime.telemetry.open-telemetry.headers | {} |
Заголовки экспорта OpenTelemetry |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Имя службы OpenTelemetry |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
Протокол OpenTelemetry ("grpc" или "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Включает или отключает OpenTelemetry |
| пространство имен runtime.telemetry.log уровня.namespace | null |
Переопределение уровня журнала для конкретного пространства имен |
| runtime.health.enabled | true |
Включает или отключает конечную точку проверки работоспособности глобально |
| runtime.health.role | null |
Разрешенные роли для комплексной конечной точки работоспособности |
| runtime.health.cache-ttl-seconds | 5 |
Время жизни (секунды) для записи кэша отчетов проверки работоспособности |
| параллелизм runtime.health.max-query-parallelism | 4 |
Максимальное число одновременных запросов проверки работоспособности (диапазон: 1–8) |
Обзор формата
{
"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: "AppService"),
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
},
"cache": {
"enabled": <true>|<false> (default: `false`),
"ttl-seconds": <integer> (default: `5`)
},
"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`)
},
"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`)
}
}
Режим (среда выполнения узла)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
host |
перечисление (production | development) |
❌ Нет | production |
Поведение разработки
- Включено Nitro (ранее банановый торт pop) для тестирования GraphQL
- Включенный пользовательский интерфейс Swagger для тестирования REST
- Включена анонимная проверка работоспособности
- Повышенная детализация ведения журнала (отладка)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Максимальный размер ответа (среда выполнения узла)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
integer | ❌ Нет | 158 |
Задает максимальный размер (в мегабайтах) для любого заданного результата. Так как большие ответы могут напрягать систему, max-response-size-mb заголовок общего размера (отличается от количества строк), чтобы предотвратить перегрузку, которая особенно с большими столбцами, такими как текст или JSON.
| Value | Result |
|---|---|
| не задано | Использовать по умолчанию |
null |
Использовать по умолчанию |
integer |
Любое положительное 32-разрядное целое число |
<= 0 |
Не поддерживается |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
object | ❌ Нет | - |
Конфигурация Global GraphQL.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ Нет | None |
runtime.graphql |
path |
string | ❌ Нет | "/graphql" |
runtime.graphql |
depth-limit |
integer | ❌ Нет | Нет (без ограничений) |
runtime.graphql |
allow-introspection |
boolean | ❌ Нет | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ Нет | False |
Заметки о свойствах
- Вложенные пути не допускаются для
pathсвойства. - Используется
depth-limitдля ограничения вложенных запросов. - Установите для
allow-introspectionfalseскрытия схемы GraphQL. - Используется
multiple-mutationsдля вставки нескольких сущностей в одну мутацию.
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> (default) | <false>
}
}
}
}
Пример: несколько мутаций
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
Мутация 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 (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
rest |
object | ❌ Нет | - |
Глобальная конфигурация REST.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ Нет | None |
runtime.rest |
path |
string | ❌ Нет | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ Нет | True |
Заметки о свойствах
- Если глобальный
enabledfalse, отдельный уровеньenabledсущности не имеет значения. - Свойство
pathне поддерживает такие значения подпаток, как/api/data. -
request-body-strictбыл представлен для упрощения объектов POCO .NET.
request-body-strict |
Behavior |
|---|---|
true |
Дополнительные поля в тексте BadRequest запроса вызывают исключение. |
false |
Дополнительные поля в тексте запроса игнорируются. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Note
При развертывании построителя API данных с помощью статических веб-приложений (предварительная версия) служба Azure автоматически внедряет в URL-адрес другую подпатку /data-api . Это поведение обеспечивает совместимость с существующими функциями статического веб-приложения. Результирующая конечная точка будет /data-api/api/<entity>. Это примечание относится только к статическим веб-приложениям.
Пример: request-body-strict
- Столбцы со
default()значением игнорируются только вINSERTтом случае, если их значение в полезных данныхnullравно. В результатеINSERTоперации сdefault()столбцами, когдаrequest-body-strictони естьtrue, не могут привести к явнымnullзначениям. Для этогоUPDATEтребуется операция. - Столбцы с ней
default()не игнорируются во времяUPDATEнезависимо от значения полезных данных. - Вычисляемые столбцы всегда игнорируются.
- Автоматически созданные столбцы всегда игнорируются.
Пример таблицы
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
);
Тело запроса
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Вставка поведения при 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.
Полезная нагрузка ответа
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Обновление поведения при request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Полезная нагрузка ответа
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (среда выполнения узла)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
object | ❌ Нет | - |
Глобальная конфигурация CORS.
Tip
CORS обозначает "Общий доступ к ресурсам между источниками". Это функция безопасности браузера, которая определяет, могут ли веб-страницы запрашивать домен, отличный от обслуживаемого.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ Нет | False |
runtime.host.cors |
origins |
массив строк | ❌ Нет | None |
Note
Свойство allow-credentials задает Access-Control-Allow-Credentials заголовок CORS.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> (default) | <false>,
"origins": ["<array-of-strings>"]
}
}
}
}
Note
Подстановочный знак * действителен в качестве значения origins.
Поставщик (среда выполнения узла проверки подлинности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
перечисление (AppService | EntraId | Custom | Simulator) |
❌ Нет | AppService |
Определяет метод проверки подлинности, используемый построителем API данных.
Только анонимный (поставщик проверки подлинности)
{
"host": {
// omit the authentication section
}
}
Если весь authentication раздел опущен из файла dab-config.json, поставщик проверки подлинности не используется. В этом случае построитель API данных работает в режиме без проверки подлинности. В этом режиме DAB не ищет маркеры или Authorization заголовки. Заголовок X-MS-API-ROLE также игнорируется в этой конфигурации.
[! Примечание. Каждый запрос, поступающий в подсистему, автоматически и немедленно назначает системную роль
anonymous. Затем управление доступом обрабатывается исключительно разрешениями, заданными для каждой сущности.
Пример разрешений сущности.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
}
}
В этом примере, так как поставщик не authentication настроен, все входящие запросы автоматически считаются пользователями anonymous . Массив permissions для Book сущности явно предоставляет anonymous роль возможности выполнения read операций. Любая попытка выполнить другие действия (например create, update, ) deleteили получить доступ к другим сущностям, не настроенным для anonymous доступа, запрещена.
StaticWebApps (поставщик проверки подлинности) [не рекомендуется]
{
"host": {
"authentication": {
"provider": "StaticWebApps"
}
}
}
Этот поставщик не рекомендуется использовать, так как функция Data Connections предварительной версии статических веб-приложений была прекращена в ноябре 2025 года. Хотя он остается функциональным, он был разработан для устаревшей реализации проверки подлинности в статических веб-приложениях Azure. Разработчики должны перейти к AppService поставщику для повышения долгосрочной поддержки и согласованности с более широкой платформой Azure Easy Auth.
[! Примечание. Миграция не так проста, как изменение имени поставщика в файле конфигурации. Поставщики
StaticWebAppsожидают различные структуры JSON в заголовкеAppServiceдля обработкиx-ms-client-principalролей.
AppService (поставщик проверки подлинности)
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
Этот поставщик предназначен для приложений, размещенных в Службе приложений Azure, таких как приложения контейнеров Azure. Среда размещения Azure обрабатывает проверку подлинности, а затем передает удостоверению пользователя в приложение через заголовки запросов. Он предназначен для разработчиков, которые хотят простого, внестандартного решения проверки подлинности, управляемого платформой Azure.
Этот поставщик не использует токен JWT из заголовка Authorization . Он использует специальный заголовок, X-MS-CLIENT-PRINCIPALвнедренный платформой службы приложений. Этот заголовок содержит объект JSON в кодировке Base64 с сведениями о удостоверении пользователя.
Анонимный: если AppService поставщик настроен, но запрос поступает без заголовка X-MS-CLIENT-PRINCIPAL , запрос назначается системной роли anonymous.
Декодированные JSON из заголовка X-MS-CLIENT-PRINCIPAL обычно выглядят следующим образом:
{
"auth_typ": "aad",
"claims": [
{"typ": "roles", "val": "admin"},
{"typ": "roles", "val": "contributor"}
],
"name_typ": "...",
"role_typ": "..."
}
Роли содержатся в массиве claims .
Сведения о заголовке X-MS-API-ROLE
-
Роль и поведение. Заголовок
X-MS-API-ROLEиспользуется для указания роли, которую пользователь хочет принять для текущего запроса. Значение этого заголовка должно соответствовать одному из значений роли, найденных вclaimsмассивеX-MS-CLIENT-PRINCIPALобъекта. -
Требуется ли?: Нет.
X-MS-API-ROLEЕсли заголовок отсутствует, запрос обрабатывается в контексте системнойauthenticatedроли. Это означает, что пользователь распознается как вход, но не как определенная роль, определяемая приложением, из маркера. -
Поведение в сопоставлении: если
X-MS-API-ROLEзаголовок указан, а его значение соответствует роли в субъектеclaimsклиента, пользователь предполагает, что эта роль выполняется для запроса. -
Поведение в несоответствии. Если
X-MS-API-ROLEзаголовок указан, но значение не соответствует какой-либо роли в субъекте клиента, запрос отклоняется с403 Forbiddenкодом состояния. Это гарантирует, что пользователь не может претендовать на роль, которую они не назначили.
EntraId (поставщик проверки подлинности)
{
"host": {
"authentication": {
"provider": "EntraId", // previously AzureAd
"jwt": {
"audience": "00001111-aaaa-2222-bbbb-3333cccc4444",
"issuer": "https://login.microsoftonline.com/98765f43-21ba-400c-a5de-1f2a3d4e5f6a/v2.0"
}
}
}
}
Этот поставщик защищает конечные точки с удостоверениями пользователей и приложений в Microsoft Entra. Это идеально подходит для любой службы, где пользователям или другим службам требуется безопасный доступ в клиенте Entra.
[! ПРИМЕЧАНИЕ]
EntraIdПоставщик ранее был названAzureAd. Старое имя по-прежнему работает, но разработчикам рекомендуется перенести свои конфигурации вAzureAdEntraId.
Этот поставщик ожидает стандартный токен носителя JWT в заголовке Authorization , выданный Microsoft Entra. Маркер должен быть настроен для конкретного приложения (с помощью audience утверждения). Роли пользователя или субъекта-службы должны находиться в утверждении в маркере. Код ищет roles утверждение по умолчанию.
Анонимный: если EntraId поставщик настроен, но запрос поступает без заголовка Authorization , запрос назначается системной роли anonymous.
Декодированные полезные данные JWT могут выглядеть следующим образом:
{
"aud": "...", // Audience - your API
"iss": "https://login.microsoftonline.com/{tenant-id}/v2.0", // Issuer
"oid": "...", // User or principal object ID
"roles": [
"reader",
"writer"
],
// ... other claims
}
Сведения о заголовке X-MS-API-ROLE
-
Роль и поведение. Заголовок
X-MS-API-ROLEиспользуется для указания роли, которую пользователь хочет принять для запроса. Значение этого заголовка должно соответствовать одному из значений роли, найденных вrolesутверждении токена JWT. -
Требуется ли?: Нет.
X-MS-API-ROLEЕсли заголовок отсутствует, запрос обрабатывается в контексте системнойauthenticatedроли. Это означает, что пользователь распознается как вход, но не как определенная роль, определяемая приложением, из маркера. -
Поведение в совпадении: если
X-MS-API-ROLEзаголовок указан и соответствует роли вrolesутверждении, контекст пользователя устанавливается для этой роли. -
Поведение в несоответствии. Если
X-MS-API-ROLEзаголовок указан, но его значение не соответствует какой-либо роли вrolesутверждении, запрос отклоняется с403 Forbiddenкодом состояния. Это гарантирует, что пользователь не может претендовать на роль, которую они не назначили.
Custom (поставщик проверки подлинности)
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<client-id-or-api-audience>",
"issuer": "https://<your-domain>/oauth2/default"
}
}
}
}
Этот поставщик предназначен для разработчиков, которые хотят интегрировать построитель данных с сторонним поставщиком удостоверений (например, Auth0, Okta или настраиваемым сервером удостоверений), которые выдает JWTs. Она обеспечивает гибкость настройки ожидаемых audience и issuer маркеров.
Поставщик Custom ожидает стандартный маркер носителя JWT в заголовке Authorization . Ключевое отличие от EntraId поставщика заключается в том, что вы настраиваете допустимый issuer и audience в файле конфигурации построителя данных. Поставщик проверяет маркер, проверяя, выдан ли доверенный центр. Роли пользователя, как ожидается, будут находиться в утверждении в roles полезных данных JWT.
[! ПРИМЕЧАНИЕ. В некоторых случаях в зависимости от стороннего поставщика удостоверений разработчики должны принуждать структуру JWT к сопоставлению структуры, ожидаемой построителем API данных (показана ниже).
Анонимный: если Custom поставщик настроен, но запрос поступает без заголовка Authorization , запрос назначается системной роли anonymous.
Декодированные полезные данные JWT для custom поставщика могут выглядеть следующим образом:
{
"aud": "my-api-audience", // Must match configuration
"iss": "https://my-custom-issuer.com/", // Must match configuration
"sub": "user-id",
"roles": [
"editor",
"viewer"
],
// ... other claims
}
Сведения о заголовке X-MS-API-ROLE
-
Роль и поведение:
X-MS-API-ROLEзаголовок работает точно так же, как и с поставщикомEntraId. Он позволяет пользователю выбрать одну из назначенных ролей. Значение этого заголовка должно соответствовать одной из ролей изrolesутверждения в пользовательском токене JWT. -
Требуется ли?: Нет.
X-MS-API-ROLEЕсли заголовок отсутствует, пользователь обрабатывается как в системнойauthenticatedроли. -
Поведение при совпадении. Если
X-MS-API-ROLEзначение заголовка соответствует роли в утверждении JWTroles, контекст пользователя устанавливается для этой роли в целях авторизации. -
Поведение в несоответствии. Если
X-MS-API-ROLEзначение заголовка не соответствует какой-либо роли вrolesутверждении, запрос отклоняется с403 Forbiddenкодом состояния. Это гарантирует, что пользователь не может претендовать на роль, которую они не назначили.
Симулятор (поставщик проверки подлинности)
Этот поставщик предназначен для упрощения тестирования конфигурации разработчиками, особенно authorization политик, без необходимости настраивать полный поставщик проверки подлинности, например Entra Identity или EasyAuth. Он имитирует authenticated пользователя.
Поставщик Simulator не использует токены JWT. Проверка подлинности имитируется. При использовании этого поставщика все запросы обрабатываются так, как будто они приходят от прошедшего проверку подлинности пользователя.
Сведения о заголовке X-MS-API-ROLE
-
Роль и поведение. Заголовок
X-MS-API-ROLEявляется единственным способом указать роль при использованииSimulator. Так как нет маркера со списком ролей, система неявно доверяет роли, отправленной в этом заголовке. - Требуется ли?: Нет.
-
Поведение при отсутствии: если
X-MS-API-ROLEзаголовок отсутствует, запрос обрабатывается в контексте системнойauthenticatedроли. -
Поведение при присутствии: если заголовок
X-MS-API-ROLEприсутствует, запрос обрабатывается в контексте роли, указанной в значении заголовка. Нет проверки в списке утверждений, поэтому разработчик может имитировать любую роль, которую они должны протестировать.
Симулятор в рабочей среде
authentication.provider Если задано Simulator значение в то время, runtime.host.modeproduction то построителю данных не удастся запустить.
"host": {
"mode": "production", // or "development"
"authentication": {
"provider": "Simulator"
}
}
JWT (среда выполнения узла проверки подлинности)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
object | ❌ Нет | - |
Конфигурация глобального веб-маркера JSON (JWT).
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
string | ❌ Нет | None |
runtime.host.authentication.jwt |
issuer |
string | ❌ Нет | None |
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Разбиение на страницы (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
object | ❌ Нет | - |
Глобальные ограничения на страницы для конечных точек REST и GraphQL.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ Нет | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ Нет | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ Нет | false |
Поддерживаемые значения максимального размера страницы
| Value | Result |
|---|---|
integer |
Поддерживается любое 32-разрядное целое число. |
0 |
Не поддерживается. |
-1 |
По умолчанию используется максимальное поддерживаемое значение. |
< -1 |
Не поддерживается. |
Поддерживаемые значения размера страницы по умолчанию
| Value | Result |
|---|---|
integer |
Любое положительное целое число меньше текущего max-page-size. |
0 |
Не поддерживается. |
-1 |
По умолчанию используется текущий параметр max-page-size. |
< -1 |
Не поддерживается. |
Относительное поведение next-link
Если next-link-relative это trueтак, значения разбиения nextLink на страницы используют относительные URL-адреса вместо абсолютных URL-адресов.
| Value | Example |
|---|---|
false (по умолчанию) |
"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
Если значение больше max-page-size, результаты будут ограничены max-page-size.
Пример: разбиение по страницам в REST
Request
GET https://localhost:5001/api/users
Полезная нагрузка ответа
{
"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=="
}
Следующая страница запроса
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Пример. Разбиение по страницам в GraphQL
Полезные данные запроса (запрос)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Полезная нагрузка ответа
{
"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=="
}
}
}
Следующая страница запроса
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Пример: доступ к запросам max-page-size
Используйте значение, задав max-page-size для параметра $limit REST или first (GraphQL).-1
REST
GET https://localhost:5001/api/users?$limit=-1
GraphQL
query {
users(first: -1) {
items {
...
}
}
}
Кэш (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
cache |
object | ❌ Нет | - |
Конфигурация глобального кэша.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ Нет | False |
runtime.cache |
ttl-seconds |
integer | ❌ Нет | 5 |
Tip
Свойство уровня cache.ttl-seconds сущности по умолчанию используется для этого глобального значения.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>
}
}
}
Important
Если глобальный enabledfalse, отдельный уровень enabled сущности не имеет значения.
Телеметрия (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
object | ❌ Нет | - |
Глобальная конфигурация телеметрии.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dictionary | ❌ Нет | None |
runtime.telemetry |
application-insights |
object | ❌ Нет | - |
runtime.telemetry |
open-telemetry |
object | ❌ Нет | - |
Настраивает детализацию ведения журнала для каждого пространства имен. Это следует стандартным соглашениям по ведению журналов .NET и позволяет детализировать управление, хотя предполагается, что некоторые знания о конструкторе API данных внутренние. Построитель API данных — это открытый исходный код: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level можно перезагрузить как в разработке, так и в рабочей среде. В настоящее время это единственное свойство, которое поддерживает горячую перезагрузку в рабочей среде.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (телеметрия)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
object | ❌ Нет | - |
Настраивает ведение журнала в Application Insights.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ Нет | False |
runtime.telemetry.application-insights |
connection-string |
string | ✔️ Да | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (телеметрия)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
object | ❌ Нет | - |
Настраивает ведение журнала для Open Telemetry.
Вложенные свойства
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ Нет | true |
runtime.telemetry.open-telemetry |
endpoint |
string | ✔️ Да | None |
runtime.telemetry.open-telemetry |
headers |
string | ❌ Нет | None |
runtime.telemetry.open-telemetry |
service-name |
string | ❌ Нет | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
перечисление (grpc | httpprotobuf) |
❌ Нет | grpc |
Несколько заголовков разделены , запятыми.
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",
}
}
}
}
Дополнительные сведения о OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) быстрее и поддерживает потоковую передачу, но требует дополнительной настройки. HTTP/protobuf (4318) проще и проще отлаживать, но менее эффективно.
Работоспособность (среда выполнения)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
runtime |
health |
object | ❌ Нет | - |
Конфигурация конечной точки глобальной проверки работоспособности (/health).
Вложенные свойства
| Parent | Property | Type | Required | Default | Диапазон и заметки |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ Нет | true |
|
runtime.health |
roles |
массив строк | ✔️ Да* | null |
*Обязательный в рабочем режиме |
runtime.health |
cache-ttl-seconds |
integer | ❌ Нет | 5 |
Мин: 0 |
runtime.health |
max-query-parallelism |
integer | ❌ Нет | 4 |
Мин: 1, Макс: 8 (зажато) |
Поведение в разработке и рабочей среде
| Condition | Поведение разработки | Поведение рабочей среды |
|---|---|---|
health.enabled = ложь |
403 статус |
403 статус |
health.enabled = верно |
Зависит от роли | Зависит от роли |
roles опущен или null |
Отображается работоспособности |
403 статус |
текущая роль не в roles |
403 статус |
403 статус |
текущая роль в roles |
Отображается работоспособности | Отображается работоспособности |
roles Включает anonymous |
Отображается работоспособности | Отображается работоспособности |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Если глобальный enabledfalse, отдельный уровень enabled сущности не имеет значения.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}