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 para entidades de banco de dados.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Habilita verificações de integridade para a entidade (pontos de extremidade REST e GraphQL) |
entities.entity-name.health.first |
Número de linhas retornadas na consulta de verificação de integridade (intervalo: 1 a 500) |
entities.entity-name.health.threshold-ms |
Duração máxima em milissegundos para consulta de verificação de integridade (min: Um) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Descrição legível por humanos da entidade |
Campos
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nome do campo de banco de dados (obrigatório) |
entities.entity-name.fields[].alias |
Nome exposto à API (substitui mapeamentos) |
entities.entity-name.fields[].description |
Descrição do campo legível por humanos |
entities.entity-name.fields[].primary-key |
Marca o campo como uma chave primária (substitui os campos-chave) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Tipo de objeto: table, viewou stored-procedure |
entities.entity-name.source.object |
Nome do objeto de banco de dados |
entities.entity-name.source.object-description |
Descrição legível por humanos do objeto de banco de dados |
entities.entity-name.source.parameters |
Parâmetros para procedimentos ou funções armazenados |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Habilita o REST para essa entidade |
entities.entity-name.rest.path |
Rota personalizada para o ponto de extremidade REST |
entities.entity-name.rest.methods |
Métodos REST permitidos: get, , post, put, patch, delete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Nome do tipo ou objeto com singular e plural |
entities.entity-name.graphql.operation |
Tipo de operação: query ou mutation |
entities.entity-name.graphql.enabled |
Habilita o GraphQL para essa entidade |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Cadeia de caracteres de nome de função |
entities.entity-name.permissions[].actions |
Um ou mais de: create, , read, update, deleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one ou many |
entities.entity-name.relationships.relationship-name.target.entity |
Nome da entidade de destino |
entities.entity-name.relationships.relationship-name.source.fields |
Campos dessa entidade usados na relação |
entities.entity-name.relationships.relationship-name.target.fields |
Campos da entidade de destino |
entities.entity-name.relationships.relationship-name.linking.object |
Objeto join usado para relações muitos para muitos |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Campos da entidade de origem usados na junção |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Campos da entidade de destino usados na junção |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Habilita o cache de resposta para a entidade |
entities.entity-name.cache.ttl-seconds |
Tempo de vida útil em cache em segundos |
entities.entity-name.cache.level |
Nível de cache: L1 (somente na memória) ou L1L2 (na memória + distribuído) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Objeto que controla a participação do PROTOCOLO MCP (Model Context Protocol) para a entidade |
entities.entity-name.mcp.dml-tools |
Habilita ou desabilita ferramentas de DML (linguagem de manipulação de dados) para a entidade |
entities.entity-name.mcp.custom-tool |
Registra o procedimento armazenado como uma ferramenta MCP nomeada (somente entidades de procedimento armazenado) |
Visão geral do formato
{
"entities": {
"{entity-name}": {
"description": <string>,
"rest": {
"enabled": <boolean> // default: true
"path": <string> // default: "{entity-name}"
"methods": ["GET", "POST"] // default: ["GET", "POST"]
},
"graphql": {
"enabled": <boolean> // default: true
"type": {
"singular": <string>,
"plural": <string>
},
"operation": "query" | "mutation" // default: "query"
},
"source": {
"object": <string>,
"object-description": <string>,
"type": "view" | "stored-procedure" | "table",
"key-fields": [<string>], // DEPRECATED: use fields[].primary-key
"parameters": [ // array format (preferred)
{
"name": "<parameter-name>",
"required": <boolean>,
"default": <value>,
"description": "<string>"
}
]
},
"fields": [
{
"name": "<database-field-name>",
"alias": "<api-exposed-name>",
"description": "<string>",
"primary-key": <boolean>
}
],
"mappings": { // DEPRECATED: use fields[].alias
"<database-field-name>": <string>
},
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": <string>,
"source.fields": [<string>],
"target.fields": [<string>],
"linking.object": <string>,
"linking.source.fields": [<string>],
"linking.target.fields": [<string>]
}
},
"permissions": [
{
"role": "anonymous" | "authenticated" | <custom-role>,
"actions": ["create", "read", "update", "delete", "execute", "*"],
"fields": {
"include": [<string>],
"exclude": [<string>]
},
"policy": {
"database": <string>
}
}
],
"cache": {
"enabled": <boolean>,
"ttl-seconds": <integer>,
"level": "L1" | "L1L2" // default: "L1L2"
},
"mcp": {
"dml-tools": <boolean>, // default: true
"custom-tool": <boolean> // stored-procedure only; default: false
}
}
}
}
Origem (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
objeto | ✔️ Sim | None |
Os detalhes da fonte do banco de dados da entidade.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
cadeia | ✔️ Sim | None |
entities.{entity-name}.source |
object-description |
cadeia | ❌ Não | None |
entities.{entity-name}.source |
type |
enumeração (table, view, stored-procedure) |
✔️ Sim | None |
entities.{entity-name}.source |
key-fields |
Matriz de cadeia de caracteres | ❌ Não* | None |
entities.{entity-name}.source |
parameters |
objeto ou matriz | ❌ Não** | None |
*
key-fields só é necessário quando type é view e a fields matriz não é usada. O valor representa as chaves primárias.
Aviso
A key-fields propriedade foi preterida no DAB 2.0. Use a fields matriz com primary-key: true em vez disso. O esquema impõe isso fields e key-fields não pode coexistir na mesma entidade.
**
parameters só é necessário quando type é stored-procedure e somente para parâmetros com valores padrão. O tipo de dados do parâmetro é inferido. Parâmetros sem um padrão podem ser omitidos.
object-description é uma descrição opcional legível por humanos do objeto de banco de dados subjacente. Esse valor é exibido durante a descoberta da ferramenta MCP, ajudando os agentes de IA a entender a finalidade da entidade.
Tip
Se o objeto pertencer ao esquema dbo, especificar o esquema será opcional. Além disso, colchetes em torno de nomes de objeto (por exemplo, dbo.Users vs. [dbo].[Users]) podem ser usados quando necessário.
Format
{
"entities": {
"{entity-name}": {
"source": {
"object": <string>,
"object-description": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": [ <string> ], // DEPRECATED: use fields[].primary-key
"parameters": [ // array format (preferred)
{
"name": "<parameter-name>",
"required": <boolean>,
"default": <value>,
"description": "<string>"
}
]
}
}
}
}
Formato de matriz de parâmetros
Na versão prévia do DAB 2.0, parameters dá suporte a um formato de matriz estruturada com metadados mais avançados. Cada parâmetro é um objeto com as seguintes propriedades:
| Property | Tipo | Required | Description |
|---|---|---|---|
name |
cadeia | ✔️ Sim | Nome do parâmetro (sem o @ prefixo) |
required |
boolean | ❌ Não | Se o parâmetro é necessário (true) ou opcional (false) |
default |
qualquer | ❌ Não | Valor padrão usado quando o parâmetro não é fornecido |
description |
cadeia | ❌ Não | Descrição legível por humanos do parâmetro |
Exemplo (formato de matriz — preferencial)
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id",
"parameters": [
{
"name": "id",
"required": true,
"default": null,
"description": "The unique identifier of the book"
}
]
}
}
}
}
Aviso
O formato de dicionário para parameters (por exemplo, { "id": 0 }) é preterido no DAB 2.0. Use o formato de matriz anterior. O formato antigo ainda é aceito para compatibilidade com versões anteriores, mas será removido em uma versão futura.
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.
Permissões (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
cadeia | ✔️ Sim | None |
Especifica o nome da função ao qual as permissões se aplicam. Use funções do sistema (Anonymous, Authenticated) ou funções personalizadas definidas em seu provedor de identidade.
Tip
Para obter informações detalhadas sobre avaliação de função, funções do sistema e o X-MS-API-ROLE cabeçalho, consulte a visão geral de autorização.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Herança de função
O DAB 2.0 introduz a herança de função para permissões de entidade. Quando uma função não está explicitamente configurada para uma entidade, ela herda permissões de uma função mais ampla usando a seguinte cadeia:
named-role → authenticated → anonymous
- Se
authenticatednão estiver configurado para uma entidade, ela herdará deanonymous. - Se uma função nomeada não estiver configurada, ela herdará de
authenticated, ou deanonymousseauthenticatedtambém estiver ausente.
Isso significa que você pode definir permissões uma vez e anonymous cada função mais ampla obtém o mesmo acesso automaticamente, sem necessidade de duplicação.
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.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Com essa configuração, anonymouse authenticatedqualquer função nomeada não configurada pode ser lida Book. Use dab configure --show-effective-permissions para ver as permissões resolvidas para cada entidade após a aplicação da herança.
Ações (entidades de nome de entidade de permissões de matriz de cadeia de caracteres)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [cadeia de caracteres, matriz] | ✔️ Sim | None |
Uma matriz de cadeia de caracteres que detalha quais operações são permitidas para a função associada.
| Action | Operação SQL |
|---|---|
* |
Todas as ações |
create |
Inserir uma ou mais linhas* |
read |
Selecionar uma ou mais linhas |
update |
Modificar uma ou mais linhas* |
delete |
Excluir uma ou mais linhas* |
execute |
Executa um procedimento armazenado |
* No momento, há suporte para várias operações apenas no GraphQL.
Note
Para procedimentos armazenados, a ação curinga (*) expande-se apenas para a ação execute. Para tabelas e exibições, ele se expande para create, read, updatee delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Formato alternativo (somente cadeia de caracteres, quando type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Ações (entidades de nome de entidade de permissões de matriz de objeto)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
Matriz de cadeia de caracteres | ✔️ Sim | None |
Uma matriz de objetos que detalha quais operações são permitidas para a função associada.
Note
Para procedimentos armazenados, a ação curinga (*) se expande para apenas execute. Para tabelas/exibições, ele se expande para create, read, updatee delete.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
cadeia | ✔️ Sim | None |
entities.{entity-name}.permissions.actions[] |
fields |
objeto | ❌ Não | None |
entities.{entity-name}.permissions.actions[] |
policy |
objeto | ❌ Não | None |
entities.{entity-name}.permissions.actions[].policy |
database |
cadeia | ✔️ Sim | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Isso concede read permissão à auditorUser entidade, com restrições de campo e política.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Notas de política
As políticas de banco de dados filtram os resultados da consulta usando predicados no estilo OData. Use @item.<field> para referenciar campos de entidade e @claims.<type> injetar declarações de usuário autenticadas.
| Aspecto | Detalhes |
|---|---|
| Sintaxe | Predicados OData (eq, , ne, and, or, gt, lt) |
| Referência de campo |
@item.<field> (use o nome mapeado, se aplicável) |
| Referência de declaração | @claims.<claimType> |
| Ações com suporte |
read, , updatedelete |
| Sem suporte |
create, execute |
Tip
Para obter diretrizes abrangentes sobre políticas de banco de dados, incluindo substituição de declaração e solução de problemas, consulte Configurar políticas de banco de dados.
Tipo (entidades de nome de entidade do GraphQL)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
objeto | ❌ Não | {entity-name} |
Define a convenção de nomenclatura para uma entidade dentro do esquema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Propriedades aninhadas
| Parent | Property | Required | Tipo | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Sim* | cadeia | None |
entities.{entity-name}.graphql.type |
plural |
❌ Não | cadeia | N/A (padrão para valor singular) |
*
singular é necessário quando type é especificado como um objeto. Quando type é uma cadeia de caracteres simples, essa cadeia de caracteres é usada como o nome singular.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Consulta GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Resposta do GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operação (entidades de nome de entidade do GraphQL)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
cadeia de caracteres de enumeração | ❌ Não | mutation |
Designa se a stored-procedure operação é exibida sob o Query ou Mutation.
Note
Quando {entity-name}.type é definido como stored-procedure, um novo tipo graphQL executeXXX é criado automaticamente. Essa operation propriedade controla onde esse tipo é colocado no esquema GraphQL. Não há impacto funcional, apenas higiene de esquema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Exemplo: operação
Quando operation é definido como query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Quando operation é definido como mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Habilitado (entidades de nome de entidade do GraphQL)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Não | True |
Permite que os desenvolvedores incluam seletivamente entidades no esquema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Não | True |
entities.rest |
path |
cadeia | ❌ Não | /{entity-name} |
entities.{entity-name}.rest |
methods |
Matriz de cadeia de caracteres | ❌ Não* | POST |
* A methods propriedade é apenas para stored-procedure pontos de extremidade.
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.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Descrição (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
cadeia | ❌ Não | None |
Uma descrição opcional legível por humanos da entidade. Esse valor é exibido na documentação da API gerada e como um comentário no esquema graphQL.
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.
Format
{
"entities": {
"{entity-name}": {
"description": "<string>"
}
}
}
Example
{
"entities": {
"Book": {
"description": "Represents a book in the catalog with title, author, and pricing information.",
"source": {
"object": "dbo.books",
"type": "table"
}
}
}
}
Campos (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
matriz | ❌ Não | None |
Define metadados para campos de banco de dados individuais, incluindo aliases, descrições e designações de chave primária. A fields matriz substitui ambos mappings (por meio da alias propriedade) e source.key-fields (por meio da primary-key propriedade) em uma única estrutura unificada.
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 |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
cadeia | ✔️ Sim | None |
entities.{entity-name}.fields[] |
alias |
cadeia | ❌ Não | None |
entities.{entity-name}.fields[] |
description |
cadeia | ❌ Não | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ Não | false |
Format
{
"entities": {
"{entity-name}": {
"fields": [
{
"name": "<database-field-name>",
"alias": "<api-exposed-name>",
"description": "<string>",
"primary-key": <boolean>
}
]
}
}
}
Example
{
"entities": {
"Book": {
"source": {
"object": "dbo.books",
"type": "table"
},
"fields": [
{
"name": "id",
"description": "Unique book identifier",
"primary-key": true
},
{
"name": "sku_title",
"alias": "title",
"description": "The display title of the book"
},
{
"name": "sku_status",
"alias": "status"
}
]
}
}
}
Neste exemplo, id é designada como a chave primária (substituindo a necessidade de source.key-fields), enquanto sku_title e sku_status são aliased como title e status (substituindo a necessidade de mappings).
Important
O esquema impõe que fields não pode coexistir com mappings ou source.key-fields na mesma entidade. Migre para fields e remova as propriedades preteridas.
Mapeamentos (entidades de nome de entidade)
Aviso
A mappings propriedade foi preterida no DAB 2.0. Em vez disso, use a fields matriz com a alias propriedade. O esquema impõe isso fields e mappings não pode coexistir na mesma entidade.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
objeto | ❌ Não | None |
Habilita aliases personalizados ou nomes expostos para campos de objeto de banco de dados.
Important
Para entidades com GraphQL habilitado, o nome exposto configurado deve atender aos requisitos de nome do GraphQL.
Format
{
"entities": {
"{entity-name}": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Examples
Tabela de banco de dados
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Cache (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
objeto | ❌ Não | None |
Habilita e configura o cache para a entidade.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Não | False |
entities.{entity-name}.cache |
ttl-seconds |
inteiro | ❌ Não | - |
entities.{entity-name}.cache |
level |
enumeração (L1 | L1L2) |
❌ Não | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
A level propriedade controla quais camadas de cache são usadas:
| Valor | Description |
|---|---|
L1 |
Somente cache na memória. Mais rápido, mas não compartilhado entre instâncias. |
L1L2 |
Cache na memória mais cache distribuído (Redis). Compartilhado entre instâncias de expansão. Padrão. |
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.
Note
Quando não especificado, ttl-seconds herda o valor global definido em runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Relações (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
objeto | ❌ Não | None |
Configura como as entidades do GraphQL estão relacionadas a outras entidades expostas. Para obter mais informações, consulte divisão de relações do construtor de API de Dados.
Note
A relationship-name propriedade de cada relação deve ser exclusiva em todas as relações dessa entidade.
Propriedades aninhadas
Essas propriedades são usadas em combinações diferentes dependendo da cardinalidade da relação.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
cadeia | ✔️ Sim | None |
entities.{entity-name}.relationships |
target.entity |
cadeia | ✔️ Sim | None |
entities.{entity-name}.relationships |
target.fields |
Matriz de cadeia de caracteres | ❌ Não | None |
entities.{entity-name}.relationships |
source.fields |
Matriz de cadeia de caracteres | ❌ Não | None |
entities.{entity-name}.relationships |
linking.object |
cadeia | ❌ Não | None |
entities.{entity-name}.relationships |
linking.source.fields |
Matriz de cadeia de caracteres | ❌ Não | None |
entities.{entity-name}.relationships |
linking.target.fields |
Matriz de cadeia de caracteres | ❌ Não | None |
Format
{
"entities": {
"{entity-name}": {
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": "<string>",
"source.fields": ["<string>"],
"target.fields": ["<string>"],
"linking.object": "<string>",
"linking.source.fields": ["<string>"],
"linking.target.fields": ["<string>"]
}
}
}
}
}
| Relationship | Cardinality | Example |
|---|---|---|
| one-to-many | many |
Uma entidade de categoria pode se relacionar com muitas entidades de todo |
| many-to-one | one |
Muitas entidades de todo podem se relacionar com uma entidade de categoria |
| many-to-many | many |
Uma entidade todo pode se relacionar com muitas entidades de usuário e uma entidade de usuário pode se relacionar com várias entidades de todo |
Exemplo: cardinalidade um-para-um
Cada Profile um está relacionado a exatamente um Usere cada User um tem exatamente um relacionado Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Esquema do GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Exemplo: cardinalidade um-para-muitos
Uma Category pode ter uma ou mais entidades relacionadas Book , enquanto cada Book uma pode ter uma relacionada Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Esquema do GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Linha de comando
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Exemplo: cardinalidade muitos para um
Muitas Book entidades podem ter uma relacionada Category, enquanto uma Category pode ter uma ou mais entradas relacionadas Book .
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Esquema do GraphQL
type Book
{
id: Int!
...
category: Category
}
Linha de comando
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Exemplo: cardinalidade muitos para muitos
Muitas Book entidades podem ter muitas entidades relacionadas Author , enquanto muitas Author entidades podem ter muitas entradas relacionadas Book .
Note
Essa relação é possível com uma terceira tabela, dbo.books_authorsque chamamos de objeto de vinculação.
{
"entities": {
"Book": {
"relationships": {
...,
"books_authors": {
"cardinality": "many",
"target.entity": "Author",
"source.fields": [ "id" ],
"target.fields": [ "id" ],
"linking.object": "dbo.books_authors",
"linking.source.fields": [ "book_id" ],
"linking.target.fields": [ "author_id" ]
}
},
"Category": {
...
},
"Author": {
...
}
}
}
}
Esquema do GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Linha de comando
dab update Book \
--relationship books_authors \
--target.entity "Author" \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "book_id" \
--linking.target.fields "author_id"
Integridade (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
objeto | ❌ Não | None |
Habilita e configura verificações de integridade para a entidade.
Propriedades aninhadas
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Não | true |
entities.{entity-name}.health |
first |
inteiro | ❌ Não | 100 |
entities.{entity-name}.health |
threshold-ms |
inteiro | ❌ Não | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
O first valor deve ser menor ou igual à configuração runtime.pagination.max-page-size . Valores menores ajudam as verificações de integridade a serem concluídas mais rapidamente.
Important
Os procedimentos armazenados são automaticamente excluídos das verificações de integridade da entidade porque exigem parâmetros e podem não ser determinísticos.
MCP (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
objeto | ❌ Não | habilitado por padrão quando omitido |
Controla a participação do MCP para a entidade. Quando o MCP é habilitado globalmente, as entidades participam por padrão. Use essa propriedade para recusar ou habilitar ferramentas MCP personalizadas para entidades de procedimento armazenado.
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.
Formato do objeto
Use o formato de objeto para controle granular:
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ Não | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ Não | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Ferramenta personalizada (somente procedimentos armazenados)
Para entidades de procedimento armazenado, defina custom-tool para true registrar o procedimento como uma ferramenta MCP nomeada:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
},
"permissions": [
{
"role": "anonymous",
"actions": ["execute"]
}
]
}
}
}
Important
A custom-tool propriedade só é válida para entidades de procedimento armazenado. Defini-la em uma tabela ou exibir entidade resulta em um erro de configuração.
Exemplos da CLI
dab add Book --source books --permissions "anonymous:*" --mcp.dml-tools true
dab add GetBookById --source dbo.get_book_by_id --source.type stored-procedure --permissions "anonymous:execute" --mcp.custom-tool true