Поделиться через


Runtime

Параметры конфигурации, определяющие поведение среды выполнения.

Параметры разбиения на страницы

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

Пример: 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) ❌ Нет None

Выбирает метод проверки подлинности. Каждый поставщик проверяет удостоверение по-разному. Пошаговые инструкции по настройке см. в руководстве, связанном ниже.

Сводка поставщика

Provider Сценарий использования Источник удостоверений Практическое руководство
(опущено) Доступ только для анонимного доступа None
AppService Размещенные в Azure приложения (EasyAuth) Заголовок X-MS-CLIENT-PRINCIPAL Настройка проверки подлинности службы приложений
EntraID Идентификатор Microsoft Entra (Azure AD) Токен носителя JWT Настройка проверки подлинности идентификатора записи
Custom Сторонние поставщики удостоверений (Okta, Auth0) Токен носителя JWT Настройка пользовательской проверки подлинности JWT
Simulator Только локальное тестирование Симулированный Настройка проверки подлинности симулятора

Note

Поставщик EntraId был ранее назван AzureAd. Старое имя по-прежнему работает для совместимости.

Только анонимный (без поставщика)

authentication Если раздел опущен, DAB работает в анонимном режиме. Все запросы назначаются системной Anonymous роли.

{
  "host": {
    // authentication section omitted
  }
}

AppService

Доверяет заголовкам удостоверений, внедренным службой приложений Azure EasyAuth.

{
  "host": {
    "authentication": {
      "provider": "AppService"
    }
  }
}

EntraID

Проверяет токены JWT, выданные идентификатором Microsoft Entra.

{
  "host": {
    "authentication": {
      "provider": "EntraId",
      "jwt": {
        "audience": "<application-id>",
        "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
      }
    }
  }
}

Custom

Проверяет маркеры JWT от сторонних поставщиков удостоверений.

{
  "host": {
    "authentication": {
      "provider": "Custom",
      "jwt": {
        "audience": "<api-audience>",
        "issuer": "https://<your-idp-domain>/"
      }
    }
  }
}

Симулятор

Имитирует проверку подлинности для локальной разработки и тестирования.

{
  "host": {
    "authentication": {
      "provider": "Simulator"
    }
  }
}

Important

Поставщик Simulator работает только в том developmentслучаеruntime.host.mode. DAB не запускается, если симулятор настроен в рабочем режиме.

Выбор роли

Для всех поставщиков, кроме симулятора, X-MS-API-ROLE заголовок выбирает роль, используемую из утверждений пользователя, прошедших проверку подлинности. Если опущено, запрос использует системную Authenticated роль. Дополнительные сведения об оценке ролей см. в разделе "Авторизация" и "Роли".

JWT (среда выполнения узла проверки подлинности)

Parent Property Type Required Default
runtime.host.authentication jwt object ❌ Нет -

Конфигурация глобального веб-маркера JSON (JWT).

поддержка веб-маркеров JSON в построителе API данных.

Вложенные свойства

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