Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Definições de configuração para entidades de banco de dados.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Permite verificações de saúde para a entidade (tanto os endpoints REST como GraphQL) |
entities.entity-name.health.first |
Número de linhas devolvidas na consulta de verificação de saúde (intervalo: 1-500) |
entities.entity-name.health.threshold-ms |
Duração máxima em milissegundos para consulta de verificação de saúde (mínimo: Um) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Descrição legível para humanos da entidade |
Fields
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nome do campo da base 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 chave primária (substitui os campos de chaves) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Tipo de objeto: table, view, ou stored-procedure |
entities.entity-name.source.object |
Nome do objeto de banco de dados |
entities.entity-name.source.object-description |
Descrição legível pelo homem do objeto da base de dados |
entities.entity-name.source.parameters |
Parâmetros para procedimentos armazenados ou funções |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Habilita REST para esta entidade |
entities.entity-name.rest.path |
Rota personalizada para 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 |
Digite o nome 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 esta entidade |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Cadeia de caracteres do nome da função |
entities.entity-name.permissions[].actions |
Um ou mais de: create, read, , update, delete, execute |
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 desta entidade utilizados na relação |
entities.entity-name.relationships.relationship-name.target.fields |
Campos da entidade alvo |
entities.entity-name.relationships.relationship-name.linking.object |
Objeto de junção usado para relacionamentos 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 |
Cache time-to-live em segundos |
entities.entity-name.cache.level |
Nível de cache: L1 (apenas em memória) ou L1L2 (em memória + distribuído) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Objeto que controla a participação do Model Context Protocol (MCP) para a entidade |
entities.entity-name.mcp.dml-tools |
Ativa ou desativa ferramentas de manipulação de linguagem de dados (DML) para a entidade |
entities.entity-name.mcp.custom-tool |
Regista o procedimento armazenado como uma ferramenta MCP nomeada (apenas entidades armazenadas por procedimentos) |
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 |
objecto | ✔️ 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 (de caracteres) | ✔️ Sim | None |
entities.{entity-name}.source |
object-description |
cadeia (de caracteres) | ❌ Não | None |
entities.{entity-name}.source |
type |
enum (table, view, stored-procedure) |
✔️ Sim | None |
entities.{entity-name}.source |
key-fields |
array de strings | ❌ Não* | None |
entities.{entity-name}.source |
parameters |
matriz ou objeto | ❌ Não** | None |
*
key-fields só é necessário quando type é view e o fields array não são usados. O valor representa as chaves primárias.
Advertência
A key-fields propriedade está obsoleta no DAB 2.0. Usa o fields array 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 dado do parâmetro é inferido. Parâmetros sem padrão podem ser omitidos.
object-description é uma descrição opcional legível por humanos do objeto de base de dados subjacente. Este valor é revelado durante a descoberta da ferramenta MCP, ajudando os agentes de IA a compreender o propósito da entidade.
Tip
Se o objeto pertencer ao esquema dbo, especificar o esquema é opcional. Além disso, colchetes em torno de nomes de objetos (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>"
}
]
}
}
}
}
Parâmetros formato de array
No DAB 2.0 preview, parameters suporta um formato de array estruturado com metadados mais ricos. Cada parâmetro é um objeto com as seguintes propriedades:
| Property | Tipo | Required | Description |
|---|---|---|---|
name |
cadeia (de caracteres) | ✔️ Sim | Nome do parâmetro (sem o prefixo @ ) |
required |
boolean | ❌ Não | Se o parâmetro é necessário (true) ou opcional (false) |
default |
any | ❌ Não | Valor padrão usado quando o parâmetro não é fornecido |
description |
cadeia (de caracteres) | ❌ Não | Descrição legível pelo homem do parâmetro |
Exemplo (formato de array — preferido)
{
"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"
}
]
}
}
}
}
Advertência
O formato do dicionário para parameters (por exemplo, { "id": 0 }) está obsoleto no DAB 2.0. Use o formato de array anterior. O formato antigo ainda é aceite para compatibilidade retroativa, mas será removido numa versão futura.
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.
Permissões (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
cadeia (de caracteres) | ✔️ Sim | None |
Especifica o nome do papel ao qual se aplicam as permissões. Use papéis de sistema (Anonymous, Authenticated) ou papéis personalizados definidos no seu fornecedor de identidade.
Tip
Para informações detalhadas sobre avaliação de funções, funções do sistema e o X-MS-API-ROLE cabeçalho, consulte 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 papéis
O DAB 2.0 introduz a herança de funções para permissões de entidade. Quando um papel não está explicitamente configurado para uma entidade, herda permissões de um papel mais amplo usando a seguinte cadeia:
named-role → authenticated → anonymous
- Se
authenticatednão estiver configurado para uma entidade, herda deanonymous. - Se um papel nomeado não estiver configurado, herda de
authenticated, ou deanonymousseauthenticatedtambém estiver ausente.
Isto significa que podes definir permissões uma vez ligado anonymous e que todos os papéis mais amplos têm o mesmo acesso automaticamente, sem necessidade de duplicaçã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.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Com esta configuração, anonymous, authenticated, e qualquer papel nomeado não configurado podem todos ler Book.
dab configure --show-effective-permissions Use para ver as permissões resolvidas para cada entidade após a aplicação da herança.
Ações (string-array Permissions, entidades-nome, entidades)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, matriz] | ✔️ Sim | None |
Uma matriz de cadeia de caracteres detalhando 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 |
* Atualmente, várias operações são suportadas apenas no GraphQL.
Note
Para procedimentos armazenados, a ação curinga (*) se expande para apenas 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 string, quando type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Ações (objeto-matriz, Permissões, entidades-nome, entidades)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
array de strings | ✔️ Sim | None |
Uma matriz de objetos detalhando 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 (de caracteres) | ✔️ Sim | None |
entities.{entity-name}.permissions.actions[] |
fields |
objecto | ❌ Não | None |
entities.{entity-name}.permissions.actions[] |
policy |
objecto | ❌ Não | None |
entities.{entity-name}.permissions.actions[].policy |
database |
cadeia (de caracteres) | ✔️ 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 base de dados filtram os resultados das consultas usando predicados ao estilo OData. Use @item.<field> para referenciar campos de entidade e @claims.<type> para injetar reivindicações autenticadas de utilizadores.
| Aspeto | Detalhes |
|---|---|
| Sintaxe | Predicados OData (eq, ne, and, or, gt, ) lt |
| Referência de campo |
@item.<field> (usar nome mapeado, se aplicável) |
| Referência da reivindicação | @claims.<claimType> |
| Ações suportadas |
read, update, delete |
| Não suportado |
create, execute |
Tip
Para orientações abrangentes sobre políticas de bases de dados, incluindo substituição de reivindicações e resolução de problemas, consulte Configurar políticas de base de dados.
Tipo (entidades de nome de entidade GraphQL)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
objecto | ❌ 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 (de caracteres) | None |
entities.{entity-name}.graphql.type |
plural |
❌ Não | cadeia (de caracteres) | N/D (padrão para o valor singular) |
*
singular é necessário quando type é especificado como objeto. Quando type é uma cadeia simples, essa cadeia é usada como nome singular.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Consulta GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Resposta 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 GraphQL)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
string de enum | ❌ Não | mutation |
Designa se a stored-procedure operação aparece sob o Query ou Mutation.
Note
Quando {entity-name}.type é definido como stored-procedure, uma nova executeXXX tipo GraphQL é criada automaticamente. Esta operation propriedade controla onde esse tipo é colocado no esquema GraphQL. Não há impacto funcional, apenas higiene do esquema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Exemplo: operação
Quando operation está definido como query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Quando operation está definido como mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Ativado (entidades de nome de entidade 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 (de caracteres) | ❌ Não | /{entity-name} |
entities.{entity-name}.rest |
methods |
array de strings | ❌ Não* | POST |
* A methods propriedade é apenas para stored-procedure endpoints.
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.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Descrição (entidades com nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
cadeia (de caracteres) | ❌ Não | None |
Uma descrição opcional legível por humanos da entidade. Este valor é apresentado na documentação gerada da API e como comentário no esquema GraphQL.
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.
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 com nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
matriz | ❌ Não | None |
Define metadados para campos individuais da base de dados, incluindo aliases, descrições e designações de chaves primárias. O fields array substitui tanto mappings (através da alias propriedade) como source.key-fields (através da propriedade primary-key ) numa única estrutura unificada.
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 |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
cadeia (de caracteres) | ✔️ Sim | None |
entities.{entity-name}.fields[] |
alias |
cadeia (de caracteres) | ❌ Não | None |
entities.{entity-name}.fields[] |
description |
cadeia (de caracteres) | ❌ 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 é designado como a chave primária (substituindo a necessidade de source.key-fields), enquanto sku_title e sku_status são aliasados 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 sobre a mesma entidade. Migre para fields e remova as propriedades obsoletas.
Mapeamentos (entidades de nome de entidade)
Advertência
A mappings propriedade está obsoleta no DAB 2.0. Use o fields array com a alias propriedade em vez disso. O esquema impõe isso fields e mappings não pode coexistir na mesma entidade.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
objecto | ❌ Não | None |
Habilita aliases personalizados, ou nomes expostos, para campos de objeto de banco de dados.
Important
Para entidades com o 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 |
objecto | ❌ 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 |
número inteiro | ❌ Não | - |
entities.{entity-name}.cache |
level |
enum (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 os níveis de cache utilizados:
| Valor | Description |
|---|---|
L1 |
Apenas cache em memória. O mais rápido, mas não é partilhado entre instâncias. |
L1L2 |
Cache em memória mais cache distribuída (Redis). Partilhado entre instâncias em escala reduzida. Predefiniçã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.
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 |
objecto | ❌ Não | None |
Configura como as entidades GraphQL estão relacionadas a outras entidades expostas. Para obter mais informações, consulte detalhamento de relações do construtor de API de dados.
Note
A relationship-name propriedade de cada relacionamento deve ser exclusiva em todos os relacionamentos dessa entidade.
Propriedades aninhadas
Estas propriedades são usadas em diferentes combinações, dependendo da cardinalidade da relação.
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
cadeia (de caracteres) | ✔️ Sim | None |
entities.{entity-name}.relationships |
target.entity |
cadeia (de caracteres) | ✔️ Sim | None |
entities.{entity-name}.relationships |
target.fields |
array de strings | ❌ Não | None |
entities.{entity-name}.relationships |
source.fields |
array de strings | ❌ Não | None |
entities.{entity-name}.relationships |
linking.object |
cadeia (de caracteres) | ❌ Não | None |
entities.{entity-name}.relationships |
linking.source.fields |
array de strings | ❌ Não | None |
entities.{entity-name}.relationships |
linking.target.fields |
array de strings | ❌ 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 estar relacionada a muitas entidades de todo |
| many-to-one | one |
Muitas entidades todo podem se relacionar a uma entidade de categoria |
| many-to-many | many |
Uma entidade todo pode se relacionar a muitas entidades de usuário e uma entidade de usuário pode se relacionar a muitas entidades de todo |
Exemplo: cardinalidade um-para-um
Cada Profile um está relacionado a exatamente um User, e 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 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
A Category pode ter uma ou mais entidades relacionadas Book , enquanto cada Book uma pode ter uma entidade relacionada Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Esquema GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Linha de comandos
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 entrada 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 GraphQL
type Book
{
id: Int!
...
category: Category
}
Linha de comandos
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 ligaçã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 GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Linha de comandos
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"
Saúde (entidades de nome de entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
objecto | ❌ 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 |
número inteiro | ❌ Não | 100 |
entities.{entity-name}.health |
threshold-ms |
número inteiro | ❌ Não | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
O first valor deve ser inferior ou igual à runtime.pagination.max-page-size definição. Valores mais pequenos ajudam as verificações de saúde a serem concluídas mais rapidamente.
Important
Os procedimentos armazenados são automaticamente excluídos das verificações de saúde da entidade porque requerem parâmetros e podem não ser determinísticos.
MCP (entidades nome-entidade)
| Parent | Property | Tipo | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
objecto | ❌ Não | ativado por defeito quando omitido |
Controla a participação no MCP para a entidade. Quando o MCP está ativado globalmente, as entidades participam por defeito. Use esta propriedade para optar por não participar ou para ativar ferramentas MCP personalizadas para entidades de procedimentos armazenados.
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.
Formato de objeto
Use o formato do objeto para controlo 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 (apenas procedimentos armazenados)
Para entidades de procedimento armazenado, defina custom-tool para true registar 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 é válida apenas para entidades de procedimento armazenado. Defini-lo numa tabela ou entidade de visualização resulta num erro de configuração.
Exemplos de 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