Udostępnij za pośrednictwem


Entities

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 Lista pól klucza podstawowego dla widoków (przestarzałe)
entities.entity-name.mappings Mapuje nazwy pól interfejsu API na kolumny bazy danych (przestarzałe)

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 authenticated jednostka nie jest skonfigurowana, dziedziczy ją z anonymousklasy .
  • Jeśli nazwana rola nie jest skonfigurowana, dziedziczy ją z authenticatedelementu lub, anonymous jeśli authenticated jest 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