Partilhar via


Runtime

Definições de configuração que determinam o comportamento do tempo de execução.

Configurações de paginação

Property Default Description
runtime.pagination.max de tamanho de página 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 estranhos no corpo da solicitação quando verdadeiro

Configurações do GraphQL

Property Default Description
runtime.graphql.allow-introspecção true Permite consultar o esquema subjacente do GraphQL
runtime.graphql.path "/graphql" Caminho base para o ponto de extremidade GraphQL
runtime.graphql.enabled true Permite ativar ou desativar pedidos GraphQL para todas as entidades
runtime.graphql.depth-limit null Profundidade máxima permitida de uma consulta GraphQL
runtime.graphql.multiple-mutations.create.enabled false Permite múltiplas mutações de criação para todas as entidades

Configurações do host

Property Default Description
runtime.host.max-resposta-tamanho-mb 158 Tamanho máximo (MB) da resposta do banco de dados permitido em um único resultado
runtime.host.mode "production" Modo de execução; "production" quer "development"

Configurações do CORS

Property Default Description
runtime.host.cors.origins [] Origens permitidas do CORS
runtime.host.cors.allow-credentials false Define o valor para o cabeçalho Access-Control-Allow-Credentials

Definições de autenticação

Property Default Description
runtime.host.authentication.provider Unauthenticated Fornecedor de autenticação
runtime.host.authentication.jwt.audiência null Audiência JWT
runtime.host.authentication.jwt.issuer null Emissor JWT

Configurações de cache

Property Default Description
runtime.cache.enabled false Permite o armazenamento em cache de respostas globalmente
runtime.cache.ttl-segundos 5 Tempo de vida (segundos) para cache global
runtime.cache.level-2.enabled false Ativa cache distribuída de nível 2 globalmente
runtime.cache.level-2.provider "redis" Fornecedor de cache distribuído para cache de nível 2
runtime.cache.level-2.connection-string null Cadeia de ligação para o fornecedor de cache de nível 2
runtime.cache.level-2.partition null Nome opcional de partição para isolar espaço de cache distribuído

Definições de compressão

Property Default Description
runtime.compression.level optimal Nível de compressão da resposta HTTP (optimal, fastest, ou none)

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 Ativa ou desativa o OpenTelemetry
runtime.telemetry.open-telemetry.enabled true Ativa ou desativa o OpenTelemetry
runtime.telemetry.azure-log-analytics.enabled false Ativa ou desativa o Azure Log Analytics
runtime.telemetry.azure-log-analytics.dab-identifier "DabLogs" Identifier for DAB in Azure Log Analytics
runtime.telemetry.azure-log-analytics.flush-interval-seconds 5 Intervalo entre empurradas em lote logarítmico (segundos)
runtime.telemetry.azure-log-analytics.auth.custom-table-name null Nome de tabela personalizada para Azure Log Analytics
runtime.telemetry.azure-log-analytics.auth.dcr-immutable-id null Regra de recolha de dados ID imutável
runtime.telemetry.azure-log-analytics.auth.dce-endpoint null URL do endpoint de recolha de dados
runtime.telemetry.file.enabled false Ativa ou desativa o registo de ficheiros
runtime.telemetry.file.path "/logs/dab-log.txt" Caminho do ficheiro para registos de telemetria
runtime.telemetry.file.rolling-interval "Day" Intervalo rolante para ficheiros de registo
runtime.telemetry.file.retained-file-count-limit 1 Número máximo de ficheiros de registo retidos
runtime.telemetry.file.file-size-limit-bytes 1048576 Tamanho máximo do ficheiro em bytes antes de rolar
runtime.telemetry.log-level.namespace null Substituição de 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-segundos 5 Tempo de vida (segundos) para a entrada de cache do relatório de verificação de integridade
runtime.health.max-consulta-paralelismo 4 Consultas máximas de verificação de saúde concorrentes (intervalo: 1-8)

Definições MCP

