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


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

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 значение заголовка соответствует роли в утверждении JWT roles , контекст пользователя устанавливается для этой роли в целях авторизации.
  • Поведение в несоответствии. Если 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).

поддержка веб-маркеров 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
  }
}