Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Configurações que determinam o comportamento do runtime.
Configurações de paginação
| Property | Default | Description |
|---|---|---|
| tamanho da página runtime.pagination.max | Define o máximo de registros por página | |
| runtime.pagination.default-page-size | Define registros padrão por resposta |
Configurações REST
| Property | Default | Description |
|---|---|---|
| runtime.rest.path | "/api" |
Caminho base para pontos de extremidade REST |
| runtime.rest.enabled | true |
Permite habilitar ou desabilitar solicitações REST para todas as entidades |
| runtime.rest.request-body-strict | true |
Não permite campos desnecessários no corpo da solicitação quando verdadeiro |
Configurações do GraphQL
| Property | Default | Description |
|---|---|---|
| runtime.graphql.allow-introspection | true |
Permite a consulta do esquema GraphQL subjacente |
| runtime.graphql.path | "/graphql" |
Caminho base para o ponto de extremidade do GraphQL |
| runtime.graphql.enabled | true |
Permite habilitar ou desabilitar solicitações do GraphQL para todas as entidades |
| runtime.graphql.depth-limit | null |
Profundidade máxima permitida de uma consulta GraphQL |
| runtime.graphql.multiple-mutações.create.enabled | false |
Permite mutações de criação múltipla para todas as entidades |
Configurações de host
| Property | Default | Description |
|---|---|---|
| runtime.host.max-response-size-mb | 158 |
Tamanho máximo (MB) da resposta do banco de dados permitida em um único resultado |
| runtime.host.mode | "production" |
Modo de execução; "production" ou "development" |
Configurações do CORS
| Property | Default | Description |
|---|---|---|
| runtime.host.cors.origins | [] |
Origens de CORS permitidas |
| runtime.host.cors.allow-credentials | false |
Define o valor do cabeçalho access-control-Allow-Credentials |
Configurações de autenticação
| Property | Default | Description |
|---|---|---|
| runtime.host.authentication.provider | Unauthenticated |
Provedor de autenticação |
| runtime.host.authentication.jwt.audience | null |
Público-alvo do JWT |
| runtime.host.authentication.jwt.issuer | null |
Emissor JWT |
Configurações de cache
| Property | Default | Description |
|---|---|---|
| runtime.cache.enabled | false |
Habilita o cache de respostas globalmente |
| runtime.cache.ttl-seconds | 5 |
Tempo de vida útil (segundos) para o cache global |
| runtime.cache.level-2.enabled | false |
Habilita o cache de nível 2 distribuído globalmente |
| runtime.cache.level-2.provider | "redis" |
Provedor de cache distribuído para cache de nível 2 |
| runtime.cache.level-2.connection-string | null |
Cadeia de conexão para o provedor de cache de nível 2 |
| runtime.cache.level-2.partition | null |
Nome da partição opcional para isolar o espaço em cache distribuído |
Configurações de compactação
| Property | Default | Description |
|---|---|---|
| runtime.compression.level | optimal |
Nível de compactação de resposta HTTP (optimalou fastestnone) |
Configurações de telemetria
| Property | Default | Description |
|---|---|---|
| runtime.telemetry.application-insights.connection-string | null |
Cadeia de conexão do Application Insights |
| runtime.telemetry.application-insights.enabled | true |
Habilita ou desabilita a telemetria do Application Insights |
| runtime.telemetry.open-telemetry.endpoint | null |
URL do coletor OpenTelemetry |
| runtime.telemetry.open-telemetry.headers | {} |
Cabeçalhos de exportação OpenTelemetry |
| runtime.telemetry.open-telemetry.service-name | "dab" |
Nome do serviço OpenTelemetry |
| runtime.telemetry.open-telemetry.exporter-protocol | "grpc" |
Protocolo OpenTelemetry ("grpc" ou "httpprotobuf") |
| runtime.telemetry.open-telemetry.enabled | true |
Habilita ou desabilita o OpenTelemetry |
| runtime.telemetry.open-telemetry.enabled | true |
Habilita ou desabilita o OpenTelemetry |
| runtime.telemetry.azure-log-analytics.enabled | false |
Habilita ou desabilita o Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.dab-identifier | "DabLogs" |
Identificador do DAB no Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.flush-interval-seconds | 5 |
Intervalo entre pushes do lote de log (segundos) |
| runtime.telemetry.azure-log-analytics.auth.custom-table-name | null |
Nome da tabela personalizada para o Azure Log Analytics |
| runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id | null |
ID imutável da regra de coleta de dados |
| runtime.telemetry.azure-log-analytics.auth.dce-endpoint | null |
URL do ponto de extremidade de coleta de dados |
| runtime.telemetry.file.enabled | false |
Habilita ou desabilita o registro em log do coletor de arquivos |
| runtime.telemetry.file.path | "/logs/dab-log.txt" |
Caminho do arquivo para logs de telemetria |
| runtime.telemetry.file.rolling-interval | "Day" |
Intervalo de rolagem para arquivos de log |
| runtime.telemetry.file.retained-file-count-limit | 1 |
Número máximo de arquivos de log retidos |
| runtime.telemetry.file.file-size-limit-bytes | 1048576 |
Tamanho máximo do arquivo em bytes antes de rolar |
| runtime.telemetry.log-level.namespace | null |
Substituição do nível de log específico do namespace |
| runtime.health.enabled | true |
Habilita ou desabilita o ponto de extremidade de verificação de integridade globalmente |
| runtime.health.roles | null |
Funções permitidas para o ponto de extremidade de integridade abrangente |
| runtime.health.cache-ttl-seconds | 5 |
Tempo de vida útil (segundos) para a entrada do cache do relatório de verificação de integridade |
| runtime.health.max-query-parallelism | 4 |
Consultas de verificação de integridade simultânea máximas (intervalo: 1 a 8) |
Configurações do MCP
| Property | Default | Description |
|---|---|---|
| runtime.mcp.enabled | true |
Habilita ou desabilita o ponto de extremidade MCP globalmente |
| runtime.mcp.path | "/mcp" |
Caminho base para o ponto de extremidade MCP |
| runtime.mcp.description | null |
Descrição do servidor enviada para clientes MCP durante a inicialização |
| runtime.mcp.dml-tools | true |
Habilita ou desabilita todas as ferramentas DML ou um objeto para controle por ferramenta |
| runtime.mcp.dml-tools.describe-entities | true |
Habilita a ferramenta describe_entities |
| runtime.mcp.dml-tools.create-record | true |
Habilita a ferramenta create_record |
| runtime.mcp.dml-tools.read-records | true |
Habilita a ferramenta read_records |
| runtime.mcp.dml-tools.update-record | true |
Habilita a ferramenta update_record |
| runtime.mcp.dml-tools.delete-record | true |
Habilita a ferramenta delete_record |
| runtime.mcp.dml-tools.execute-entity | true |
Habilita a ferramenta execute_entity |
| runtime.mcp.dml-tools.aggregate-records | true |
Habilita a ferramenta aggregate_records (booliano ou objeto com tempo limite de consulta) |
Visão geral do formato
{
"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`)
}
}
}
}
}
Modo (runtime do host)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
host |
enumeração (production | development) |
❌ Não | production |
Comportamento de desenvolvimento
- Nitro habilitado (anteriormente Banana Cake Pop) para teste do GraphQL
- Interface do usuário do Swagger habilitada para teste REST
- Verificações de integridade anônimas habilitadas
- Maior verbosidade de registro em log (Depuração)
Format
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Tamanho máximo da resposta (runtime do host)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host |
max-response-size-mb |
inteiro | ❌ Não | 158 |
Define o tamanho máximo (em megabytes) para qualquer resultado especificado. Como respostas grandes podem forçar o sistema, max-response-size-mb limita o tamanho total (diferente da contagem de linhas) para evitar sobrecarga, que é especialmente com colunas grandes, como texto ou JSON.
| Value | Result |
|---|---|
| não definido | Usar padrão |
null |
Usar padrão |
integer |
Qualquer inteiro positivo de 32 bits |
<= 0 |
Sem suporte |
Format
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
GraphQL (runtime)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
graphql |
objeto | ❌ Não | - |
Configuração global do GraphQL.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.graphql |
enabled |
boolean | ❌ Não | None |
runtime.graphql |
path |
cadeia | ❌ Não | "/graphql" |
runtime.graphql |
depth-limit |
inteiro | ❌ Não | Nenhum (ilimitado) |
runtime.graphql |
allow-introspection |
boolean | ❌ Não | True |
runtime.graphql |
multiple-mutations.create.enabled |
boolean | ❌ Não | False |
Notas de propriedade
- Os subcaminhos não são permitidos para a
pathpropriedade. - Use
depth-limitpara restringir consultas aninhadas. - Defina
allow-introspectionparafalseocultar o esquema GraphQL. - Use
multiple-mutationspara inserir várias entidades em uma única mutação.
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)
}
}
}
}
}
Exemplo: várias mutações
Configuration
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"] // entity permissions are required
}
]
}
}
}
Mutação do 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 (tempo de execução)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
rest |
objeto | ❌ Não | - |
Configuração REST global.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.rest |
enabled |
boolean | ❌ Não | None |
runtime.rest |
path |
cadeia | ❌ Não | "/api" |
runtime.rest |
request-body-strict |
boolean | ❌ Não | True |
Notas de propriedade
- Se global
enabledforfalse, o nívelenabledde entidade individual não importará. - A
pathpropriedade não dá suporte a valores de subcaminho como/api/data. -
request-body-strictfoi introduzido para ajudar a simplificar objetos POCO do .NET.
request-body-strict |
Behavior |
|---|---|
true |
Campos extras no corpo da solicitação causam uma BadRequest exceção. |
false |
Campos extras no corpo da solicitação são ignorados. |
Format
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string> (default: /api),
"request-body-strict": <true> (default) | <false>
}
}
}
Exemplo: request-body-strict
- As colunas com um
default()valor são ignoradas somente duranteINSERTquando o valor na carga énull. Como consequência,INSERTas operações emdefault()colunas, quandorequest-body-strictestiveremtrue, não podem resultar em valores explícitosnull. Para realizar esse comportamento, umaUPDATEoperação é necessária. - As colunas com um
default()não são ignoradas duranteUPDATE, independentemente do valor da carga. - As colunas computadas são sempre ignoradas.
- Colunas geradas automaticamente são sempre ignoradas.
Tabela de exemplo
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
);
Conteúdo da solicitação
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
Inserir comportamento quando 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.
Payload da resposta
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
Atualizar o comportamento quando request-body-strict = false
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Payload da resposta
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
CORS (runtime do host)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host |
cors |
objeto | ❌ Não | - |
Configuração global do CORS.
Tip
CORS significa "Compartilhamento de recursos entre origens". É um recurso de segurança do navegador que controla se as páginas da Web podem fazer solicitações para um domínio diferente daquele que as serviu.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host.cors |
allow-credentials |
boolean | ❌ Não | False |
runtime.host.cors |
origins |
Matriz de cadeia de caracteres | ❌ Não | None |
Note
A allow-credentials propriedade define o Access-Control-Allow-Credentials cabeçalho CORS.
Format
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> | <false> (default),
"origins": ["<array-of-strings>"]
}
}
}
}
Note
O curinga * é válido como um valor para origins.
Provedor (runtime do host de autenticação)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
provider |
enumeração (Unauthenticated | StaticWebApps | AppService | EntraId | Custom | Simulator) |
❌ Não | Unauthenticated |
Seleciona o método de autenticação. Cada provedor valida a identidade de forma diferente. Para obter a configuração passo a passo, consulte os guias de instruções na tabela a seguir.
Note
A funcionalidade do Construtor de API de Dados 2.0 descrita nesta seção está atualmente em versão prévia e pode ser alterada antes da disponibilidade geral. Para obter mais informações, consulte o que há de novo na versão 2.0.
Resumo do provedor
| Fornecedor | Caso de uso | Origem da identidade | Guia de instruções |
|---|---|---|---|
Unauthenticated |
O DAB fica atrás de um front-end confiável (padrão) | Nenhum – todas as solicitações são executadas como anonymous |
Configurar o provedor não autenticado |
AppService |
Aplicativos hospedados no Azure (EasyAuth) |
X-MS-CLIENT-PRINCIPAL cabeçalho |
Configurar a autenticação do Serviço de Aplicativo |
EntraID |
Microsoft Entra ID (Azure AD) | Token de portador JWT | Configurar autenticação do Entra ID |
Custom |
IdPs de terceiros (Okta, Auth0) | Token de portador JWT | Configurar a autenticação JWT personalizada |
Simulator |
Somente testes locais | Simulado | Configurar a autenticação do Simulador |
Note
O EntraId provedor foi nomeado AzureAdanteriormente. O nome antigo ainda funciona para compatibilidade.
Não autenticado (padrão)
Quando Unauthenticated é definido (ou nenhum provedor é especificado), o DAB não inspeciona nem valida qualquer JWT. Todas as solicitações são executadas como a anonymous função. Um serviço front-end, como o Gerenciamento de API do Azure ou um gateway de aplicativo, ainda pode lidar com a autenticação ou a política de acesso antes que as solicitações cheguem ao DAB, mas o DAB continua autorizando apenas como anonymous.
Important
Quando Unauthenticated estiver ativo e authenticated as funções personalizadas definidas em permissões de entidade nunca forem ativadas. Se a configuração contiver essas funções, o DAB emitirá um aviso na inicialização.
{
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
AppService
Confia em cabeçalhos de identidade injetados pelo EasyAuth do Serviço de Aplicativo do Azure.
{
"host": {
"authentication": {
"provider": "AppService"
}
}
}
EntraID
Valida tokens JWT emitidos pela ID do Microsoft Entra.
{
"host": {
"authentication": {
"provider": "EntraId",
"jwt": {
"audience": "<application-id>",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
}
}
}
}
Personalizado
Valida tokens JWT de provedores de identidade de terceiros.
{
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<api-audience>",
"issuer": "https://<your-idp-domain>/"
}
}
}
}
Simulador
Simula a autenticação para desenvolvimento e teste local.
{
"host": {
"authentication": {
"provider": "Simulator"
}
}
}
Important
O Simulator provedor só funciona quando runtime.host.mode é development. O DAB falhará ao iniciar se o Simulador estiver configurado no modo de produção.
Seleção de função
Para todos os provedores, exceto Simulador, o X-MS-API-ROLE cabeçalho seleciona qual função usar nas declarações do usuário autenticado. Se omitida, a solicitação usará a função do Authenticated sistema. Para obter detalhes sobre a avaliação de função, consulte a visão geral de autorização.
JWT (runtime do host de autenticação)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host.authentication |
jwt |
objeto | ❌ Não | - |
Configuração global do JWT (Token Web JSON).
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
cadeia | ✔️ Sim* | None |
runtime.host.authentication.jwt |
issuer |
cadeia | ✔️ Sim* | None |
* Ambos audience e issuer são necessários quando o jwt objeto está presente. O jwt objeto em si é necessário quando o provedor é EntraID, AzureADou Custom.
Format
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Paginação (Runtime)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
pagination |
objeto | ❌ Não | - |
Limites globais de paginação para pontos de extremidade REST e GraphQL.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.pagination |
max-page-size |
int | ❌ Não | 100,000 |
runtime.pagination |
default-page-size |
int | ❌ Não | 100 |
runtime.pagination |
next-link-relative |
boolean | ❌ Não | false |
Valores compatíveis com tamanho máximo de página
| Value | Result |
|---|---|
integer |
Há suporte para qualquer inteiro positivo de 32 bits. |
0 |
Não há suporte. |
-1 |
O padrão é o valor máximo com suporte. |
< -1 |
Não há suporte. |
Valores com suporte de tamanho de página padrão
| Value | Result |
|---|---|
integer |
Qualquer inteiro positivo menor que o max-page-sizeatual. |
0 |
Não há suporte. |
-1 |
O padrão é a configuração de max-page-size atual. |
< -1 |
Não há suporte. |
Comportamento relativo do próximo link
Quando next-link-relative for true, os valores de paginação nextLink usam URLs relativas em vez de URLs absolutas.
| Value | Example |
|---|---|
false (padrão) |
"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
Quando o valor é maior que max-page-size, os resultados são limitados a max-page-size.
Exemplo: Paginação em REST
Request
GET https://localhost:5001/api/users
Payload da resposta
{
"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=="
}
Próxima Página da Solicitação
GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==
Exemplo: Paginação no GraphQL
Conteúdo da solicitação (consulta)
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Payload da resposta
{
"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=="
}
}
}
Próxima Página da Solicitação
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Exemplo: acessando max-page-size em solicitações
Use o max-page-size valor definindo $limit (REST) ou first (GraphQL) para -1.
REST
GET https://localhost:5001/api/users?$limit=-1
GraphQL
query {
users(first: -1) {
items {
...
}
}
}
Compactação (runtime)
Note
A funcionalidade do Construtor de API de Dados 2.0 descrita nesta seção está atualmente em versão prévia e pode ser alterada antes da disponibilidade geral. Para obter mais informações, consulte o que há de novo na versão 2.0.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
compression |
objeto | ❌ Não | - |
Configuração de compactação de resposta HTTP. Quando habilitado, o DAB compacta os corpos de resposta para reduzir os tamanhos de carga e melhorar as velocidades de transferência.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.compression |
level |
cadeia | ❌ Não | "optimal" |
Valores com suporte para level
| Value | Description | Economia de compactação | Impacto sobre o desempenho |
|---|---|---|---|
optimal |
Balanceia a taxa e a velocidade (padrão) | Gzip: 90,5% /Brotli: 92,2% | Uso moderado de CPU, leve aumento de latência |
fastest |
Prioriza a velocidade em relação à taxa | Gzip: 89,8% /Brotli: 91,1% | Baixo uso de CPU, latência mínima |
none |
Nenhuma compactação | 0% (linha de base: 12.673 bytes) | None |
Cabeçalhos HTTP do cliente
A compactação é invocada pelo cabeçalho do Accept-Encoding cliente. Os algoritmos com suporte são Gzip e Brotli. A level configuração configura a estratégia de compactação quando o cliente e o servidor dão suporte a vários algoritmos.
Cabeçalhos com suporte
| Cabeçalho HTTP | Algoritmo usado |
|---|---|
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 | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
cache |
objeto | ❌ Não | - |
Configuração do Cache Global.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.cache |
enabled |
boolean | ❌ Não | False |
runtime.cache |
ttl-seconds |
inteiro | ❌ Não | 5 |
runtime.cache |
level-2 |
objeto | ❌ Não | - |
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.cache.level-2 |
enabled |
boolean | ❌ Não | False |
runtime.cache.level-2 |
provider |
cadeia | ❌ Não | redis |
runtime.cache.level-2 |
connection-string |
cadeia | ❌ Não | None |
runtime.cache.level-2 |
partition |
cadeia | ❌ Não | None |
Tip
A propriedade de nível cache.ttl-seconds de entidade usa como padrão esse valor global.
Tip
Para obter configuração de ponta a ponta, comportamento em nível de cache e exemplos do Redis, consulte Implementar cache de nível 2.
Format
{
"runtime": {
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level-2": {
"enabled": <boolean>,
"provider": "redis",
"connection-string": <string>,
"partition": <string>
}
}
}
}
Important
Se global enabled for false, o nível enabled de entidade individual não importará.
Quando level-2.enabled é true, o DAB usa o provedor de cache distribuído configurado, além do cache na memória local. Uma entidade configurada com o nível L1L2 de cache verifica primeiro o cache local, depois o cache distribuído, antes de ir para o banco de dados.
Telemetria (runtime)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
telemetry |
objeto | ❌ Não | - |
Configuração de telemetria global.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
log-level |
dicionário | ❌ Não | None |
runtime.telemetry |
application-insights |
objeto | ❌ Não | - |
runtime.telemetry |
open-telemetry |
objeto | ❌ Não | - |
runtime.telemetry |
azure-log-analytics |
objeto | ❌ Não | - |
runtime.telemetry |
file |
objeto | ❌ Não | - |
Configura a verbosidade de log por namespace. Essa configuração segue as convenções de log padrão do .NET e permite o controle granular, embora assuma alguma familiaridade com os internos do construtor de API de Dados. O construtor de API de dados é de software livre: https://aka.ms/dab
Format
{
"runtime": {
"telemetry": {
"log-level": {
"namespace": "log-level",
"namespace": "log-level"
}
}
}
}
Tip
log-level pode ser recarregado a quente no desenvolvimento e na produção. Atualmente, é a única propriedade que dá suporte ao recarregamento frequente na produção.
Example
{
"runtime": {
"telemetry": {
"log-level": {
"Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
"Azure.DataApiBuilder.Core": "information",
"default": "warning"
}
}
}
}
Application Insights (telemetria)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
application-insights |
objeto | ❌ Não | - |
Configura o registro em log no Application Insights.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
boolean | ❌ Não | true |
runtime.telemetry.application-insights |
connection-string |
cadeia | ✔️ Sim | None |
Format
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>
"connection-string": <string>
}
}
}
}
OpenTelemetry (telemetria)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
open-telemetry |
objeto | ❌ Não | - |
Configura o registro em log para Abrir Telemetria.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry.open-telemetry |
enabled |
boolean | ❌ Não | true |
runtime.telemetry.open-telemetry |
endpoint |
cadeia | ✔️ Sim | None |
runtime.telemetry.open-telemetry |
headers |
cadeia | ❌ Não | None |
runtime.telemetry.open-telemetry |
service-name |
cadeia | ❌ Não | "dab" |
runtime.telemetry.open-telemetry |
exporter-protocol |
enumeração (grpc | httpprotobuf) |
❌ Não | grpc |
Vários cabeçalhos são , separados (vírgula).
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",
}
}
}
}
Saiba mais sobre OTEL_EXPORTER_OTLP_HEADERS.
Note
gRPC (4317) é mais rápido e dá suporte ao streaming, mas requer mais etapas de instalação. HTTP/protobuf (4318) é mais simples e fácil de depurar, mas menos eficiente.
Azure Log Analytics (telemetria)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
azure-log-analytics |
objeto | ❌ Não | - |
Configura o registro em log no Azure Log Analytics por meio de um ponto de extremidade de coleta de dados. Quando habilitado, o DAB envia dados de telemetria em lotes em um intervalo configurável.
Note
A funcionalidade do Construtor de API de Dados 2.0 descrita nesta seção está atualmente em versão prévia e pode ser alterada antes da disponibilidade geral. Para obter mais informações, consulte o que há de novo na versão 2.0.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics |
enabled |
boolean | ❌ Não | false |
runtime.telemetry.azure-log-analytics |
dab-identifier |
cadeia | ❌ Não | "DabLogs" |
runtime.telemetry.azure-log-analytics |
flush-interval-seconds |
inteiro | ❌ Não | 5 |
runtime.telemetry.azure-log-analytics |
auth |
objeto | ✔️ Sim* | - |
*
auth é necessário quando enabled é true.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry.azure-log-analytics.auth |
custom-table-name |
cadeia | ✔️ Sim* | null |
runtime.telemetry.azure-log-analytics.auth |
dcr-immutable-id |
cadeia | ✔️ Sim* | null |
runtime.telemetry.azure-log-analytics.auth |
dce-endpoint |
cadeia | ✔️ Sim* | null |
* Obrigatório quando enabled for true.
-
dab-identifier— um rótulo passado para o Log Analytics para ajudar a diferenciar quais logs vêm do construtor de API de Dados. -
flush-interval-seconds— o intervalo de tempo (em segundos) entre o envio de lotes de dados de telemetria. -
custom-table-name— o nome da tabela personalizada no Azure Log Analytics em que os dados são armazenados. -
dcr-immutable-id— a ID imutável da regra de coleta de dados que define como os dados são coletados. -
dce-endpoint— a URL do ponto de extremidade de coleta de dados usada para enviar dados de telemetria.
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"
}
}
}
}
}
Arquivo (telemetria)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry |
file |
objeto | ❌ Não | - |
Configura a gravação de logs de telemetria em um arquivo local. Quando habilitado, o DAB grava a saída de log estruturada no caminho do arquivo especificado com intervalos de rolagem configuráveis e limites de tamanho.
Note
A funcionalidade do Construtor de API de Dados 2.0 descrita nesta seção está atualmente em versão prévia e pode ser alterada antes da disponibilidade geral. Para obter mais informações, consulte o que há de novo na versão 2.0.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.telemetry.file |
enabled |
boolean | ❌ Não | false |
runtime.telemetry.file |
path |
cadeia | ✔️ Sim* | "/logs/dab-log.txt" |
runtime.telemetry.file |
rolling-interval |
enumeração | ❌ Não | "Day" |
runtime.telemetry.file |
retained-file-count-limit |
inteiro | ❌ Não | 1 |
runtime.telemetry.file |
file-size-limit-bytes |
inteiro | ❌ Não | 1048576 |
*
path é necessário quando enabled é true.
Valores de intervalo sem interrupção
| Value | Description |
|---|---|
Minute |
Novo arquivo de log a cada minuto |
Hour |
Novo arquivo de log a cada hora |
Day |
Novo arquivo de log todos os dias (padrão) |
Month |
Novo arquivo de log todos os meses |
Year |
Novo arquivo de log todos os anos |
Infinite |
Nunca rolar para um novo arquivo |
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 | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
mcp |
objeto | ❌ Não | - |
Configura o servidor MCP (Protocolo de Contexto de Modelo sql), que expõe entidades de banco de dados como ferramentas MCP para agentes de IA.
Note
A funcionalidade do Construtor de API de Dados 2.0 descrita nesta seção está atualmente em versão prévia e pode ser alterada antes da disponibilidade geral. Para obter mais informações, consulte o que há de novo na versão 2.0.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.mcp |
enabled |
boolean | ❌ Não | true |
runtime.mcp |
path |
cadeia | ❌ Não | "/mcp" |
runtime.mcp |
description |
cadeia | ❌ Não | null |
runtime.mcp |
dml-tools |
booliano ou objeto | ❌ Não | true |
A dml-tools propriedade aceita um booliano para habilitar ou desabilitar todas as ferramentas ou um objeto para controlar ferramentas individuais:
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime.mcp.dml-tools |
describe-entities |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
create-record |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
read-records |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
update-record |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
delete-record |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
execute-entity |
boolean | ❌ Não | true |
runtime.mcp.dml-tools |
aggregate-records |
booliano ou objeto | ❌ Não | true |
A aggregate-records ferramenta aceita um booliano ou um objeto com mais configurações:
| Parent | Property | Tipo | Required | Default | Intervalo |
|---|---|---|---|---|---|
runtime.mcp.dml-tools.aggregate-records |
enabled |
boolean | ❌ Não | true |
|
runtime.mcp.dml-tools.aggregate-records |
query-timeout |
inteiro | ❌ Não | 30 |
1 a 600 segundos |
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
}
}
}
}
}
Para habilitar ou desabilitar todas as ferramentas DML de uma só vez, defina "dml-tools" como true ou false.
Quando você desabilitar uma ferramenta no nível de runtime, a ferramenta nunca aparece na resposta MCP tools/list e não pode ser invocada, independentemente das permissões de nível de entidade. Para obter mais informações sobre ferramentas DML individuais, consulte ferramentas DML (linguagem de manipulação de dados).
Usar a 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
Integridade (runtime)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
runtime |
health |
objeto | ❌ Não | - |
Configuração do ponto de extremidade de verificação de integridade global (/health).
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default | Intervalo/notas |
|---|---|---|---|---|---|
runtime.health |
enabled |
boolean | ❌ Não | true |
|
runtime.health |
roles |
Matriz de cadeia de caracteres | ✔️ Sim* | null |
*Obrigatório no modo de produção |
runtime.health |
cache-ttl-seconds |
inteiro | ❌ Não | 5 |
Min: 0 |
runtime.health |
max-query-parallelism |
inteiro | ❌ Não | 4 |
Min: Um, Máximo: Oito (preso) |
Comportamento em desenvolvimento versus produção
| Condition | Comportamento de desenvolvimento | Comportamento de produção |
|---|---|---|
health.enabled = falso |
403 estado |
403 estado |
health.enabled = verdadeiro |
Depende da função | Depende da função |
roles omitido ou null |
Integridade exibida |
403 estado |
função atual não em roles |
403 estado |
403 estado |
função atual em roles |
Integridade exibida | Integridade exibida |
roles inclui anonymous |
Integridade exibida | Integridade exibida |
Format
{
"health": {
"enabled": <true> (default) | <false>,
"roles": [ <string> ], // required in production
"cache-ttl-seconds": <integer; default: 5>,
"max-query-parallelism": <integer; default: 4>
}
}
Note
Se global enabled for false, o nível enabled de entidade individual não importará.
Example
{
"health": {
"enabled": true,
"roles": ["admin", "support"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 6
}
}