Property Default Description
runtime.mcp.enabled true Ativa ou desativa globalmente o endpoint MCP
runtime.mcp.path "/mcp" Caminho base para o ponto final MCP
runtime.mcp.description null Descrição do servidor enviada aos clientes MCP durante a inicialização
runtime.mcp.dml-ferramentas true Ativa ou desativa todas as ferramentas DML, ou um objeto para controlo por ferramenta
runtime.mcp.dml-tools.describe-entities true Ativa a ferramenta describe_entities
runtime.mcp.dml-tools.create-record true Ativa a ferramenta create_record
runtime.mcp.dml-tools.read-records true Ativa a ferramenta read_records
runtime.mcp.dml-tools.update-record true Ativa a ferramenta update_record
runtime.mcp.dml-tools.delete-record true Ativa a ferramenta delete_record
runtime.mcp.dml-tools.execute-entity true Ativa a ferramenta execute_entity
runtime.mcp.dml-tools.aggregate-records true Ativa a ferramenta aggregate_records (booleana ou objeto com tempo de espera 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 (tempo de execução do host)

Parent Property Tipo Required Default
runtime host enum (production | development) ❌ Não production

Comportamento de desenvolvimento

  • Ativado Nitro (anteriormente Banana Cake Pop) para testes GraphQL
  • Interface do usuário do Swagger habilitada para testes REST
  • Verificações de integridade anônimas habilitadas
  • Maior verbosidade de registro (Depuração)

Format

{
  "runtime": {
    "host": {
      "mode": "production" (default) | "development"
    }
  }
}

Tamanho máximo da resposta (tempo de execução do host)

Parent Property Tipo Required Default
runtime.host max-response-size-mb número inteiro ❌ Não 158

Define o tamanho máximo (em megabytes) para qualquer resultado. Como respostas grandes podem sobrecarregar o sistema, max-response-size-mb limita o tamanho total (diferente da contagem de linhas) para evitar sobrecarga, o 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 Não suportado

Format

{
  "runtime": {
    "host": {
      "max-response-size-mb": <integer; default: 158>
    }
  }
}

GraphQL (tempo de execução)

Parent Property Tipo Required Default
runtime graphql objecto ❌ 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 (de caracteres) ❌ Não "/graphql"
runtime.graphql depth-limit número inteiro ❌ Não Nenhum (ilimitado)
runtime.graphql allow-introspection boolean ❌ Não True
runtime.graphql multiple-mutations.create.enabled boolean ❌ Não False

Notas sobre o imóvel

  • Não são permitidos subcaminhos na path propriedade.
  • Use depth-limit para restringir consultas aninhadas.
  • Defina allow-introspection para false ocultar o esquema GraphQL.
  • Use multiple-mutations para 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: mutações múltiplas

Configuration

{
  "runtime": {
    "graphql": {
      "multiple-mutations": {
        "create": {
          "enabled": true
        }
      }
    }
  },
  "entities": {
    "User": {
      "source": "dbo.Users",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["create"] // entity permissions are required
        }
      ]
    }
  }
}

Mutação 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 objecto ❌ Não -

Configuração REST global.

Propriedades aninhadas

Parent Property Tipo Required Default
runtime.rest enabled boolean ❌ Não None
runtime.rest path cadeia (de caracteres) ❌ Não "/api"
runtime.rest request-body-strict boolean ❌ Não True

Notas sobre o imóvel

  • Se global enabled for false, o nível enabled da entidade individual não importa.
  • A path propriedade não oferece suporte a valores de subcaminho como /api/data.
  • request-body-strict foi introduzido para ajudar a simplificar os objetos POCO do .NET.
request-body-strict Behavior
true Campos extras no corpo da solicitação causam uma BadRequest exceção.
false Os 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 apenas INSERT quando o seu valor na carga útil é null. Como consequência, INSERT as operações em default() colunas, quando request-body-strict é true, não podem resultar em valores explícitos null . Para conseguir este comportamento, é necessária uma UPDATE operação.
  • As colunas com um default() não são ignoradas durante UPDATE independentemente do valor da carga útil.
  • As colunas computadas são sempre ignoradas.
  • As 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
);

Solicitar carga útil

