Megosztás a következőn keresztül:


Entities

Adatbázis-entitások konfigurációs beállításai.

Health

Property Description
entities.entity-name.health.enabled Engedélyezi az entitás állapot-ellenőrzését (REST- és GraphQL-végpontok egyaránt)
entities.entity-name.health.first Az állapot-ellenőrző lekérdezésben visszaadott sorok száma (tartomány: 1–500)
entities.entity-name.health.threshold-ms Állapot-ellenőrzési lekérdezés maximális időtartama ezredmásodpercben (min: 1)

Source

Property Description
entities.entity-name.source.type Objektumtípus: table, viewvagy stored-procedure
entities.entity-name.source.object Az adatbázis-objektum neve
entities.entity-name.source.parameters Tárolt eljárások vagy függvények paraméterei
entities.entity-name.source.key-fields A nézetek elsődleges kulcsmezőinek listája
entities.entity-name.mappings API-mezőnevek leképezése adatbázisoszlopok számára

REST

Property Description
entities.entity-name.rest.enabled REST engedélyezése ehhez az entitáshoz
entities.entity-name.rest.path Egyéni útvonal REST-végponthoz
entities.entity-name.rest.methods Engedélyezett REST-metódusok: get, post, put, patchdelete

GraphQL

Property Description
entities.entity-name.graphql.type Írja be a nevet vagy objektumot a singularplural
entities.entity-name.graphql.operation Művelet típusa: query vagy mutation
entities.entity-name.graphql.enabled Engedélyezi a GraphQL-t ehhez az entitáshoz

Permissions

Property Description
entities.entity-name.permissions[].role Szerepkörnév sztringje
entities.entity-name.permissions[].actions Egy vagy több: create, read, update, deleteexecute

Relationships

Property Description
entities.entity-name.relationships.relationship-name.cardinality one vagy many
entities.entity-name.relationships.relationship-name.target.entity A cél entitás neve
entities.entity-name.relationships.relationship-name.source.fields A kapcsolatban használt entitás mezői
entities.entity-name.relationships.relationship-name.target.fields Mezők a cél entitásból
entities.entity-name.relationships.relationship-name.linking.object Több-a-többhöz kapcsolatokhoz használt összekapcsolás objektum
entities.entity-name.relationships.relationship-name.linking.source.fields Az illesztés során használt forrásentitások mezői
entities.entity-name.relationships.relationship-name.linking.target.fields Az illesztésben használt célentitások mezői

Cache

Property Description
entities.entity-name.cache.enabled Az entitás válasz gyorsítótárazásának engedélyezése
entities.entity-name.cache.ttl-seconds Gyorsítótár élettartam másodpercben

Formátum áttekintése

{
  "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>
          }
        }
      ]
    }
  }
}

Forrás (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name} source objektum ✔️ Igen None

Az entitás adatbázis-forrásadatai.

Beágyazott tulajdonságok

Parent Property Típus Required Default
entities.{entity-name}.source object karakterlánc ✔️ Igen None
entities.{entity-name}.source type enum (table, view, stored-procedure) ✔️ Igen None
entities.{entity-name}.source key-fields karakterlánc-tömb ✔️ Igen* None
entities.{entity-name}.source parameters objektum ✔️ Igen** None
  • key-fields csak akkor szükséges, ha type az view. Az érték az elsődleges kulcsokat jelöli.

** parameters csak akkor szükséges, ha type van stored-procedure és csak az alapértelmezett értékeket tartalmazó paraméterek esetében. A paraméter adattípusa kikövetkezésre kerül. Az alapértelmezett paraméterek kihagyhatók.

Tip

Ha az objektum a dbo sémához tartozik, a séma megadása nem kötelező. Emellett szükség esetén az objektumnevek körüli szögletes zárójelek (például dbo.Users vs. [dbo].[Users]) is használhatók.

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>
        }
      }
    }
  }
}

Engedélyek (entitásnév entitások)

Parent Property Típus Required Default
entities.permissions role karakterlánc ✔️ Igen None

Egy sztring, amely megadja annak a szerepkörnek a nevét, amelyre az engedélyek vonatkoznak.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <"anonymous" | "authenticated" | "custom-role">
        }
      ]
    }
  }
}

