Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ustawienia konfiguracji dla jednostek bazy danych.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Włącza sprawdzanie kondycji jednostki (zarówno punktów końcowych REST, jak i GraphQL) |
entities.entity-name.health.first |
Liczba wierszy zwracanych w zapytaniu sprawdzania kondycji (zakres: 1–500) |
entities.entity-name.health.threshold-ms |
Maksymalny czas trwania w milisekundach dla zapytania sprawdzania kondycji (min: jeden) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Czytelny dla człowieka opis jednostki |
Pola formularza
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nazwa pola bazy danych (wymagana) |
entities.entity-name.fields[].alias |
Nazwa uwidoczniona przez interfejs API (zastępuje mapowania) |
entities.entity-name.fields[].description |
Opis pola czytelnego dla człowieka |
entities.entity-name.fields[].primary-key |
Oznacza pole jako klucz podstawowy (zastępuje pola klucz-klucz) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Typ obiektu: table, lub viewstored-procedure |
entities.entity-name.source.object |
Nazwa obiektu bazy danych |
entities.entity-name.source.object-description |
Czytelny dla człowieka opis obiektu bazy danych |
entities.entity-name.source.parameters |
Parametry procedur składowanych lub funkcji |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Włącza interfejs REST dla tej jednostki |
entities.entity-name.rest.path |
Trasa niestandardowa dla punktu końcowego REST |
entities.entity-name.rest.methods |
Dozwolone metody REST: get, , postput, , patchdelete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Nazwa typu lub obiekt z elementami singular i plural |
entities.entity-name.graphql.operation |
Typ operacji: query lub mutation |
entities.entity-name.graphql.enabled |
Włącza narzędzie GraphQL dla tej jednostki |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Ciąg nazwy roli |
entities.entity-name.permissions[].actions |
Co najmniej jedna z nich: create, , readupdate, , deleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one lub many |
entities.entity-name.relationships.relationship-name.target.entity |
Nazwa jednostki docelowej |
entities.entity-name.relationships.relationship-name.source.fields |
Pola z tej jednostki używane w relacji |
entities.entity-name.relationships.relationship-name.target.fields |
Pola z jednostki docelowej |
entities.entity-name.relationships.relationship-name.linking.object |
Sprzężenie obiektu używanego w relacjach wiele-do-wielu |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Pola z jednostki źródłowej używanej w sprzężeniach |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Pola z jednostki docelowej używanej w sprzężeniach |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Włącza buforowanie odpowiedzi dla jednostki |
entities.entity-name.cache.ttl-seconds |
Czas wygaśnięcia pamięci podręcznej w sekundach |
entities.entity-name.cache.level |
Poziom pamięci podręcznej: L1 (tylko w pamięci) lub L1L2 (w pamięci + rozproszone) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Obiekt, który kontroluje udział protokołu MCP (Model Context Protocol) dla jednostki |
entities.entity-name.mcp.dml-tools |
Włącza lub wyłącza narzędzia języka manipulowania danymi (DML) dla jednostki |
entities.entity-name.mcp.custom-tool |
Rejestruje procedurę składowaną jako nazwane narzędzie MCP (tylko jednostki procedury składowanej) |
Omówienie formatu
{
"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
}
}
}
}
Źródło (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
obiekt | ✔️ Tak | None |
Szczegóły źródła bazy danych jednostki.
Właściwości zagnieżdżone
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
ciąg | ✔️ Tak | None |
entities.{entity-name}.source |
object-description |
ciąg | ❌ Nie | None |
entities.{entity-name}.source |
type |
wyliczenie (table, view, stored-procedure) |
✔️ Tak | None |
entities.{entity-name}.source |
key-fields |
tablica ciągów | ❌ Nie* | None |
entities.{entity-name}.source |
parameters |
tablica lub obiekt | ❌ Nr** | None |
*
key-fields jest wymagany tylko wtedy, gdy type jest view i tablica fields nie jest używana. Wartość reprezentuje klucze podstawowe.
Ostrzeżenie
Właściwość key-fields jest przestarzała w języku DAB 2.0.
fields Zamiast tego użyj tablicyprimary-key: true. Schemat wymusza to fields i key-fields nie może współistnieć w tej samej jednostce.
**
parameters parametr jest wymagany tylko wtedy, gdy type parametr jest stored-procedure i tylko dla parametrów z wartościami domyślnymi. Typ danych parametru jest wnioskowany. Parametry bez wartości domyślnej można pominąć.
object-description jest opcjonalnym czytelnym dla człowieka opisem bazowego obiektu bazy danych. Ta wartość jest zwracana podczas odnajdywania narzędzi MCP, pomagając agentom sztucznej inteligencji zrozumieć przeznaczenie jednostki.
Tip
Jeśli obiekt należy do schematu dbo, określenie schematu jest opcjonalne. Ponadto nawiasy kwadratowe wokół nazw obiektów (na przykład dbo.Users vs. [dbo].[Users]) mogą być używane w razie potrzeby.
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>"
}
]
}
}
}
}
Format tablicy parametrów
W wersji zapoznawczej parameters języka DAB 2.0 obsługuje format tablicy ustrukturyzowanej z bardziej zaawansowanymi metadanymi. Każdy parametr jest obiektem o następujących właściwościach:
| Property | Typ | Required | Description |
|---|---|---|---|
name |
ciąg | ✔️ Tak | Nazwa parametru (bez prefiksu @ ) |
required |
boolean | ❌ Nie | Czy parametr jest wymagany (true) lub opcjonalny (false) |
default |
any | ❌ Nie | Wartość domyślna używana, gdy parametr nie jest podany |
description |
ciąg | ❌ Nie | Czytelny dla człowieka opis parametru |
Przykład (format tablicy — preferowany)
{
"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"
}
]
}
}
}
}
Ostrzeżenie
Format słownika dla parameters (na przykład { "id": 0 }) jest przestarzały w języku DAB 2.0. Użyj poprzedniego formatu tablicy. Stary format jest nadal akceptowany w celu zapewnienia zgodności z poprzednimi wersjami, ale zostanie usunięty w przyszłej wersji.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Uprawnienia (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
ciąg | ✔️ Tak | None |
Określa nazwę roli, do której mają zastosowanie uprawnienia. Użyj ról systemowych (Anonymous, Authenticated) lub ról niestandardowych zdefiniowanych w dostawcy tożsamości.
Tip
Aby uzyskać szczegółowe informacje na temat oceny ról, ról systemowych i nagłówka X-MS-API-ROLE , zobacz Omówienie autoryzacji.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Dziedziczenie roli
Język DAB 2.0 wprowadza dziedziczenie ról dla uprawnień jednostki. Gdy rola nie jest jawnie skonfigurowana dla jednostki, dziedziczy uprawnienia z szerszej roli przy użyciu następującego łańcucha:
named-role → authenticated → anonymous
- Jeśli
authenticatedjednostka nie jest skonfigurowana, dziedziczy ją zanonymousklasy . - Jeśli nazwana rola nie jest skonfigurowana, dziedziczy ją z
authenticatedelementu lub,anonymousjeśliauthenticatedjest również nieobecna.
Oznacza to, że można definiować uprawnienia raz na i anonymous każda szersza rola automatycznie uzyskuje ten sam dostęp bez konieczności duplikowania.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
W przypadku tej konfiguracji, anonymous, authenticatedi wszystkie nieskonfigurowane nazwane role mogą odczytywać Bookwszystkie . Użyj dab configure --show-effective-permissions polecenia , aby wyświetlić rozwiązane uprawnienia dla każdej jednostki po zastosowaniu dziedziczenia.
Akcje (string-array Permissions entity-name entities)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [ciąg, tablica] | ✔️ Tak | None |
Tablica ciągów szczegółowo określa, jakie operacje są dozwolone dla skojarzonej roli.
| Action | Operacja SQL |
|---|---|
* |
Wszystkie akcje |
create |
Wstaw co najmniej jeden wiersz* |
read |
Wybierz co najmniej jeden wiersz |
update |
Modyfikowanie co najmniej jednego wiersza* |
delete |
Usuwanie co najmniej jednego wiersza* |
execute |
Uruchamia procedurę składowaną |
* Wiele operacji jest obecnie obsługiwanych tylko w narzędziu GraphQL.
Note
W przypadku procedur składowanych akcja wieloznaczny (*) rozszerza się tylko do akcji execute. W przypadku tabel i widoków rozszerza się na create, read, updatei delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Format alternatywny (tylko ciąg, gdy type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Akcje (jednostki uprawnień tablicy obiektów)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
tablica ciągów | ✔️ Tak | None |
Tablica obiektów szczegółowo określa, jakie operacje są dozwolone dla skojarzonej roli.
Note
W przypadku procedur składowanych akcja wieloznaczny (*) rozszerza się tylko na execute. W przypadku tabel/widoków rozszerza się na create, read, updatei delete.
Właściwości zagnieżdżone
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
ciąg | ✔️ Tak | None |
entities.{entity-name}.permissions.actions[] |
fields |
obiekt | ❌ Nie | None |
entities.{entity-name}.permissions.actions[] |
policy |
obiekt | ❌ Nie | None |
entities.{entity-name}.permissions.actions[].policy |
database |
ciąg | ✔️ Tak | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
To uprawnienie do read uprawnień do auditorUser jednostki z ograniczeniami pól i zasad.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Uwagi dotyczące zasad
Zasady bazy danych filtrują wyniki zapytań przy użyciu predykatów w stylu OData. Służy @item.<field> do odwołowania się do pól jednostki i @claims.<type> do wstrzykiwania uwierzytelnionych oświadczeń użytkowników.
| Aspekt | Szczegóły |
|---|---|
| Składnia | Predykaty OData (eq, ne, and, or, gt, ) lt |
| Odwołanie do pola |
@item.<field> (użyj nazwy mapowanej, jeśli ma to zastosowanie) |
| Odwołanie do oświadczenia | @claims.<claimType> |
| Obsługiwane akcje |
read, updatedelete |
| Niewspierane |
create, execute |
Tip
Aby uzyskać kompleksowe wskazówki dotyczące zasad bazy danych, w tym podstawiania oświadczeń i rozwiązywania problemów, zobacz Konfigurowanie zasad bazy danych.
Typ (jednostki jednostki GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
obiekt | ❌ Nie | {entity-name} |
Ustawia konwencję nazewnictwa dla jednostki w schemacie GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Właściwości zagnieżdżone
| Parent | Property | Required | Typ | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Tak* | ciąg | None |
entities.{entity-name}.graphql.type |
plural |
❌ Nie | ciąg | N/A (domyślnie wartość pojedyncza) |
*
singular jest wymagany, gdy type jest określony jako obiekt. Gdy type jest to zwykły ciąg, ten ciąg jest używany jako nazwa pojedyncza.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Zapytanie GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Odpowiedź graphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operacja (jednostki nazwy jednostki GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
ciąg wyliczenia | ❌ Nie | mutation |
Określa, stored-procedure czy operacja jest wyświetlana pod elementem Query lub Mutation.
Note
Po ustawieniu {entity-name}.type na stored-procedurezostanie automatycznie utworzony nowy typ graphQL executeXXX. Ta operation właściwość steruje miejscem, w którym ten typ jest umieszczany w schemacie GraphQL. Nie ma żadnego wpływu funkcjonalnego, tylko higieny schematu.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Przykład: operacja
Gdy operation jest ustawiona wartość query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Gdy operation jest ustawiona wartość mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Włączone (jednostki nazwy jednostki GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Nie | True |
Umożliwia deweloperom selektywne dołączanie jednostek do schematu GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Nie | True |
entities.rest |
path |
ciąg | ❌ Nie | /{entity-name} |
entities.{entity-name}.rest |
methods |
tablica ciągów | ❌ Nie* | POST |
* Właściwość methods dotyczy tylko stored-procedure punktów końcowych.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Opis (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
ciąg | ❌ Nie | None |
Opcjonalny czytelny dla człowieka opis jednostki. Ta wartość jest dostępna w wygenerowanej dokumentacji interfejsu API i jako komentarz w schemacie GraphQL.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 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"
}
}
}
}
Pola (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
macierz | ❌ Nie | None |
Definiuje metadane dla poszczególnych pól bazy danych, w tym aliasy, opisy i oznaczenia klucza podstawowego. Tablica fields zastępuje zarówno mappings (za pośrednictwem alias właściwości), jak i source.key-fields (za pośrednictwem primary-key właściwości) w pojedynczej, ujednoliconej strukturze.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Właściwości zagnieżdżone
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
ciąg | ✔️ Tak | None |
entities.{entity-name}.fields[] |
alias |
ciąg | ❌ Nie | None |
entities.{entity-name}.fields[] |
description |
ciąg | ❌ Nie | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ Nie | 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"
}
]
}
}
}
W tym przykładzie id jest wyznaczony jako klucz podstawowy (zastępując potrzebę source.key-fields), a sku_title element i sku_status są aliasami jako title i status (zastępując potrzebę ).mappings
Important
Schemat wymusza, że fields nie może współistnieć z tą samą jednostką mappings lub source.key-fields w tej samej jednostce. Przeprowadź migrację do fields i usuń przestarzałe właściwości.
Mapowania (jednostki o nazwie jednostki)
Ostrzeżenie
Właściwość mappings jest przestarzała w języku DAB 2.0.
fields Zamiast tego użyj tablicy z właściwością alias . Schemat wymusza to fields i mappings nie może współistnieć w tej samej jednostce.
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
obiekt | ❌ Nie | None |
Włącza niestandardowe aliasy lub uwidocznione nazwy dla pól obiektów bazy danych.
Important
W przypadku jednostek z włączonym językiem GraphQL skonfigurowana nazwa uwidoczniona musi spełniać wymagania dotyczące nazwy 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 bazy danych
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Pamięć podręczna (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
obiekt | ❌ Nie | None |
Włącza i konfiguruje buforowanie dla jednostki.
Właściwości zagnieżdżone
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Nie | False |
entities.{entity-name}.cache |
ttl-seconds |
liczba całkowita | ❌ Nie | - |
entities.{entity-name}.cache |
level |
wyliczenie (L1 | L1L2) |
❌ Nie | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
Właściwość level steruje warstwami pamięci podręcznej:
| Wartość | Description |
|---|---|
L1 |
Tylko pamięć podręczna w pamięci. Najszybsze, ale nie współużytkowane między wystąpieniami. |
L1L2 |
Pamięć podręczna w pamięci oraz rozproszona pamięć podręczna (Redis). Współużytkowane w wystąpieniach skalowanych w poziomie. Wartość domyślna. |
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Note
Jeśli nie zostanie określony, ttl-seconds dziedziczy wartość globalną ustawioną w obszarze runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Relacje (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
obiekt | ❌ Nie | None |
Konfiguruje sposób, w jaki jednostki GraphQL są powiązane z innymi uwidocznionych jednostkami. Aby uzyskać więcej informacji, zobacz Podział relacji konstruktora interfejsu API danych.
Note
Właściwość relationship-name dla każdej relacji musi być unikatowa we wszystkich relacjach dla tej jednostki.
Właściwości zagnieżdżone
Te właściwości są używane w różnych kombinacjach w zależności od kardynalności relacji.
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
ciąg | ✔️ Tak | None |
entities.{entity-name}.relationships |
target.entity |
ciąg | ✔️ Tak | None |
entities.{entity-name}.relationships |
target.fields |
tablica ciągów | ❌ Nie | None |
entities.{entity-name}.relationships |
source.fields |
tablica ciągów | ❌ Nie | None |
entities.{entity-name}.relationships |
linking.object |
ciąg | ❌ Nie | None |
entities.{entity-name}.relationships |
linking.source.fields |
tablica ciągów | ❌ Nie | None |
entities.{entity-name}.relationships |
linking.target.fields |
tablica ciągów | ❌ Nie | 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 |
Jedna jednostka kategorii może odnosić się do wielu jednostek zadań do wykonania |
| many-to-one | one |
Wiele jednostek zadań do wykonania może odnosić się do jednej jednostki kategorii |
| many-to-many | many |
Jedna jednostka zadań do wykonania może odnosić się do wielu jednostek użytkowników, a jedna jednostka użytkownika może odnosić się do wielu jednostek zadań do wykonania |
Przykład: kardynalność jeden do jednego
Każda z nich jest powiązana z dokładnie jedną Profilewartością , a każda User z nich User ma dokładnie jeden powiązany element Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Schemat GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Przykład: kardynalność jeden do wielu
Element Category może mieć co najmniej jedną powiązaną Book jednostkę, a każda z nich Book może mieć jeden powiązany element Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Schemat GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Wiersz polecenia
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Przykład: kardynalność wiele-do-jednego
Wiele Book jednostek może mieć jeden powiązany Categoryelement , a element Category może zawierać co najmniej jeden powiązany Book wpis.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Schemat GraphQL
type Book
{
id: Int!
...
category: Category
}
Wiersz polecenia
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Przykład: kardynalność wiele-do-wielu
Wiele Book jednostek może mieć wiele powiązanych Author jednostek, podczas gdy wiele Author jednostek może mieć wiele powiązanych Book wpisów.
Note
Ta relacja jest możliwa w przypadku trzeciej tabeli , dbo.books_authorsktóra jest nazywana obiektem łączenia.
{
"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": {
...
}
}
}
}
Schemat GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Wiersz polecenia
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"
Kondycja (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
obiekt | ❌ Nie | None |
Włącza i konfiguruje kontrole kondycji dla jednostki.
Właściwości zagnieżdżone
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Nie | true |
entities.{entity-name}.health |
first |
liczba całkowita | ❌ Nie | 100 |
entities.{entity-name}.health |
threshold-ms |
liczba całkowita | ❌ Nie | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Wartość first musi być mniejsza lub równa ustawieniu runtime.pagination.max-page-size . Mniejsze wartości ułatwiają szybsze sprawdzanie kondycji.
Important
Procedury składowane są automatycznie wykluczane z kontroli kondycji jednostki, ponieważ wymagają parametrów i mogą nie być deterministyczne.
MCP (jednostki o nazwie jednostki)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
obiekt | ❌ Nie | włączone domyślnie po pominięciu |
Kontroluje udział MCP w jednostce. Gdy mcP jest włączona globalnie, jednostki uczestniczą domyślnie. Użyj tej właściwości, aby zrezygnować lub włączyć niestandardowe narzędzia MCP dla jednostek procedur składowanej.
Note
Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Format obiektu
Użyj formatu obiektu w celu uzyskania szczegółowej kontrolki:
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ Nie | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ Nie | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Narzędzie niestandardowe (tylko procedury składowane)
W przypadku jednostek procedury składowanej ustaw wartość custom-tool na , aby true zarejestrować procedurę jako nazwane narzędzie MCP:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
},
"permissions": [
{
"role": "anonymous",
"actions": ["execute"]
}
]
}
}
}
Important
Właściwość jest prawidłowa custom-tool tylko dla jednostek procedury składowanej. Ustawienie go w tabeli lub w widoku jednostki powoduje błąd konfiguracji.
Przykłady interfejsu wiersza polecenia
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