Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nastavení konfigurace pro databázové entity
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Povolí kontroly stavu pro entitu (koncové body REST i GraphQL). |
entities.entity-name.health.first |
Počet řádků vrácených v dotazu kontroly stavu (rozsah: 1–500) |
entities.entity-name.health.threshold-ms |
Maximální doba trvání v milisekundách pro dotaz kontroly stavu (min: 1) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Typ objektu: table, viewnebo stored-procedure |
entities.entity-name.source.object |
Název databázového objektu |
entities.entity-name.source.parameters |
Parametry uložených procedur nebo funkcí |
entities.entity-name.source.key-fields |
Seznam polí primárního klíče pro zobrazení |
entities.entity-name.mappings |
Mapuje názvy polí rozhraní API na databázové sloupce. |
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Povolí rest pro tuto entitu. |
entities.entity-name.rest.path |
Vlastní trasa pro koncový bod REST |
entities.entity-name.rest.methods |
Povolené metody REST: get, post, putpatch,delete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Zadejte název nebo objekt s singularplural |
entities.entity-name.graphql.operation |
Typ operace: query nebo mutation |
entities.entity-name.graphql.enabled |
Povolí pro tuto entitu GraphQL. |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Řetězec názvu role |
entities.entity-name.permissions[].actions |
Jeden nebo více z: create, read, update, deleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one nebo many |
entities.entity-name.relationships.relationship-name.target.entity |
Název cílové entity |
entities.entity-name.relationships.relationship-name.source.fields |
Pole z této entity použité v relaci |
entities.entity-name.relationships.relationship-name.target.fields |
Pole z cílové entity |
entities.entity-name.relationships.relationship-name.linking.object |
Objekt spojení použitý pro relace M:N |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Pole ze zdrojové entity použité ve spojení |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Pole z cílové entity použité při spojení |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Povolí ukládání odpovědí do mezipaměti pro entitu. |
entities.entity-name.cache.ttl-seconds |
Ukládání do mezipaměti v sekundách |
Přehled formátu
{
"entities": {
"{entity-name}": {
"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>,
"type": "view" | "stored-procedure" | "table",
"key-fields": [<string>], // primary keys for the view
"parameters": { // only for stored-procedure
"<parameter-name>": <default-value>,
"<parameter-name>": <default-value>
}
},
"mappings": {
"<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>
}
}
]
}
}
}
Zdroj (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
objekt | ✔️ Ano | None |
Podrobnosti o zdroji databáze entity.
Vnořené vlastnosti
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
řetězec | ✔️ Ano | None |
entities.{entity-name}.source |
type |
enum (table, view, stored-procedure) |
✔️ Ano | None |
entities.{entity-name}.source |
key-fields |
Řetězcové pole | ✔️ Ano* | None |
entities.{entity-name}.source |
parameters |
objekt | ✔️ Ano** | None |
-
key-fieldsje vyžadována pouze v případě, žetypejeview. Hodnota představuje primární klíče.
**
parameters je vyžadován pouze v případě, že type jsou stored-procedure parametry s výchozími hodnotami a pouze pro parametry. Datový typ parametru je odvozen. Parametry bez výchozího nastavení je možné vynechat.
Tip
Pokud objekt patří do schématu dbo, je zadání schématu volitelné. Hranaté závorky kolem názvů objektů (například dbo.Users vs. [dbo].[Users]) lze použít v případě potřeby.
Format
{
"entities": {
"{entity-name}": {
"source": {
"object": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": [ <string> ], // primary keys of the view
"parameters": { // only for option stored-procedure parameters
"<parameter-name-1>": <default-value>
"<parameter-name-2>": <default-value>
}
}
}
}
}
Oprávnění (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
řetězec | ✔️ Ano | None |
Řetězec určující název role, na kterou se vztahují oprávnění.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"anonymous" | "authenticated" | "custom-role">
}
]
}
}
}
Example
Tento příklad definuje roli custom-role pouze read s oprávněními k entitě User .
{
"entities": {
"User": {
"permissions": [
{
"role": "custom-role",
"actions": ["read"]
}
]
}
}
}
Příklady použití
GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role
Akce (entity s oprávněními pro pole řetězců)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [řetězec, pole] | ✔️ Ano | None |
Pole řetězců s podrobnostmi o tom, jaké operace jsou pro přidruženou roli povolené.
| Action | Operace SQL |
|---|---|
* |
Všechny akce |
create |
Vložení jednoho nebo více řádků* |
read |
Výběr jednoho nebo více řádků |
update |
Úprava jednoho nebo více řádků* |
delete |
Odstranění jednoho nebo více řádků* |
execute |
Spustí uloženou proceduru. |
* V GraphQL je aktuálně podporováno více operací.
Note
U uložených procedur se akce se zástupným znakem (*) rozbalí pouze na akci execute. Pro tabulky a zobrazení se rozbalí na create, read, updatea delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Alternativní formát (pouze řetězec, pokud type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Akce (entity s názvem entity oprávnění pole objektů)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
Řetězcové pole | ✔️ Ano | None |
Pole objektů s podrobnostmi o tom, jaké operace jsou pro přidruženou roli povolené.
Note
U uložených procedur se akce se zástupným znakem (*) rozbalí pouze na execute. Pro tabulky a zobrazení se rozbalí na create, read, updatea delete.
Vnořené vlastnosti
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
řetězec | ✔️ Ano | None |
entities.{entity-name}.permissions.actions[] |
fields |
objekt | ❌ Ne | None |
entities.{entity-name}.permissions.actions[] |
policy |
objekt | ❌ Ne | None |
entities.{entity-name}.permissions.actions[].policy |
database |
řetězec | ✔️ Ano | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Tím se udělí read oprávnění k auditor entitě User s omezeními polí a zásad.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Poznámky k zásadám
- Zásady podporují operátory OData, jako je
eq. - Zásady podporují složené predikáty používající
andaor. - Podporováno pouze pro akce:
create,read,updateadelete. (Neexecute) - Zásady filtruje výsledky, ale nezabrání provádění dotazů v databázi.
- Pole musí používat alias pole, pokud je namapováno.
Typ (entity s názvem entity GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
objekt | ❌ Ne | {entity-name} |
Nastaví konvenci vytváření názvů pro entitu ve schématu GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Vnořené vlastnosti
| Parent | Property | Required | Typ | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
❌ Ne | řetězec | None |
entities.{entity-name}.graphql.type |
plural |
❌ Ne | řetězec | Není k dispozici (výchozí hodnota je singulární hodnota) |
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Dotaz GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Odpověď GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operace (entity s názvem entity GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
enum string | ❌ Ne | mutation |
Určuje, zda se stored-procedure operace zobrazí pod položkou Query nebo Mutation.
Note
Pokud {entity-name}.type je nastavená hodnota stored-procedure, automaticky se vytvoří nový typ executeXXX GraphQL. Tato operation vlastnost určuje, kde je tento typ umístěn ve schématu GraphQL. Není žádný funkční dopad, jen hygiena schématu.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Příklad: operace
Kdy operation je nastavená hodnota query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Kdy operation je nastavená hodnota mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Povoleno (entity s názvem entity GraphQL)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Ne | True |
Umožňuje vývojářům selektivně zahrnout entity do schématu GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Ne | True |
entities.rest |
path |
řetězec | ❌ Ne | /{entity-name} |
entities.{entity-name}.rest |
methods |
Řetězcové pole | ❌ Ne* | POST |
* Vlastnost methods je určena pouze pro stored-procedure koncové body.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Mapování (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
objekt | ❌ Ne | None |
Povolí pro pole databázových objektů vlastní aliasy nebo vystavené názvy.
Important
U entit s povoleným GraphQL musí nakonfigurovaný vystavený název splňovat požadavky na název 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
Tabulka databáze
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Mezipaměť (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
objekt | ❌ Ne | None |
Povolí a nakonfiguruje ukládání do mezipaměti pro entitu.
Vnořené vlastnosti
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Ne | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Ne | - |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>
}
}
}
}
Note
Pokud nezadáte, ttl-seconds zdědí globální hodnotu nastavenou v části runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
}
Relace (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
objekt | ❌ Ne | None |
Konfiguruje, jak entity GraphQL souvisejí s dalšími vystavené entitami. Další informace najdete v tématu rozpis relací tvůrce rozhraní Data API.
Note
Vlastnost relationship-name pro každou relaci musí být pro každou entitu jedinečná.
Vnořené vlastnosti
Tyto vlastnosti se používají v různých kombinacích v závislosti na kardinalitě relace.
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
řetězec | ✔️ Ano | None |
entities.{entity-name}.relationships |
target.entity |
řetězec | ✔️ Ano | None |
entities.{entity-name}.relationships |
target.fields |
Řetězcové pole | ❌ Ne | None |
entities.{entity-name}.relationships |
source.fields |
Řetězcové pole | ❌ Ne | None |
entities.{entity-name}.relationships |
linking.object |
řetězec | ❌ Ne | None |
entities.{entity-name}.relationships |
linking.source.fields |
Řetězcové pole | ❌ Ne | None |
entities.{entity-name}.relationships |
linking.target.fields |
Řetězcové pole | ❌ Ne | 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 entita kategorie může souviset s mnoha entitami úkolů. |
| many-to-one | one |
Mnoho entit úkolů může souviset s jednou entitou kategorie. |
| many-to-many | many |
Jedna entita úkolů může souviset s mnoha entitami uživatelů a jedna entita uživatele může souviset s mnoha entitami úkolů. |
Příklad: Kardinalita 1:1
Každý Profile souvisí s přesně jedním Usera každý User má přesně jeden související Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Schéma GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Příklad: Kardinalita 1:N
A Category může mít jednu nebo více souvisejících Book entit, zatímco každá z nich Book může mít jednu související Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Schéma GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Příkazový řádek
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Příklad: Kardinalita M:1
Mnoho Book entit může mít jednu související Category, zatímco Category může mít jednu nebo více souvisejících Book položek.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Schéma GraphQL
type Book
{
id: Int!
...
category: Category
}
Příkazový řádek
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Příklad: Kardinalita M:N
Mnoho Book entit může mít mnoho souvisejících Author entit, zatímco mnoho Author entit může mít mnoho souvisejících Book položek.
Note
Tato relace je možná s třetí tabulkou, dbo.books_authorskterou označujeme jako odkazující objekt.
{
"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": {
...
}
}
}
}
Schéma GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Příkazový řádek
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"
Stav (entity s názvem entity)
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
objekt | ❌ Ne | None |
Povolí a nakonfiguruje kontroly stavu pro entitu.
Vnořené vlastnosti
| Parent | Property | Typ | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Ne | true |
entities.{entity-name}.health |
first |
integer | ❌ Ne | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Ne | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Hodnota first musí být menší nebo rovna runtime.pagination.max-page-size nastavení. Menší hodnoty pomáhají rychleji provádět kontroly stavu.
Important
Uložené procedury jsou automaticky vyloučeny z kontrol stavu entit, protože vyžadují parametry a nemusí být deterministické.