Example

Ez a példa azt a szerepkört custom-role határozza meg, amely csak read az User entitásra vonatkozó engedélyekkel rendelkezik.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "custom-role",
          "actions": ["read"]
        }
      ]
    }
  }
}

Felhasználási példák

GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role

Műveletek (string-array Permissions entity-name entitások)

Parent Property Típus Required Default
entities.permissions actions oneOf [sztring, tömb] ✔️ Igen None

Egy sztringtömb, amely részletezi, hogy milyen műveletek engedélyezettek a társított szerepkörhöz.

Action SQL-művelet
* Minden művelet
create Egy vagy több* sor beszúrása
read Egy vagy több sor kijelölése
update Egy vagy több* sor módosítása
delete Egy vagy több* sor törlése
execute Tárolt eljárás futtatása

* Jelenleg több művelet is csak a GraphQL-ben támogatott.

Note

Tárolt eljárások esetén a helyettesítő karakter (*) művelet csak a execute műveletre terjed ki. Táblák és nézetek esetén a create, read, updateés delete.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ "*" ] // equivalent to create, read, update, delete
        }
      ]
    }
  }
}

Alternatív formátum (csak sztring, ha type=stored-procedure)

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": <string>
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": "*" // equivalent to execute
        }
      ]
    }
  }
}

Műveletek (object-array Permissions entity-name entitások)

Parent Property Típus Required Default
entities.{entity-name}.permissions actions karakterlánc-tömb ✔️ Igen None

Egy objektumtömb, amely részletezi, hogy milyen műveletek engedélyezettek a társított szerepkörhöz.

Note

Tárolt eljárások esetén a helyettesítő karakter (*) művelet csak execute. Táblák/nézetek esetén a create, read, updateés delete.

Beágyazott tulajdonságok

Parent Property Típus Required Default
entities.{entity-name}.permissions.actions[] action karakterlánc ✔️ Igen None
entities.{entity-name}.permissions.actions[] fields objektum ❌ Nem None
entities.{entity-name}.permissions.actions[] policy objektum ❌ Nem None
entities.{entity-name}.permissions.actions[].policy database karakterlánc ✔️ Igen None

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <string>,
          "actions": [
            {
              "action": <string>,
              "fields": <array of strings>,
              "policy": <object>
            }
          ]
        }
      ]
    }
  }

Example

Ez engedélyt ad read az auditor entitásra User mező- és szabályzatkorlátozásokkal.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "auditor",
          "actions": [
            {
              "action": "read",
              "fields": {
                "include": ["*"],
                "exclude": ["last_login"]
              },
              "policy": {
                "database": "@item.IsAdmin eq false"
              }
            }
          ]
        }
      ]
    }
  }
}

Szabályzati megjegyzések

  • A szabályzatok támogatják az OData-operátorokat, például eq.
  • A szabályzatok támogatják az összetett predikátumokat az and and or.
  • Csak a következő műveletek támogatottak: create, read, updateés delete. (Nem execute)
  • A szabályzatok szűrik az eredményeket, de nem akadályozzák meg a lekérdezések végrehajtását az adatbázisban.
  • A mezőnek a mező aliasát kell használnia, ha megfeleltetve van.

Típus (GraphQL entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name}.graphql type objektum ❌ Nem {entity-name}

Beállítja egy entitás elnevezési konvencióját a GraphQL-sémán belül.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "type": {
          "singular": "<string>",
          "plural": "<string>"
        }
      }
    }
  }
}

Beágyazott tulajdonságok

Parent Property Required Típus Default
entities.{entity-name}.graphql.type singular ❌ Nem karakterlánc None
entities.{entity-name}.graphql.type plural ❌ Nem karakterlánc N/A (a szingular érték alapértelmezett értéke)

Example

Configuration

{
  "entities": {
    "User": {
      "graphql": {
        "type": {
          "singular": "User",
          "plural": "Users"
        }
      }
    }
  }
}

GraphQL-lekérdezés

{
  Users {
    items {
      id
      name
      age
      isAdmin
    }
  }
}

GraphQL-válasz