{
  "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.

Carga útil de 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.

Carga útil de resposta

{
  "Id": 1,
  "Name": "Alice Updated",
  "Age": null,
  "IsAdmin": false,
  "IsMinor": false // Recomputed by the database (false when age is `null`)
}

CORS (tempo de execução do host)

Parent Property Tipo Required Default
runtime.host cors objecto ❌ Não -

Configuração global do CORS.

Tip

CORS significa "Cross-Origin Resource Sharing" (Partilha de Recursos entre Origens). É uma funcionalidade de segurança do navegador que controla se as páginas web podem fazer pedidos a 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 array de strings ❌ 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 (tempo de execução do host de autenticação)

Parent Property Tipo Required Default
runtime.host.authentication provider enum (UnauthenticatedAppService | EntraId | CustomStaticWebAppsSimulator | | | ) ❌ Não Unauthenticated

Seleciona o método de autenticação. Cada prestador valida a identidade de forma diferente. Para a configuração passo a passo, consulte os guias práticos na tabela seguinte.

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para mais informações, consulte O que há de novo na versão 2.0.

Resumo do prestador

Provider Caso de uso Fonte identidade Manual de instruções
Unauthenticated O DAB está atrás de uma interface de confiança (por defeito) Nenhum—todos os pedidos são executados como anonymous Configurar o fornecedor não autenticado
AppService Aplicações alojadas no Azure (EasyAuth) X-MS-CLIENT-PRINCIPAL Cabeçalho Configurar autenticação de App Service
EntraID Microsoft Entra ID (Azure AD) Token portador JWT Configurar a autenticação do Entra ID
Custom IDPs de terceiros (Okta, Auth0) Token portador JWT Configurar autenticação JWT personalizada
Simulator Apenas testes locais Simulado Configurar autenticação do simulador

Note

O EntraId fornecedor era anteriormente chamado AzureAd. O nome antigo ainda funciona para compatibilidade.

Não autenticado (por defeito)

Quando Unauthenticated está definido (ou sem fornecedor especificado), o DAB não inspeciona nem valida nenhum JWT. Todos os pedidos são executados como o anonymous papel. Um serviço front-end como o Azure API Management ou um gateway de aplicação ainda pode gerir a política de autenticação ou acesso antes de os pedidos chegarem ao DAB, mas o DAB continua a autorizar apenas como anonymous.

Important

Quando Unauthenticated está ativo, authenticated e os papéis personalizados definidos nas permissões da entidade nunca são ativados. Se a sua configuração contiver esses papéis, o DAB emite um aviso no arranque.

{
  "host": {
    "authentication": {
      "provider": "Unauthenticated"
    }
  }
}

AppService

Trusts identity headers injected by Azure App Service EasyAuth.

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

EntraID

Valida tokens JWT emitidos pelo Microsoft Entra ID.

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

Personalizado

Valida tokens JWT de fornecedores de identidade terceiros.

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

Simulador

Simula autenticação para desenvolvimento e testes locais.

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

Important

O Simulator fornecedor só funciona quando runtime.host.mode é development. O DAB não arranca se o Simulador estiver configurado em modo de produção.

Seleção de funções

Para todos os fornecedores, exceto o Simulator, o X-MS-API-ROLE cabeçalho seleciona qual o papel a usar a partir das reivindicações do utilizador autenticado. Se for omitido, o pedido utiliza o papel do Authenticated sistema. Para detalhes sobre a avaliação de funções, consulte Visão geral da Autorização.

JWT (Tempo de execução do host de autenticação)

Parent Property Tipo Required Default
runtime.host.authentication jwt objecto ❌ Não -

Configuração do Global JSON Web Token (JWT).

Diagrama de suporte a tokens web JSON no construtor de API de dados.

Propriedades aninhadas

Parent Property Tipo Required Default
runtime.host.authentication.jwt audience cadeia (de caracteres) ✔️ Sim* None
runtime.host.authentication.jwt issuer cadeia (de caracteres) ✔️ Sim* None

* Tanto audience como issuer são necessários quando o jwt objeto está presente. O jwt próprio objeto é necessário quando o fornecedor é EntraID, AzureAD, ou Custom.

Format

{
  "runtime": {
    "host": {
      "authentication": {
        "jwt": {
          "audience": "<client-id>",
          "issuer": "<issuer-url>"
        }
      }
    }
  }
}

Paginação (tempo de execução)

Parent Property Tipo Required Default
runtime pagination objecto ❌ 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 suportados com tamanho máximo de página

Value Result
integer Qualquer inteiro positivo de 32 bits é suportado.
0 Não suportado.
-1 O padrão é o valor máximo suportado.
< -1 Não suportado.

Valores suportados com tamanho de página padrão

Value Result
integer Qualquer número inteiro positivo menor que o max-page-sizeatual.
0 Não suportado.
-1 O padrão é a configuração max-page-size atual.
< -1 Não suportado.

Quando next-link-relative é 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

Carga útil de 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=="
}

Solicitar Página Seguinte

GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==

Exemplo: Paging no GraphQL

Solicitar carga útil (Consulta)

query {
  users {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

Carga útil de 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=="
    }
  }
}

Solicitar Página Seguinte

