Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Configuratie-instellingen voor database-entiteiten.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Hiermee schakelt u statuscontroles in voor de entiteit (zowel REST- als GraphQL-eindpunten) |
entities.entity-name.health.first |
Aantal rijen dat wordt geretourneerd in de statuscontrolequery (bereik: 1-500) |
entities.entity-name.health.threshold-ms |
Maximale duur in milliseconden voor statuscontrolequery (min. 1) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Objecttype: table, viewof stored-procedure |
entities.entity-name.source.object |
Naam van het databaseobject |
entities.entity-name.source.parameters |
Parameters voor opgeslagen procedures of functies |
entities.entity-name.source.key-fields |
Lijst met primaire-sleutelvelden voor weergaven |
entities.entity-name.mappings |
API-veldnamen toewijzen aan databasekolommen |
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Hiermee schakelt u REST in voor deze entiteit |
entities.entity-name.rest.path |
Aangepaste route voor REST-eindpunt |
entities.entity-name.rest.methods |
Toegestane REST-methoden: get, post, put, patchdelete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Typ de naam of het object met singular en plural |
entities.entity-name.graphql.operation |
Bewerkingstype: query of mutation |
entities.entity-name.graphql.enabled |
Hiermee schakelt u GraphQL in voor deze entiteit |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Tekenreeks voor rolnaam |
entities.entity-name.permissions[].actions |
Een of meer van: create, read, update, deleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one of many |
entities.entity-name.relationships.relationship-name.target.entity |
Naam van de doelentiteit |
entities.entity-name.relationships.relationship-name.source.fields |
Velden uit deze entiteit die in de relatie worden gebruikt |
entities.entity-name.relationships.relationship-name.target.fields |
Velden van de doelentiteit |
entities.entity-name.relationships.relationship-name.linking.object |
Join-object dat wordt gebruikt voor veel-op-veel-relaties |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Velden van de bronentiteit die wordt gebruikt in join |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Velden van de doelentiteit die wordt gebruikt in join |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Hiermee schakelt u het opslaan van antwoorden voor de entiteit in de cache in |
entities.entity-name.cache.ttl-seconds |
Time-to-live cache in seconden |
Overzicht van opmaak
{
"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>
}
}
]
}
}
}
Bron (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Ja | None |
De gegevens van de databasebron van de entiteit.
Geneste eigenschappen
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Ja | None |
entities.{entity-name}.source |
type |
enum (table, view, stored-procedure) |
✔️ Ja | None |
entities.{entity-name}.source |
key-fields |
tekenreeksmatrix | ✔️ Ja* | None |
entities.{entity-name}.source |
parameters |
object | ✔️ Ja** | None |
-
key-fieldsis alleen vereist wanneertypedit isview. De waarde vertegenwoordigt de primaire sleutels.
**
parameters is alleen vereist wanneer type en stored-procedure alleen voor parameters met standaardwaarden. Het gegevenstype van de parameter wordt afgeleid. Parameters zonder standaardwaarde kunnen worden weggelaten.
Tip
Als het object deel uitmaakt van het dbo schema, is het opgeven van het schema optioneel. Daarnaast kunnen vierkante haken rond objectnamen (bijvoorbeeld dbo.Users vs. [dbo].[Users]) worden gebruikt wanneer dat nodig is.
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>
}
}
}
}
}
Machtigingen (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Ja | None |
Een tekenreeks die de naam opgeeft van de rol waarop machtigingen van toepassing zijn.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"anonymous" | "authenticated" | "custom-role">
}
]
}
}
}
Example
In dit voorbeeld wordt de rol custom-role gedefinieerd met alleen read machtigingen voor de User entiteit.
{
"entities": {
"User": {
"permissions": [
{
"role": "custom-role",
"actions": ["read"]
}
]
}
}
}
Voorbeelden van gebruik
GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role
Acties (tekenreeksmatrixmachtigingen entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [tekenreeks, matrix] | ✔️ Ja | None |
Een tekenreeksmatrix waarin wordt beschreven welke bewerkingen zijn toegestaan voor de bijbehorende rol.
| Action | SQL-bewerking |
|---|---|
* |
Alle acties |
create |
Een of meer* rijen invoegen |
read |
Een of meer rijen selecteren |
update |
Een of meer* rijen wijzigen |
delete |
Een of meer* rijen verwijderen |
execute |
Een opgeslagen procedure uitvoeren |
* Meerdere bewerkingen worden momenteel alleen ondersteund in GraphQL.
Note
Voor opgeslagen procedures wordt de actie jokerteken (*) alleen uitgebreid naar de execute actie. Voor tabellen en weergaven wordt deze uitgebreid naar create, read, updateen delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Alternatieve indeling (alleen tekenreeks, wanneer type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Acties (entiteitsnaamentiteiten voor objectmatrixmachtigingen)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
tekenreeksmatrix | ✔️ Ja | None |
Een objectmatrix waarin wordt beschreven welke bewerkingen zijn toegestaan voor de bijbehorende rol.
Note
Voor opgeslagen procedures wordt de actie jokerteken (*) uitgebreid tot alleen execute. Voor tabellen/weergaven wordt deze uitgebreid naar create, read, updateen delete.
Geneste eigenschappen
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Ja | None |
entities.{entity-name}.permissions.actions[] |
fields |
object | ❌ Nee | None |
entities.{entity-name}.permissions.actions[] |
policy |
object | ❌ Nee | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Ja | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Hiermee verleent u read toestemming voor auditor de User entiteit, met veld- en beleidsbeperkingen.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Beleidsnotities
- Beleidsregels ondersteunen OData-operators zoals
eq. - Beleidsregels ondersteunen samengestelde predicaten met behulp van
andenor. - Alleen ondersteund voor acties:
create,read,updateendelete. (Nietexecute) - Beleidsregels filteren resultaten, maar voorkomen niet dat query's worden uitgevoerd in de database.
- Veld moet de veldalias gebruiken, indien toegewezen.
Type (GraphQL entity-name entities)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ Nee | {entity-name} |
Hiermee stelt u de naamconventie voor een entiteit in het GraphQL-schema in.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Geneste eigenschappen
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
❌ Nee | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ Nee | string | N/B (standaard ingesteld op enkelvoudige waarde) |
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
GraphQL-query
{
Users {
items {
id
name
age
isAdmin
}
}
}
GraphQL-antwoord
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Bewerking (GraphQL entity-name entities)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
opsommingstekenreeks | ❌ Nee | mutation |
Hiermee wordt aangegeven of de stored-procedure bewerking wordt weergegeven onder of QueryMutation.
Note
Wanneer {entity-name}.type dit is ingesteld stored-procedure, wordt automatisch een nieuw GraphQL-type executeXXX gemaakt. Met deze operation eigenschap bepaalt u waar dit type in het GraphQL-schema wordt geplaatst. Er is geen functionele impact, alleen schema-hygiëne.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Voorbeeld: bewerking
Wanneer operation is ingesteld op query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Wanneer operation is ingesteld op mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Ingeschakeld (GraphQL entity-name entities)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Nee | True |
Hiermee kunnen ontwikkelaars selectief entiteiten opnemen in het GraphQL-schema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Nee | True |
entities.rest |
path |
string | ❌ Nee | /{entity-name} |
entities.{entity-name}.rest |
methods |
tekenreeksmatrix | ❌ Nee* | POST |
* De methods eigenschap is alleen voor stored-procedure eindpunten.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Toewijzingen (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ Nee | None |
Hiermee schakelt u aangepaste aliassen of weergegeven namen in voor databaseobjectvelden.
Important
Voor entiteiten waarvoor GraphQL is ingeschakeld, moet de geconfigureerde weergegeven naam voldoen aan de GraphQL-naamvereisten.
Format
{
"entities": {
"{entity-name}": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Examples
Databasetabel
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Cache (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ Nee | None |
Hiermee schakelt en configureert u caching voor de entiteit.
Geneste eigenschappen
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Nee | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Nee | - |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>
}
}
}
}
Note
Wanneer deze niet is opgegeven, ttl-seconds neemt u de globale waarde die is ingesteld onder runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
}
Relaties (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ Nee | None |
Hiermee configureert u hoe GraphQL-entiteiten zijn gerelateerd aan andere weergegeven entiteiten. Zie voor meer informatie uitsplitsing van relaties van data-API-opbouwfuncties.
Note
De relationship-name eigenschap voor elke relatie moet uniek zijn voor alle relaties voor die entiteit.
Geneste eigenschappen
Deze eigenschappen worden gebruikt in verschillende combinaties, afhankelijk van de relatiekardinaliteit.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Ja | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Ja | None |
entities.{entity-name}.relationships |
target.fields |
tekenreeksmatrix | ❌ Nee | None |
entities.{entity-name}.relationships |
source.fields |
tekenreeksmatrix | ❌ Nee | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ Nee | None |
entities.{entity-name}.relationships |
linking.source.fields |
tekenreeksmatrix | ❌ Nee | None |
entities.{entity-name}.relationships |
linking.target.fields |
tekenreeksmatrix | ❌ Nee | 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 |
Eén categorieentiteit kan betrekking hebben op veel takentiteiten |
| many-to-one | one |
Veel takentiteiten kunnen betrekking hebben op één categorieentiteit |
| many-to-many | many |
Een todo-entiteit kan betrekking hebben op veel gebruikersentiteiten en één gebruikersentiteit kan betrekking hebben op veel todo-entiteiten |
Voorbeeld: Een-op-een-kardinaliteit
Elk Profile is gerelateerd aan precies één User, en elk User heeft precies één gerelateerd Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
GraphQL-schema
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Voorbeeld: Een-op-veel-kardinaliteit
Een Category kan een of meer gerelateerde Book entiteiten hebben, terwijl elk Book een gerelateerde Categoryentiteit kan hebben.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
GraphQL-schema
type Category
{
id: Int!
...
books: [BookConnection]!
}
Opdrachtregel
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Voorbeeld: Veel-op-een-kardinaliteit
Veel Book entiteiten kunnen één gerelateerde Categoryhebben, terwijl een Category of meer gerelateerde Book items kan bevatten.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
GraphQL-schema
type Book
{
id: Int!
...
category: Category
}
Opdrachtregel
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Voorbeeld: Veel-op-veel-kardinaliteit
Veel Book entiteiten kunnen veel gerelateerde Author entiteiten hebben, terwijl veel Author entiteiten veel gerelateerde Book items kunnen hebben.
Note
Deze relatie is mogelijk met een derde tabel, dbo.books_authorswaarnaar we verwijzen als het koppelingsobject.
{
"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-schema
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Opdrachtregel
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"
Status (entiteitsnaamentiteiten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ Nee | None |
Hiermee schakelt en configureert u statuscontroles voor de entiteit.
Geneste eigenschappen
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Nee | true |
entities.{entity-name}.health |
first |
integer | ❌ Nee | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Nee | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
De first waarde moet kleiner dan of gelijk zijn aan de runtime.pagination.max-page-size instelling. Kleinere waarden helpen de statuscontroles sneller te voltooien.
Important
Opgeslagen procedures worden automatisch uitgesloten van entiteitsstatuscontroles omdat ze parameters vereisen en mogelijk niet deterministisch zijn.