{
  "data": {
    "Users": {
      "items": [
        {
          "id": 1,
          "name": "Alice",
          "age": 30,
          "isAdmin": true
        },
        {
          "id": 2,
          "name": "Bob",
          "age": 25,
          "isAdmin": false
        }
        // ...
      ]
    }
  }
}

Művelet (GraphQL entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name}.graphql operation enum sztring ❌ Nem mutation

Azt határozza meg, hogy a stored-procedure művelet megjelenik-e a vagy Querya Mutation .

Note

Ha {entity-name}.type be van állítva stored-procedure, a rendszer automatikusan létrehoz egy új GraphQL-típust executeXXX . Ez a operation tulajdonság szabályozza, hogy a típus hol található a GraphQL-sémában. Nincs funkcionális hatás, csak sémahigiénia.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "operation": "query" | "mutation"
      }
    }
  }
}

Példa: művelet

Mikor operation van beállítva query

type Query {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Mikor operation van beállítva mutation

type Mutation {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Engedélyezve (GraphQL-entitásnév-entitások)

Parent Property Típus Required Default
entities.{entity-name}.graphql enabled boolean ❌ Nem True

Lehetővé teszi, hogy a fejlesztők szelektíven belefoglalják az entitásokat a GraphQL-sémába.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "enabled": <true> (default) | <false>
      }
    }
  }
}

REST (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name}.rest enabled boolean ❌ Nem True
entities.rest path karakterlánc ❌ Nem /{entity-name}
entities.{entity-name}.rest methods karakterlánc-tömb ❌ Nem* POST

* A methods tulajdonság csak végpontokra vonatkozik stored-procedure .

Format

{
  "entities": {
    "{entity-name}": {
      "rest": {
        "enabled": <true> (default) | <false>,
        "path": <string; default: "{entity-name}">
      }
    }
  }
}

Leképezések (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name} mappings objektum ❌ Nem None

Egyéni aliasok vagy közzétett nevek engedélyezése adatbázis-objektummezőkhöz.

Important

A GraphQL-t engedélyező entitások esetében a konfigurált közzétett névnek meg kell felelnie a GraphQL-névkövetelményeknek.

Format

{
  "entities": {
    "{entity-name}": {
      "mappings": {
        "<field-1-name>": "<field-1-alias>",
        "<field-2-name>": "<field-2-alias>",
        "<field-3-name>": "<field-3-alias>"
      }
    }
  }
}

Examples

Adatbázistábla

CREATE TABLE Books
(
  id INT,
  sku_title VARCHAR(50),
  sku_status VARCHAR(50),
)

Configuration

{
  "entities": {
    "Books": {
      ...
      "mappings": {
        "sku_title": "title",
        "sku_status": "status"
      }
    }
  }
}

Gyorsítótár (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name} cache objektum ❌ Nem None

Engedélyezi és konfigurálja az entitás gyorsítótárazását.

Beágyazott tulajdonságok

Parent Property Típus Required Default
entities.{entity-name}.cache enabled boolean ❌ Nem False
entities.{entity-name}.cache ttl-seconds egész szám ❌ Nem -

Format

{
  "entities": {
    "{entity-name}": {
      "cache": {
        "enabled": <true> (default) | <false>,
        "ttl-seconds": <integer; default: 5>
      }
    }
  }
}

Note

Ha nincs megadva, ttl-seconds örökli a megadott globális értéket runtime.cache.

Example

{
  "entities": {
    "Author": {
      "cache": {
        "enabled": true,
        "ttl-seconds": 30
      }
    }
  }
}

Kapcsolatok (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name} relationships objektum ❌ Nem None

Konfigurálja, hogy a GraphQL-entitások hogyan kapcsolódnak más közzétett entitásokhoz. További információ: Data API Builder-kapcsolatok részletezése.

Note

Az relationship-name egyes kapcsolatok tulajdonságának egyedinek kell lennie az adott entitás összes kapcsolatában.

Beágyazott tulajdonságok

Ezeket a tulajdonságokat a kapcsolat számosságától függően különböző kombinációkban használják.