query {
  users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

Exemplo: Acesso max-page-size em solicitações

Use o max-page-size valor definindo $limit (REST) ou first (GraphQL) como -1.

REST

GET https://localhost:5001/api/users?$limit=-1

GraphQL

query {
  users(first: -1) {
    items {
      ...
    }
  }
}

Compressão (tempo de execução)

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para mais informações, consulte O que há de novo na versão 2.0.

Parent Property Tipo Required Default
runtime compression objecto ❌ Não -

Configuração de compressão de resposta HTTP. Quando ativado, o DAB comprime os corpos de resposta para reduzir o tamanho da carga útil e melhorar as velocidades de transferência.

Propriedades aninhadas

Parent Property Tipo Required Default
runtime.compression level cadeia (de caracteres) ❌ Não "optimal"

Valores suportados para level

Value Description Poupança de compressão Impacto no desempenho
optimal Rácio de equilíbrio e velocidade (padrão) Gzip: 90,5% / Brotli: 92,2% Uso moderado do CPU, ligeiro aumento da latência
fastest Prioriza a velocidade em detrimento da razão Gzip: 89,8% / Irmão: 91,1% Baixo uso de CPU, latência mínima
none Sem compressão 0% (base: 12.673 bytes) None

Cabeçalhos HTTP do cliente

A compressão é invocada pelo cabeçalho do Accept-Encoding cliente. Os algoritmos suportados são Gzip e Brotli. A level definição configura a estratégia de compressão quando tanto o cliente como o servidor suportam múltiplos algoritmos.

Cabeçalhos suportados

Cabeçalho de HTTP Algoritmo Utilizado
Accept-Encoding: gzip Gzip
Accept-Encoding: br Brotli

Format

{
  "runtime": {
    "compression": {
      "level": <"optimal"> (default) | <"fastest"> | <"none">
    }
  }
}

Example

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

Cache (tempo de execução)

Parent Property Tipo Required Default
runtime cache objecto ❌ Não -

Configuração de cache global.

Propriedades aninhadas

Parent Property Tipo Required Default
runtime.cache enabled boolean ❌ Não False
runtime.cache ttl-seconds número inteiro ❌ Não 5
runtime.cache level-2 objecto ❌ Não -
Parent Property Tipo Required Default
runtime.cache.level-2 enabled boolean ❌ Não False
runtime.cache.level-2 provider cadeia (de caracteres) ❌ Não redis
runtime.cache.level-2 connection-string cadeia (de caracteres) ❌ Não None
runtime.cache.level-2 partition cadeia (de caracteres) ❌ Não None

Tip

A propriedade de nível cache.ttl-seconds de entidade assume como padrão esse valor global.

Tip

Para configuração de ponta a ponta, comportamento ao nível de cache e exemplos de Redis, veja 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 da entidade individual não importa.

Quando level-2.enabled é true, o DAB utiliza o fornecedor de cache distribuído configurado além da cache local em memória. Uma entidade configurada com nível L1L2 de cache verifica primeiro a cache local, depois a cache distribuída, antes de ir para a base de dados.

Telemetria (tempo de execução)

Parent Property Tipo Required Default
runtime telemetry objecto ❌ Não -

Configuração de telemetria global.

Propriedades aninhadas

Parent Property Tipo Required Default
runtime.telemetry log-level dictionary ❌ Não None
runtime.telemetry application-insights objecto ❌ Não -
runtime.telemetry open-telemetry objecto ❌ Não -
runtime.telemetry azure-log-analytics objecto ❌ Não -
runtime.telemetry file objecto ❌ Não -

Configura a verbosidade do registro em log por namespace. Esta configuração segue as convenções padrão de registo do .NET e permite controlo granular, embora presuma alguma familiaridade com os internos do Data API builder. O construtor de API de dados é de código aberto: https://aka.ms/dab

Format

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "namespace": "log-level",
        "namespace": "log-level"
      }
    }
  }
}

Tip