Parent Property Típus Required Default
entities.{entity-name}.relationships cardinality karakterlánc ✔️ Igen None
entities.{entity-name}.relationships target.entity karakterlánc ✔️ Igen None
entities.{entity-name}.relationships target.fields karakterlánc-tömb ❌ Nem None
entities.{entity-name}.relationships source.fields karakterlánc-tömb ❌ Nem None
entities.{entity-name}.relationships linking.object karakterlánc ❌ Nem None
entities.{entity-name}.relationships linking.source.fields karakterlánc-tömb ❌ Nem None
entities.{entity-name}.relationships linking.target.fields karakterlánc-tömb ❌ Nem 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 Egy kategória-entitás számos teendő entitáshoz kapcsolódhat
many-to-one one Számos teendő entitás kapcsolódhat egy kategória-entitáshoz
many-to-many many Egy teendő entitás számos felhasználói entitáshoz kapcsolódhat, egy felhasználói entitás pedig számos todo entitáshoz kapcsolódhat

Példa: Egy az egyhez számosság

Mindegyik Profile pontosan egyhez Userkapcsolódik , és mindegyiknek User pontosan egy kapcsolódója Profilevan .

{
  "entities": {
    "User": {
      "relationships": {
        "user_profile": {
          "cardinality": "one",
          "target.entity": "Profile",
          "source.fields": [ "id" ],
          "target.fields": [ "user_id" ]
        }
      }
    },
    "Profile": {
      ...
    }
  }
}

GraphQL-séma

type User
{
  id: Int!
  ...
  profile: Profile
}

Command-line

dab update User \
  --relationship profile \
  --target.entity Profile \
  --cardinality one \
  --relationship.fields "id:user_id"

Példa: Egy-a-többhöz számosság

A egy Category vagy több kapcsolódó Book entitással rendelkezhet, míg mindegyikhez Book tartozhat egy kapcsolódó Categoryentitás.

{
  "entities": {
    "Book": {
      ...
    },
    "Category": {
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

GraphQL-séma

type Category
{
  id: Int!
  ...
  books: [BookConnection]!
}

Parancssor

dab update Category \
  --relationship category_books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:category_id"

Példa: Több az egyhez számosság

Sok Book entitás rendelkezhet egy kapcsolódóval Category, míg egy Category vagy több kapcsolódó Book bejegyzéssel.

{
  "entities": {
    "Book": {
      "relationships": {
        "books_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      },
      "Category": {
        ...
      }
    }
  }
}

GraphQL-séma

type Book
{
  id: Int!
  ...
  category: Category
}

Parancssor

dab update Book \
  --relationship books_category \
  --target.entity "Category" \
  --cardinality one \
  --relationship.fields "category_id:id"

Példa: Több-a-többhöz számosság

Sok Book entitás számos kapcsolódó entitással Author rendelkezhet, míg számos Author entitáshoz számos kapcsolódó Book bejegyzés tartozhat.

Note

Ez a kapcsolat egy harmadik táblával lehetséges, dbo.books_authorsamelyre hivatkozunk csatolási objektumként.

{
  "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": {
        ...
      }
    }
  }
}

GraphQL-séma

type Book
{
  id: Int!
  ...
  authors: [AuthorConnection]!
}

type Author
{
  id: Int!
  ...
  books: [BookConnection]!
}

Parancssor

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"

Állapot (entitásnév entitások)

Parent Property Típus Required Default
entities.{entity-name} health objektum ❌ Nem None

Engedélyezi és konfigurálja az entitás állapot-ellenőrzését.

Beágyazott tulajdonságok

Parent Property Típus Required Default
entities.{entity-name}.health enabled boolean ❌ Nem true
entities.{entity-name}.health first egész szám ❌ Nem 100
entities.{entity-name}.health threshold-ms egész szám ❌ Nem 1000

Example

{
  "entities": {
    "Book": {
      "health": {
        "enabled": true,
        "first": 3,
        "threshold-ms": 500
      }
    }
  }
}

Note

Az first értéknek kisebbnek vagy egyenlőnek kell lennie a runtime.pagination.max-page-size beállításnál. A kisebb értékek segítenek az állapot-ellenőrzések gyorsabb elvégzésében.

Important

A tárolt eljárások automatikusan ki vannak zárva az entitásállapot-ellenőrzésekből, mert paramétereket igényelnek, és nem feltétlenül determinisztikusak.