log-level pode ser recarregado a quente tanto no desenvolvimento quanto na produção. Atualmente, é a única propriedade que suporta recarga a quente 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 objecto ❌ 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 (de caracteres) ✔️ 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 objecto ❌ 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 (de caracteres) ✔️ Sim None
runtime.telemetry.open-telemetry headers cadeia (de caracteres) ❌ Não None
runtime.telemetry.open-telemetry service-name cadeia (de caracteres) ❌ Não ""
runtime.telemetry.open-telemetry exporter-protocol enum (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

O gRPC (4317) é mais rápido e suporta streaming, mas requer mais passos de configuraçã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 objecto ❌ Não -

Configura o registo no Azure Log Analytics através de um endpoint de recolha de dados. Quando ativado, o DAB envia dados de telemetria em lotes a intervalos configuráveis.

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para 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 (de caracteres) ❌ Não "DabLogs"
runtime.telemetry.azure-log-analytics flush-interval-seconds número inteiro ❌ Não 5
runtime.telemetry.azure-log-analytics auth objecto ✔️ Sim* -

* auth é necessário quando enabled é true.

Parent Property Tipo Required Default
runtime.telemetry.azure-log-analytics.auth custom-table-name cadeia (de caracteres) ✔️ Sim* null
runtime.telemetry.azure-log-analytics.auth dcr-immutable-id cadeia (de caracteres) ✔️ Sim* null
runtime.telemetry.azure-log-analytics.auth dce-endpoint cadeia (de caracteres) ✔️ Sim* null

* Obrigatório quando enabled é true.

  • dab-identifier—um rótulo passado ao Log Analytics para ajudar a diferenciar quais os logs que provêm do Data API Builder.
  • 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 onde os dados são armazenados.
  • dcr-immutable-id—o ID imutável da regra de recolha de dados que define como os dados são recolhidos.
  • dce-endpoint—a URL do endpoint de recolha 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"
        }
      }
    }
  }
}

Ficheiro (telemetria)

Parent Property Tipo Required Default
runtime.telemetry file objecto ❌ Não -

Configura a escrita de registos de telemetria num ficheiro local. Quando ativado, o DAB escreve saída de log estruturada no caminho do ficheiro especificado com intervalos rolantes configuráveis e limites de tamanho.

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para 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 (de caracteres) ✔️ Sim* "/logs/dab-log.txt"
runtime.telemetry.file rolling-interval enumeração ❌ Não "Day"
runtime.telemetry.file retained-file-count-limit número inteiro ❌ Não 1
runtime.telemetry.file file-size-limit-bytes número inteiro ❌ Não 1048576

* path é necessário quando enabled é true.

Valores de intervalo rolante

Value Description
Minute Novo ficheiro de registo a cada minuto
Hour Novo ficheiro de registo a cada hora
Day Novo ficheiro de registo todos os dias (por defeito)
Month Novo ficheiro de registo todos os meses
Year Novo ficheiro de registo todos os anos
Infinite Nunca role para um ficheiro novo

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 (duração do tempo)

Parent Property Tipo Required Default
runtime mcp objecto ❌ Não -

Configura o SQL Model Context Protocol (MCP) Server, que expõe entidades de base de dados como ferramentas MCP para agentes de IA.

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para 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 (de caracteres) ❌ Não "/mcp"
runtime.mcp description cadeia (de caracteres) ❌ Não null
runtime.mcp dml-tools Booleano ou objeto ❌ Não true

A dml-tools propriedade aceita um booleano para ativar ou desativar 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 Booleano ou objeto ❌ Não true

A aggregate-records ferramenta aceita um booleano ou um objeto com mais definiçõ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 número inteiro ❌ Não 30 1–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 ativar ou desativar todas as ferramentas DML ao mesmo tempo, defina "dml-tools" para true ou false.

Quando desativas uma ferramenta ao nível do runtime, a ferramenta nunca aparece na resposta MCP tools/list e não pode ser invocada, independentemente das permissões ao nível da entidade. Para mais informações sobre ferramentas DML individuais, consulte ferramentas de linguagem de manipulação de dados (DML).

Usando 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 (tempo de execução)

Parent Property Tipo Required Default
runtime health objecto ❌ Não -

Configuração do ponto de extremidade de verificação de integridade global (/health).

Propriedades aninhadas

Parent Property Tipo Required Default Alcance/Notas
runtime.health enabled boolean ❌ Não true
runtime.health roles array de strings ✔️ Sim* null *Obrigatório em modo de produção
runtime.health cache-ttl-seconds número inteiro ❌ Não 5 Mínimo: 0
runtime.health max-query-parallelism número inteiro ❌ Não 4 Min: Um, Max: Oito (apertado)

Comportamento no desenvolvimento vs. produção

Condition Comportamento de Desenvolvimento Comportamento de Produção
health.enabled = falso 403 Situação 403 Situação
health.enabled = verdadeiro Depende da função Depende da função
roles omitida ou null Saúde exibida 403 Situação
papel atual não em roles 403 Situação 403 Situação
papel atual em roles Saúde exibida Saúde exibida
roles inclui anonymous Saúde exibida Saúde 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 da entidade individual não importa.

Example

{
  "health": {
    "enabled": true,
    "roles": ["admin", "support"],
    "cache-ttl-seconds": 10,
    "max-query-parallelism": 6
  }
}