A Data API Builder konfigurációs sémájának referenciája
A Data API Builder motorjának konfigurációs fájlra van szüksége. A Data API Builder konfigurációs fájlja strukturált és átfogó megközelítést biztosít az API beállításához, amely mindent részletesen tartalmaz a környezeti változóktól az entitásspecifikus konfigurációkig. Ez a JSON formátumú dokumentum egy $schema
tulajdonsággal kezdődik. Ez a beállítás ellenőrzi a dokumentumot.
A tulajdonságok database-type
és connection-string
biztosítják az adatbázisrendszerekkel való zökkenőmentes integrációt az Azure SQL Database-től a Cosmos DB NoSQL API-ig.
A konfigurációs fájl tartalmazhat olyan beállításokat, mint például:
- Adatbázis-szolgáltatás és kapcsolatadatok
- Globális és futtatókörnyezeti konfigurációs beállítások
- Közzétett entitások készlete
- Hitelesítési módszer
- Az identitásokhoz való hozzáféréshez szükséges biztonsági szabályok
- Névleképezési szabályok az API és az adatbázis között
- Nem következtethető entitások közötti kapcsolatok
- Egyedi funkciók adott adatbázis-szolgáltatásokhoz
Szintaxis áttekintése
Íme egy konfigurációs fájl elsődleges "szakaszainak" gyors lebontása.
{
"$schema": "...",
"data-source": { ... },
"data-source-files": [ ... ],
"runtime": {
"rest": { ... },
"graphql": { .. },
"host": { ... },
"cache": { ... },
"telemetry": { ... },
"pagination": { ... }
}
"entities": [ ... ]
}
Legfelső szintű tulajdonságok
A táblaformátum legfelső szintű tulajdonságainak leírása:
Ingatlan | Leírás |
---|---|
$schema | Megadja az érvényesítéshez szükséges JSON-sémát, biztosítva, hogy a konfiguráció megfeleljen a szükséges formátumnak. |
adatforrás- | A adatbázistípus és az adatbázis-kapcsolat létrehozásához szükséges kapcsolati sztringadatait tartalmazza. |
adatforrásfájlok | Nem kötelező tömb, amely más, más adatforrásokat definiáló konfigurációs fájlokat határoz meg. |
futtatókörnyezeti | Konfigurálja a futtatókörnyezet viselkedését és beállításait, beleértve REST, GraphQL, gazdagép, gyorsítótárés telemetriaialtulajdonságait. |
entitások | Meghatározza az API-n keresztül közzétett entitások (adatbázistáblák, nézetek stb.) készletét, beleértve a leképezési, engedélyekés kapcsolatok. |
Mintakonfigurációk
Íme egy mintakonfigurációs fájl, amely csak egyetlen egyszerű entitás szükséges tulajdonságait tartalmazza. Ez a minta egy minimális forgatókönyv szemléltetésére szolgál.
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
]
}
}
}
Egy összetettebb forgatókönyvre példaként tekintse meg a végpontok közötti konfigurációs.
Környezetben
A Data API Builder konfigurációs fájlja olyan forgatókönyveket támogat, ahol több környezetet kell támogatnia, hasonlóan a ASP.NET Core appSettings.json
fájlhoz. A keretrendszer három közös környezeti értéket biztosít; Development
, Staging
és Production
; de bármilyen környezeti értéket használhat. A Data API Builder által használt környezetet a DAB_ENVIRONMENT
környezeti változó használatával kell konfigurálni.
Vegyünk egy példát, ahol alapkonfigurációt és fejlesztésspecifikus konfigurációt szeretne. Ehhez a példához két konfigurációs fájl szükséges:
Környezet | |
---|---|
dab-config.json | Alap |
dab-config.Development.json | Fejlődés |
A fejlesztésspecifikus konfiguráció használatához a DAB_ENVIRONMENT
környezeti változót Development
értékre kell állítania.
A környezetspecifikus konfigurációs fájlok felülbírálják az alapkonfigurációs fájl tulajdonságértékét. Ebben a példában, ha a connection-string
érték mindkét fájlban be van állítva, a *.Development.json fájl értékét használja a rendszer.
Ebben a mátrixban jobban megismerheti, hogy melyik értéket használja a rendszer attól függően, hogy hol van megadva (vagy nincs megadva) a fájlban.
Alapkonfigurációs | Nincs megadva az alapkonfigurációs | |
---|---|---|
Az aktuális környezetkonfigurációs | Aktuális környezet | Aktuális környezet |
Nincs megadva a jelenlegi környezetkonfigurációs | Alap | Egyik sem |
Több konfigurációs fájl használatára vonatkozó példa: a Data API Builder használata környezetekkel.
Konfigurációs tulajdonságok
Ez a szakasz tartalmazza a konfigurációs fájlhoz elérhető összes lehetséges konfigurációs tulajdonságot.
Séma
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
$root |
$schema |
húr | ✔️ Igen | Egyik sem |
Minden konfigurációs fájl egy $schema
tulajdonsággal kezdődik, amely megadja az ellenőrzéshez JSON-séma.
Formátum
{
"$schema": <string>
}
Példák
A sémafájlok bizonyos URL-címeken 0.3.7-alpha
verziókhoz érhetők el, így a megfelelő verziót vagy a legújabb elérhető sémát használhatja.
https://github.com/Azure/data-api-builder/releases/download/<VERSION>-<suffix>/dab.draft.schema.json
Cserélje le VERSION-suffix
a kívánt verzióra.
https://github.com/Azure/data-api-builder/releases/download/v0.3.7-alpha/dab.draft.schema.json
A séma legújabb verziója mindig elérhető https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json.
Íme néhány példa az érvényes sémaértékekre.
Verzió | URI | Leírás |
---|---|---|
0.3.7-alfa | https://github.com/Azure/data-api-builder/releases/download/v0.3.7-alpha/dab.draft.schema.json |
Az eszköz alfaverziójából származó konfigurációs sémát használja. |
0.10.23 | https://github.com/Azure/data-api-builder/releases/download/v0.10.23/dab.draft.schema.json |
A konfigurációs sémát használja az eszköz stabil kiadásához. |
Legkésőbbi | https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json |
A konfigurációs séma legújabb verzióját használja. |
Jegyzet
A Data API Builder 0.3.7-alfa előtti verziói eltérő séma URI-val rendelkezhetnek.
Adatforrás
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
$root |
data-source |
húr | ✔️ Igen | Egyik sem |
A data-source
szakasz a kapcsolati sztringen keresztül határozza meg az adatbázist és az adatbázishoz való hozzáférést. Az adatbázis-beállításokat is meghatározza. A data-source
tulajdonság konfigurálja a háttéradatbázishoz való csatlakozáshoz szükséges hitelesítő adatokat. A data-source
szakasz a háttéradatbázis-kapcsolatot vázolja fel, a database-type
és a connection-string
megadásával.
Formátum
{
"data-source": {
"database-type": <string>,
"connection-string": <string>,
// mssql-only
"options": {
"set-session-context": <true> (default) | <false>
},
// cosmosdb_nosql-only
"options": {
"database": <string>,
"container": <string>,
"schema": <string>
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
database-type |
✔️ Igen | enum sztring |
connection-string |
✔️ Igen | húr |
options |
❌ Nem | tárgy |
Adatbázis típusa
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
data-source |
database-type |
enumerálási sztring | ✔️ Igen | Egyik sem |
Az adatforrásként használni kívánt adatbázis típusának megadására szolgáló enumerálási sztring.
Formátum
{
"data-source": {
"database-type": <string>
}
}
Értékek beírása
A type
tulajdonság a háttéradatbázis típusát jelzi.
Típus | Leírás | Minimális verzió |
---|---|---|
mssql |
Azure SQL Database | Egyik sem |
mssql |
Azure SQL MI | Egyik sem |
mssql |
SQL Server | SQL 2016 |
sqldw |
Azure SQL Data Warehouse | Egyik sem |
postgresql |
PostgreSQL | v11 |
mysql |
MySQL | v8 |
cosmosdb_nosql |
Azure Cosmos DB for NoSQL | Egyik sem |
cosmosdb_postgresql |
Azure Cosmos DB for PostgreSQL | Egyik sem |
Kapcsolati sztring
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
data-source |
connection-string |
húr | ✔️ Igen | Egyik sem |
Egy sztring érték, amely egy érvényes kapcsolati sztringet tartalmaz a céladatbázis-szolgáltatáshoz való csatlakozáshoz. A háttéradatbázishoz való csatlakozáshoz ADO.NET kapcsolati sztring. További információ: ADO.NET kapcsolati sztringek.
Formátum
{
"data-source": {
"connection-string": <string>
}
}
Kapcsolat rugalmassága
A Data API Builder automatikusan újrapróbálkozza az adatbázis-kérelmeket az átmeneti hibák észlelése után. Az újrapróbálkozási logika egy r
): $r^2$
Ezzel a képlettel másodpercek alatt kiszámíthatja az egyes újrapróbálkozási kísérletek idejét.
Repeta | |
---|---|
Első | 2 |
Second | 4 |
harmadik | 8 |
negyedik | 16 |
ötödik | 32 |
Azure SQL és SQL Server
A Data API Builder a SqlClient
kódtár használatával csatlakozik az Azure SQL-hez vagy az SQL Serverhez a konfigurációs fájlban megadott kapcsolati sztring használatával. A támogatott kapcsolati sztringbeállítások listája itt érhető el: SqlConnection.ConnectionString tulajdonság.
A Data API Builder a felügyeltszolgáltatás-identitások (MSI) használatával is csatlakozhat a céladatbázishoz, ha a Data API Builder az Azure-ban van üzemeltetve. A DefaultAzureCredential
kódtárban definiált Azure.Identity
ismert identitások használatával csatlakozik, ha nem ad meg felhasználónevet vagy jelszót a kapcsolati sztringben. További információ: DefaultAzureCredential
példák.
-
felhasználó által hozzárendelt felügyelt identitás (UMI): Fűzze hozzá a hitelesítési és felhasználói azonosító tulajdonságait a kapcsolati sztringhez, miközben a felhasználó által hozzárendelt felügyelt identitás ügyfélazonosítójában a következőt helyettesíti:
Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;
. -
rendszer által hozzárendelt felügyelt identitás (SMI): Fűzze hozzá a Hitelesítési tulajdonságot, és zárja ki a UserId és Jelszó argumentumokat a kapcsolati sztringből:
Authentication=Active Directory Managed Identity;
. A UserId és Jelszó kapcsolati sztring tulajdonságainak hiánya jelzi a DAB-nak a hitelesítést egy rendszer által hozzárendelt felügyelt identitással.
A felügyeltszolgáltatás-identitás Azure SQL-sel vagy SQL Serverrel való konfigurálásáról további információt Felügyelt identitások az Azure SQL-hez készült Microsoft Entracímű cikkben talál.
Példák
A kapcsolati sztringhez használt érték nagyban függ a forgatókönyvben használt adatbázis-szolgáltatástól. A kapcsolati sztringet mindig egy környezeti változóban tárolhatja, és a @env()
függvénnyel érheti el.
Érték | Leírás | |
---|---|---|
Azure SQL Database sztringértékének használata | Server=<server-address>;Database=<name-of-database>;User ID=<username>;Password=<password>; |
Kapcsolati sztring egy Azure SQL Database-fiókhoz. További információ: Azure SQL Database kapcsolati sztringek. |
Az Azure Database for PostgreSQL sztringértékének használata | Server=<server-address>;Database=<name-of-database>;Port=5432;User Id=<username>;Password=<password>;Ssl Mode=Require; |
Kapcsolati sztring egy Azure Database for PostgreSQL-fiókhoz. További információ: Azure Database for PostgreSQL kapcsolati sztringek. |
Az Azure Cosmos DB használata NoSQL-sztringértékhez | AccountEndpoint=<endpoint>;AccountKey=<key>; |
Kapcsolati sztring egy Azure Cosmos DB for NoSQL-fiókhoz. További információ: Azure Cosmos DB for NoSQL kapcsolati sztringek. |
Az Azure Database for MySQL sztringértékének használata | Server=<server-address>;Database=<name-of-database>;User ID=<username>;Password=<password>;Sslmode=Required;SslCa=<path-to-certificate>; |
Kapcsolati sztring egy Azure Database for MySQL-fiókhoz. További információ: Azure Database for MySQL kapcsolati sztringek. |
Access környezeti változó | @env('SQL_CONNECTION_STRING') |
Környezeti változó elérése a helyi gépről. Ebben a példában a SQL_CONNECTION_STRING környezeti változóra hivatkozunk. |
Borravaló
Ajánlott eljárásként kerülje a bizalmas adatok tárolását a konfigurációs fájlban. Ha lehetséges, használja a @env()
a környezeti változókra való hivatkozáshoz. További információ: @env()
függvény.
Ezek a minták csak szemléltetik az egyes adatbázistípusok konfigurálását. Előfordulhat, hogy a forgatókönyv egyedi, de ez a minta jó kiindulási hely. Cserélje le a helyőrzőket, például myserver
, myDataBase
, mylogin
és myPassword
a környezetre jellemző tényleges értékekkel.
mssql
"data-source": { "database-type": "mssql", "connection-string": "$env('my-connection-string')", "options": { "set-session-context": true } }
-
Tipikus kapcsolati sztringformátum:
"Server=tcp:myserver.database.windows.net,1433;Initial Catalog=myDataBase;Persist Security Info=False;User ID=mylogin;Password=myPassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
-
Tipikus kapcsolati sztringformátum:
postgresql
"data-source": { "database-type": "postgresql", "connection-string": "$env('my-connection-string')" }
-
Tipikus kapcsolati sztringformátum:
"Host=myserver.postgres.database.azure.com;Database=myDataBase;Username=mylogin@myserver;Password=myPassword;"
-
Tipikus kapcsolati sztringformátum:
mysql
"data-source": { "database-type": "mysql", "connection-string": "$env('my-connection-string')" }
-
Tipikus kapcsolati sztringformátum:
"Server=myserver.mysql.database.azure.com;Database=myDataBase;Uid=mylogin@myserver;Pwd=myPassword;"
-
Tipikus kapcsolati sztringformátum:
cosmosdb_nosql
"data-source": { "database-type": "cosmosdb_nosql", "connection-string": "$env('my-connection-string')", "options": { "database": "Your_CosmosDB_Database_Name", "container": "Your_CosmosDB_Container_Name", "schema": "Path_to_Your_GraphQL_Schema_File" } }
-
Tipikus kapcsolati sztringformátum:
"AccountEndpoint=https://mycosmosdb.documents.azure.com:443/;AccountKey=myAccountKey;"
-
Tipikus kapcsolati sztringformátum:
cosmosdb_postgresql
"data-source": { "database-type": "cosmosdb_postgresql", "connection-string": "$env('my-connection-string')" }
-
Tipikus kapcsolati sztringformátum:
"Host=mycosmosdb.postgres.database.azure.com;Database=myDataBase;Username=mylogin@mycosmosdb;Password=myPassword;Port=5432;SSL Mode=Require;"
-
Tipikus kapcsolati sztringformátum:
Jegyzet
A megadott "beállítások" (például database
, container
és schema
) a PostgreSQL API helyett az Azure Cosmos DB NoSQL API-jára vonatkoznak. A PostgreSQL API-t használó Azure Cosmos DB esetében a "beállítások" nem tartalmazzák a database
, container
vagy schema
, mint a NoSQL-beállításban.
Beállítások
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
data-source |
options |
tárgy | ❌ Nem | Egyik sem |
Az adott adatbázis-kapcsolatok extra kulcs-érték paramétereinek opcionális szakasza.
Az, hogy a options
szakasz szükséges-e vagy sem, nagyrészt a használt adatbázis-szolgáltatástól függ.
Formátum
{
"data-source": {
"options": {
"<key-name>": <string>
}
}
}
options: { set-session-context: boolean }
Az Azure SQL és az SQL Server esetében a Data API Builder kihasználhatja a SESSION_CONTEXT
, hogy felhasználó által megadott metaadatokat küldjön a mögöttes adatbázisba. Ezek a metaadatok a Hozzáférési jogkivonatban található jogcímek alapján érhetők el a Data API Builder számára. A SESSION_CONTEXT
adatok az adatbázis-kapcsolat során mindaddig elérhetők az adatbázis számára, amíg a kapcsolat be nem záródik. További információ: munkamenet-környezet.
Sql-alapú tárolt eljárás – példa:
CREATE PROC GetUser @userId INT AS
BEGIN
-- Check if the current user has access to the requested userId
IF SESSION_CONTEXT(N'user_role') = 'admin'
OR SESSION_CONTEXT(N'user_id') = @userId
BEGIN
SELECT Id, Name, Age, IsAdmin
FROM Users
WHERE Id = @userId;
END
ELSE
BEGIN
RAISERROR('Unauthorized access', 16, 1);
END
END;
Példa JSON-konfigurációra:
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')",
"options": {
"set-session-context": true
}
},
"entities": {
"User": {
"source": {
"object": "dbo.GetUser",
"type": "stored-procedure",
"parameters": {
"userId": "number"
}
},
"permissions": [
{
"role": "authenticated",
"actions": ["execute"]
}
]
}
}
}
Magyarázat:
tárolt eljárás (
GetUser
):- Az eljárás ellenőrzi a
SESSION_CONTEXT
annak ellenőrzéséhez, hogy a hívó rendelkezik-eadmin
szerepkörével, vagy megfelel-e a megadottuserId
. - A jogosulatlan hozzáférés hibát eredményez.
- Az eljárás ellenőrzi a
JSON-konfigurációs:
-
set-session-context
engedélyezve van a felhasználói metaadatok továbbítása a hozzáférési jogkivonatból az adatbázisba. - A
parameters
tulajdonság leképozza a tárolt eljáráshoz szükségesuserId
paramétert. - A
permissions
blokk biztosítja, hogy csak hitelesített felhasználók hajthatják végre a tárolt eljárást.
-
Adatforrásfájlok
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
$root |
data-source-files |
sztringtömb | ❌ Nem | Egyik sem |
A Data API Builder több konfigurációs fájlt támogat a különböző adatforrásokhoz, és az egyiket a legfelső szintű fájl kezeli runtime
beállításokat. Minden konfiguráció ugyanazt a sémát használja, így hiba nélkül runtime
beállításokat. A gyermekkonfigurációk automatikusan egyesülnek, de kerülni kell a körkörös hivatkozásokat. Az entitások külön fájlokra oszthatók a jobb kezelés érdekében, de az entitások közötti kapcsolatoknak ugyanabban a fájlban kell lenniük.
Formátum
{
"data-source-files": [ <string> ]
}
Konfigurációs fájlokkal kapcsolatos szempontok
- Minden konfigurációs fájlnak tartalmaznia kell a
data-source
tulajdonságot. - Minden konfigurációs fájlnak tartalmaznia kell a
entities
tulajdonságot. - A
runtime
beállítást csak a legfelső szintű konfigurációs fájlból használja, még akkor is, ha más fájlok is tartalmazzák. - A gyermekkonfigurációs fájlok saját gyermekfájlokat is tartalmazhatnak.
- A konfigurációs fájlok igény szerint almappákba rendezhetők.
- Az entitásneveknek minden konfigurációs fájlban egyedinek kell lenniük.
- A különböző konfigurációs fájlok entitásai közötti kapcsolatok nem támogatottak.
Példák
{
"data-source-files": [
"dab-config-2.json"
]
}
{
"data-source-files": [
"dab-config-2.json",
"dab-config-3.json"
]
}
Az almappák szintaxisa is támogatott:
{
"data-source-files": [
"dab-config-2.json",
"my-folder/dab-config-3.json",
"my-folder/my-other-folder/dab-config-4.json"
]
}
Runtime
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
$root |
runtime |
tárgy | ✔️ Igen | Egyik sem |
A runtime
szakasz azokat a beállításokat ismerteti, amelyek befolyásolják a futtatókörnyezet működését és az összes közzétett entitás beállításait.
Formátum
{
"runtime": {
"rest": {
"path": <string> (default: /api),
"enabled": <true> (default) | <false>,
"request-body-strict": <true> (default) | <false>
},
"graphql": {
"path": <string> (default: /graphql),
"enabled": <true> (default) | <false>,
"allow-introspection": <true> (default) | <false>
},
"host": {
"mode": "production" (default) | "development",
"cors": {
"origins": ["<array-of-strings>"],
"allow-credentials": <true> | <false> (default)
},
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
},
"cache": {
"enabled": <true> | <false> (default),
"ttl-seconds": <integer; default: 5>
},
"pagination": {
"max-page-size": <integer; default: 100000>,
"default-page-size": <integer; default: 100>,
"max-response-size-mb": <integer; default: 158>
},
"telemetry": {
"application-insights": {
"connection-string": <string>,
"enabled": <true> | <false> (default)
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
rest |
❌ Nem | tárgy |
graphql |
❌ Nem | tárgy |
host |
❌ Nem | tárgy |
cache |
❌ Nem | tárgy |
Példák
Íme egy példa egy futtatókörnyezeti szakaszra, amelynek több általános alapértelmezett paramétere van megadva.
{
"runtime": {
"rest": {
"enabled": true,
"path": "/api",
"request-body-strict": true
},
"graphql": {
"enabled": true,
"path": "/graphql",
"allow-introspection": true
},
"host": {
"mode": "development",
"cors": {
"allow-credentials": false,
"origins": [
"*"
]
},
"authentication": {
"provider": "StaticWebApps",
"jwt": {
"audience": "<client-id>",
"issuer": "<identity-provider-issuer-uri>"
}
}
},
"cache": {
"enabled": true,
"ttl-seconds": 5
},
"pagination": {
"max-page-size": -1 | <integer; default: 100000>,
"default-page-size": -1 | <integer; default: 100>,
"max-response-size-mb": <integer; default: 158>
},
"telemetry": {
"application-insights": {
"connection-string": "<connection-string>",
"enabled": true
}
}
}
}
GraphQL (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
graphql |
tárgy | ❌ Nem | Egyik sem |
Ez az objektum határozza meg, hogy a GraphQL engedélyezve van-e, és az entitás graphQL-típusként való közzétételéhez használt név[ek]. Ez az objektum nem kötelező, és csak akkor használható, ha az alapértelmezett név vagy beállítások nem elegendőek. Ez a szakasz a GraphQL-végpont globális beállításait ismerteti.
Formátum
{
"runtime": {
"graphql": {
"path": <string> (default: /graphql),
"enabled": <true> (default) | <false>,
"depth-limit": <integer; default: none>,
"allow-introspection": <true> (default) | <false>,
"multiple-mutations": <object>
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
❌ Nem | Logikai | Igaz |
path |
❌ Nem | húr | /graphql (alapértelmezett) |
allow-introspection |
❌ Nem | Logikai | Igaz |
multiple-mutations |
❌ Nem | tárgy | { create: { enabled: false } } |
Engedélyezve (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql |
enabled |
Logikai | ❌ Nem | Egyik sem |
Meghatározza, hogy a GraphQL-végpontok globálisan engedélyezhetők vagy letilthatók-e. Ha globálisan le van tiltva, egyetlen entitás sem lenne elérhető a GraphQL-kéréseken keresztül, függetlenül az egyes entitásbeállításoktól.
Formátum
{
"runtime": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
Példák
Ebben a példában a GraphQL-végpont minden entitás esetében le van tiltva.
{
"runtime": {
"graphql": {
"enabled": false
}
}
}
Mélységkorlát (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql |
depth-limit |
egész szám | ❌ Nem | Egyik sem |
A lekérdezés maximálisan engedélyezett lekérdezési mélysége.
A GraphQL a beágyazott lekérdezések kapcsolatdefiníciókon alapuló kezelésére hihetetlen funkció, amely lehetővé teszi a felhasználók számára, hogy összetett, kapcsolódó adatokat kérjenek le egyetlen lekérdezésben. Mivel azonban a felhasználók továbbra is beágyazott lekérdezéseket adnak hozzá, a lekérdezés összetettsége nő, ami végül az adatbázis és az API-végpont teljesítményét és megbízhatóságát is veszélyeztetheti. A helyzet kezeléséhez a runtime/graphql/depth-limit
tulajdonság beállítja a GraphQL-lekérdezések maximális megengedett mélységét (és mutációját). Ez a tulajdonság lehetővé teszi a fejlesztők számára, hogy egyensúlyt teremtsen, így a felhasználók élvezhetik a beágyazott lekérdezések előnyeit, miközben korlátokat szabnak a rendszer teljesítményét és minőségét veszélyeztető forgatókönyvek megelőzésére.
Példák
{
"runtime": {
"graphql": {
"depth-limit": 2
}
}
}
Elérési út (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql |
path |
húr | ❌ Nem | "/graphql" |
Meghatározza azt az URL-útvonalat, ahol a GraphQL-végpont elérhetővé válik. Ha például ezt a paramétert /graphql
értékre állítja, a GraphQL-végpont /graphql
ként jelenik meg. Alapértelmezés szerint az elérési út /graphql
.
Fontos
A tulajdonság alútvonalai nem engedélyezettek. A GraphQL-végpont testreszabott elérési útja jelenleg nem érhető el.
Formátum
{
"runtime": {
"graphql": {
"path": <string> (default: /graphql)
}
}
}
Példák
Ebben a példában a GraphQL URI fő értéke /query
.
{
"runtime": {
"graphql": {
"path": "/query"
}
}
}
Bevezetés engedélyezése (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql |
allow-introspection |
Logikai | ❌ Nem | Igaz |
Ez a logikai jelölő szabályozza, hogy a GraphQL-végponton sémabevezető lekérdezéseket hajthat végre. Az introspekció engedélyezésével az ügyfelek lekérdezhetik a sémát az elérhető adattípusokról, a végrehajtható lekérdezések típusáról és az elérhető mutációkról.
Ez a funkció a GraphQL API szerkezetének megértéséhez és a lekérdezéseket automatikusan generáló eszközökhöz használható a fejlesztés során. Éles környezetekben azonban le lehet tiltani az API sémaadatainak elrejtését és a biztonság növelését. Alapértelmezés szerint az introspection engedélyezve van, ami lehetővé teszi a GraphQL-séma azonnali és átfogó feltárását.
Formátum
{
"runtime": {
"graphql": {
"allow-introspection": <true> (default) | <false>
}
}
}
Példák
Ebben a példában az introspection le van tiltva.
{
"runtime": {
"graphql": {
"allow-introspection": false
}
}
}
Több mutáció (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql |
multiple-mutations |
tárgy | ❌ Nem | Egyik sem |
A GraphQL-futtatókörnyezet összes mutációs műveletét konfigurálja.
Jegyzet
Alapértelmezés szerint több mutáció nincs engedélyezve, és kifejezetten engedélyezni kell.
Formátum
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": <true> (default) | <false>
}
}
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
create |
❌ Nem | tárgy |
Több mutáció – létrehozás (GraphQL-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.graphql.multiple-mutations |
create |
Logikai | ❌ Nem | Téves |
Több létrehozási műveletet konfigurál a GraphQL-futtatókörnyezethez.
Formátum
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": <true> (default) | <false>
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
✔️ Igen | Logikai | Igaz |
Példák
Az alábbiakban bemutatjuk, hogyan engedélyezhet és használhat több mutációt a GraphQL-futtatókörnyezetben. Ebben az esetben a create
művelet úgy van konfigurálva, hogy lehetővé tegye több rekord létrehozását egyetlen kérelemben a runtime.graphql.multiple-mutations.create.enabled
tulajdonság true
beállításával.
Konfigurációs példa
Ez a konfiguráció több create
mutációt tesz lehetővé:
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
},
"entities": {
"User": {
"source": "dbo.Users",
"permissions": [
{
"role": "anonymous",
"actions": ["create"]
}
]
}
}
}
GraphQL-mutációs példa
A fenti konfiguráció használatával a következő mutáció több User
rekordot hoz létre egyetlen műveletben:
mutation {
createUsers(input: [
{ name: "Alice", age: 30, isAdmin: true },
{ name: "Bob", age: 25, isAdmin: false },
{ name: "Charlie", age: 35, isAdmin: true }
]) {
id
name
age
isAdmin
}
}
REST (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
rest |
tárgy | ❌ Nem | Egyik sem |
Ez a szakasz a REST-végpontok globális beállításait ismerteti. Ezek a beállítások alapértelmezésként szolgálnak az összes entitás esetében, de a saját konfigurációjukban entitásonként felül lehet bírálni őket.
Formátum
{
"runtime": {
"rest": {
"path": <string> (default: /api),
"enabled": <true> (default) | <false>,
"request-body-strict": <true> (default) | <false>
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
❌ Nem | Logikai | Igaz |
path |
❌ Nem | húr | /Api |
request-body-strict |
❌ Nem | Logikai | Igaz |
Engedélyezve (REST-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.rest |
enabled |
Logikai | ❌ Nem | Egyik sem |
Logikai jelző, amely meghatározza a REST-végpontok globális elérhetőségét. Ha le van tiltva, az entitások nem érhetők el REST-en keresztül, függetlenül az egyes entitásbeállításoktól.
Formátum
{
"runtime": {
"rest": {
"enabled": <true> (default) | <false>,
}
}
}
Példák
Ebben a példában a REST API-végpont minden entitás esetében le van tiltva.
{
"runtime": {
"rest": {
"enabled": false
}
}
}
Elérési út (REST-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.rest |
path |
húr | ❌ Nem | "/api" |
Beállítja az url-címet az összes közzétett REST-végpont eléréséhez. Az path
beállítása például /api
teszi elérhetővé a REST-végpontot /api/<entity>
. A mellékút nem engedélyezett. Ez a mező nem kötelező, az alapértelmezett /api
.
Jegyzet
A Data API Builder Static Web Apps (előzetes verzió) használatával történő üzembe helyezésekor az Azure szolgáltatás automatikusan injektálja a további mellékút /data-api
az URL-címre. Ez a viselkedés biztosítja a meglévő statikus webalkalmazás-funkciókkal való kompatibilitást. Az eredményként kapott végpont /data-api/api/<entity>
lenne. Ez csak a statikus webalkalmazások esetében releváns.
Formátum
{
"runtime": {
"rest": {
"path": <string> (default: /api)
}
}
}
Fontos
A felhasználó által megadott alelérési útvonalak nem engedélyezettek ehhez a tulajdonsághoz.
Példák
Ebben a példában a rest API URI gyökér /data
.
{
"runtime": {
"rest": {
"path": "/data"
}
}
}
Borravaló
Ha egy Author
entitást definiál, az entitás végpontja /data/Author
lesz.
Kérelem törzse – szigorú (REST-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.rest |
request-body-strict |
Logikai | ❌ Nem | Igaz |
Ez a beállítás azt szabályozza, hogy a REST-mutációs műveletek kérelemtörzse (például POST
, PUT
, PATCH
) mennyire van érvényesítve.
-
true
(alapértelmezett): A kérelemtörzs azon mezői, amelyek nem képeznek le táblázatoszlopokat,BadRequest
kivételt okoznak. -
false
: A rendszer figyelmen kívül hagyja a további mezőket, és csak az érvényes oszlopokat dolgozza fel.
Ez a beállítás nem vonatkozik GET
kérelmekre, mivel a kérés törzsét mindig figyelmen kívül hagyja a rendszer.
Viselkedés adott oszlopkonfigurációkkal
- Az alapértelmezett () értékkel rendelkező oszlopokat a rendszer csak akkor hagyja figyelmen kívül
INSERT
során, ha a hasznos adat értékenull
. Az alapértelmezett() oszlopokat a rendszer nem hagyja figyelmen kívülUPDATE
a hasznos adatok értékétől függetlenül. - A számított oszlopok mindig figyelmen kívül lesznek hagyva.
- Az automatikusan létrehozott oszlopok mindig figyelmen kívül lesznek hagyva.
Formátum
{
"runtime": {
"rest": {
"request-body-strict": <true> (default) | <false>
}
}
}
Példák
CREATE TABLE Users (
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(50) NOT NULL,
Age INT DEFAULT 18,
IsAdmin BIT DEFAULT 0,
IsMinor AS IIF(Age <= 18, 1, 0)
);
Példakonfiguráció
{
"runtime": {
"rest": {
"request-body-strict": false
}
}
}
Insert Behavior with request-body-strict: false
Payload-kérése:
{
"Id": 999,
"Name": "Alice",
"Age": null,
"IsAdmin": null,
"IsMinor": false,
"ExtraField": "ignored"
}
eredményként kapott beszúrási utasítás:
INSERT INTO Users (Name) VALUES ('Alice');
-- Default values for Age (18) and IsAdmin (0) are applied by the database.
-- IsMinor is ignored because it’s a computed column.
-- ExtraField is ignored.
-- The database generates the Id value.
Válasz hasznos adatai:
{
"Id": 1, // Auto-generated by the database
"Name": "Alice",
"Age": 18, // Default applied
"IsAdmin": false, // Default applied
"IsMinor": true // Computed
}
FRISSÍTÉSi viselkedés request-body-strict: false
Payload-kérése:
{
"Id": 1,
"Name": "Alice Updated",
"Age": null, // explicitely set to 'null'
"IsMinor": true, // ignored because computed
"ExtraField": "ignored"
}
eredményként kapott frissítési utasítás:
UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.
Válasz hasznos adatai:
{
"Id": 1,
"Name": "Alice Updated",
"Age": null,
"IsAdmin": false,
"IsMinor": false // Recomputed by the database (false when age is `null`)
}
Gazdagép (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
host |
tárgy | ❌ Nem | Egyik sem |
A futtatókörnyezet konfigurációjának host
szakasza kulcsfontosságú beállításokat biztosít a Data API builder működési környezetéhez. Ezek a beállítások tartalmazzák a működési módokat, a CORS-konfigurációt és a hitelesítési adatokat.
Formátum
{
"runtime": {
"host": {
"mode": "production" (default) | "development",
"max-response-size-mb": <integer; default: 158>,
"cors": {
"origins": ["<array-of-strings>"],
"allow-credentials": <true> | <false> (default)
},
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
mode |
❌ Nem | enum sztring | termelés |
cors |
❌ Nem | tárgy | Egyik sem |
authentication |
❌ Nem | tárgy | Egyik sem |
Példák
Íme egy példa a fejlesztési üzemeltetésre konfigurált futtatókörnyezetre.
{
"runtime": {
"host": {
"mode": "development",
"cors": {
"allow-credentials": false,
"origins": ["*"]
},
"authentication": {
"provider": "Simulator"
}
}
}
}
Mód (Gazdagép futtatókörnyezete)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host |
mode |
húr | ❌ Nem | "production" |
Meghatározza, hogy a Data API builder motorjának development
vagy production
módban kell-e futnia. Az alapértelmezett érték: production
.
A mögöttes adatbázishibák általában részletesen jelennek meg, ha a naplók alapértelmezett részletességi szintjét a fejlesztés során Debug
értékre állítja. Éles környezetben a naplók részletességi szintje Error
.
Borravaló
Az alapértelmezett naplószint további felülbírálható dab start --LogLevel <level-of-detail>
használatával. További információ: parancssori felület (CLI) referencia.
Formátum
{
"runtime": {
"host": {
"mode": "production" (default) | "development"
}
}
}
Értékrend
Íme a tulajdonság engedélyezett értékeinek listája:
Leírás | |
---|---|
production |
Használat éles környezetben az Azure-ban |
development |
Használat a helyi gépen történő fejlesztés során |
Viselkedésmódok
- Csak
development
módban érhető el a Swagger. - Csak
development
módban érhető el a Banana Cake Pop.
Válasz maximális mérete (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host |
max-response-size-mb |
egész szám | ❌ Nem | 158 |
Az adott eredmény maximális méretét (megabájtban) állítja be. Ez a beállítás lehetővé teszi a felhasználók számára, hogy konfigurálják a gazdaplatform memóriája által az alapul szolgáló adatforrásokból származó adatok streamelése során kezelhető adatok mennyiségét.
Ha a felhasználók nagy eredményhalmazokat kérnek, az megterhelheti az adatbázist és a Data API buildert. Ennek megoldásához max-response-size-mb
lehetővé teszi a fejlesztők számára, hogy megabájtban mérve korlátozzák a válasz maximális méretét az adatforrásból származó adatfolyamként. Ez a korlát a teljes adatméreten alapul, nem a sorok számán. Mivel az oszlopok mérete eltérő lehet, egyes oszlopok (például szöveg, bináris, XML vagy JSON) akár 2 GB-ot is tartalmazhatnak, így az egyes sorok akár nagyon nagyok is lehetnek. Ez a beállítás segít a fejlesztőknek megvédeni végpontjaikat a válaszméretek korlátozásával és a rendszer túlterhelésének megelőzésével, miközben rugalmasan kezelik a különböző adattípusokat.
Engedélyezett értékek
Érték | Eredmény |
---|---|
null |
Alapértelmezés szerint 158 megabájt, ha nincs megadva vagy explicit módon null . |
integer |
Minden pozitív 32 bites egész szám támogatott. |
< 0 |
Nem támogatott. Érvényesítési hibák akkor fordulnak elő, ha 1 MB-nál kisebbre van beállítva. |
Formátum
{
"runtime": {
"host": {
"max-response-size-mb": <integer; default: 158>
}
}
}
CORS (Gazdagép-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host |
cors |
tárgy | ❌ Nem | Egyik sem |
A Data API builder motor gazdagépének több forrásból származó erőforrás-megosztási (CORS- ) beállításai.
Formátum
{
"runtime": {
"host": {
"cors": {
"origins": ["<array-of-strings>"],
"allow-credentials": <true> | <false> (default)
}
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
allow-credentials |
❌ Nem | Logikai |
origins |
❌ Nem | sztringtömb |
Hitelesítő adatok engedélyezése (gazdagép-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.cors |
allow-credentials |
Logikai | ❌ Nem | Téves |
Ha igaz, beállítja a Access-Control-Allow-Credentials
CORS-fejlécet.
Jegyzet
Az Access-Control-Allow-Credentials
CORS-fejlécről további információt MDN Web Docs CORS-referenciacímű cikkben talál.
Formátum
{
"runtime": {
"host": {
"cors": {
"allow-credentials": <true> (default) | <false>
}
}
}
}
Forrás (gazdagép-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.cors |
origins |
sztringtömb | ❌ Nem | Egyik sem |
Beállít egy tömböt a CORS engedélyezett forrásainak listájával. Ez a beállítás lehetővé teszi a *
helyettesítő karaktert az összes forráshoz.
Formátum
{
"runtime": {
"host": {
"cors": {
"origins": ["<array-of-strings>"]
}
}
}
}
Példák
Íme egy példa egy gazdagépre, amely minden forrásból származó hitelesítő adatok nélkül teszi lehetővé a CORS-t.
{
"runtime": {
"host": {
"cors": {
"allow-credentials": false,
"origins": ["*"]
}
}
}
}
Hitelesítés (gazdagép futtatókörnyezete)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host |
authentication |
tárgy | ❌ Nem | Egyik sem |
Konfigurálja a Data API Builder-gazdagép hitelesítését.
Formátum
{
"runtime": {
"host": {
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
provider |
❌ Nem | enum sztring | StaticWebApps |
jwt |
❌ Nem | tárgy | Egyik sem |
hitelesítés és az ügyfelek feladatai
A Data API Buildert úgy tervezték, hogy szélesebb körű biztonsági folyamaton belül működjön, és a kérések feldolgozása előtt fontos lépéseket kell konfigurálnia. Fontos tisztában lenni azzal, hogy a Data API Builder nem hitelesíti a közvetlen hívót (például a webalkalmazást), hanem a végfelhasználót egy megbízható identitásszolgáltató által biztosított érvényes JWT-jogkivonat (például Entra-azonosító) alapján. Amikor egy kérés eléri a Data API Buildert, feltételezi, hogy a JWT-jogkivonat érvényes, és ellenőrzi a konfigurált előfeltételeket, például konkrét jogcímeket. Ezután engedélyezési szabályokat alkalmazunk annak meghatározására, hogy a felhasználó mit érhet el vagy módosíthat.
Az engedélyezést követően a Data API Builder a kapcsolati sztringben megadott fiókkal hajtja végre a kérést. Mivel ez a fiók gyakran emelt szintű engedélyeket igényel a különböző felhasználói kérések kezeléséhez, a kockázat csökkentése érdekében elengedhetetlen a hozzáférési jogosultságok minimalizálása. Javasoljuk az architektúra védelmét úgy, hogy konfigurál egy privát kapcsolatot az előtérbeli webalkalmazás és az API-végpont között, valamint a Data API Buildert üzemeltető gép megkeményedésével. Ezek a mértékek biztosítják a környezet biztonságát, védik az adatokat, és minimalizálják azokat a biztonsági réseket, amelyeket a bizalmas információk elérésére, módosítására vagy kiszűrésére lehet kihasználni.
Szolgáltató (gazdagép futtatókörnyezete)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.authentication |
provider |
húr | ❌ Nem | "StaticWebApps" |
A authentication.provider
konfiguráción belüli host
beállítás határozza meg a Data API builder által használt hitelesítési módszert. Meghatározza, hogy az API hogyan ellenőrzi az erőforrásokhoz hozzáférni próbáló felhasználók vagy szolgáltatások identitását. Ez a beállítás rugalmas üzembe helyezést és integrációt tesz lehetővé a különböző környezetekhez és biztonsági követelményekhez igazított különböző hitelesítési mechanizmusok támogatásával.
Szolgáltató | Leírás |
---|---|
StaticWebApps |
Utasítja a Data API Buildert, hogy keressen olyan HTTP-fejléceket, amelyek csak statikus Web Apps-környezetben való futtatáskor jelennek meg. |
AppService |
Ha a futtatókörnyezet az Azure AppService-ben van üzemeltetve, és engedélyezve van az AppService-hitelesítés (EasyAuth). |
AzureAd |
A Microsoft Entra Identity-et úgy kell konfigurálni, hogy hitelesíteni tudja a Data API Buildernek (a "Kiszolgálóalkalmazásnak") küldött kéréseket. További információ: Microsoft Entra ID-hitelesítés. |
Simulator |
Egy konfigurálható hitelesítésszolgáltató, amely arra utasítja a Data API builder motort, hogy az összes kérést hitelesítve kezelje. További információ: helyi hitelesítés. |
Formátum
{
"runtime": {
"host": {
"authentication": {
"provider": "StaticWebApps" (default) | ...
}
}
}
}
Értékrend
Íme a tulajdonság engedélyezett értékeinek listája:
Leírás | |
---|---|
StaticWebApps |
Azure Static Web Apps |
AppService |
Azure App Service |
AzureAD |
Microsoft Entra-azonosító |
Simulator |
Szimulátor |
JSON webes jogkivonatok (gazdagép-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.authentication |
jwt |
tárgy | ❌ Nem | Egyik sem |
Ha a hitelesítésszolgáltató AzureAD
(Microsoft Entra ID) értékre van állítva, akkor ez a szakasz a JSOn Webes jogkivonatok (JWT) jogkivonat célközönségének és kiállítóinak megadásához szükséges. Ezekkel az adatokkal érvényesítheti a jogkivonatokat a Microsoft Entra-bérlőn.
Akkor szükséges, ha a hitelesítésszolgáltató AzureAD
a Microsoft Entra-azonosítóhoz. Ebben a szakaszban meg kell adni a audience
és a issuer
, hogy a kapott JWT-jogkivonatot a kívánt AzureAD
-bérlőn érvényesítse hitelesítés céljából.
Beállítás | Leírás |
---|---|
hallgatóság | Azonosítja a jogkivonat kívánt címzettje; jellemzően az alkalmazás Microsoft Entra Identityben (vagy az ön identitásszolgáltatójában) regisztrált azonosítója, amely biztosítja, hogy a jogkivonat valóban ki legyen állítva az alkalmazás számára. |
kibocsátó | Megadja a kibocsátó hatóság URL-címét, amely a JWT-t kibocsátó jogkivonat-szolgáltatás. Ennek az URL-címnek meg kell egyeznie az identitásszolgáltató azon kiállítói URL-címével, amelyből a JWT-t beszerezték, érvényesítve a jogkivonat eredetét. |
Formátum
{
"runtime": {
"host": {
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
audience |
❌ Nem | húr | Egyik sem |
issuer |
❌ Nem | húr | Egyik sem |
Példák
A Data API Builder (DAB) rugalmas hitelesítési támogatást nyújt a Microsoft Entra Identity és az egyéni JSON Web Token (JWT) kiszolgálók integrálásával. Ezen a képen a JWT Server azt a hitelesítési szolgáltatást jelöli, amely JWT-jogkivonatokat ad ki az ügyfeleknek a sikeres bejelentkezéskor. Az ügyfél ezután átadja a jogkivonatot a DAB-nak, amely kikérdezheti a jogcímeit és tulajdonságait.
Az alábbiakban példákat láthat a host
tulajdonságra, amelyek különböző architekturális döntéseket hozhatnak a megoldásban.
Azure Static Web Apps
{
"host": {
"mode": "development",
"cors": {
"origins": ["https://dev.example.com"],
"credentials": true
},
"authentication": {
"provider": "StaticWebApps"
}
}
}
A StaticWebApps
a Data API Builder elvárja, hogy az Azure Static Web Apps hitelesítse a kérést, és a X-MS-CLIENT-PRINCIPAL
HTTP-fejléc jelen van.
Azure App Service
{
"host": {
"mode": "production",
"cors": {
"origins": [ "https://api.example.com" ],
"credentials": false
},
"authentication": {
"provider": "AppService",
"jwt": {
"audience": "9e7d452b-7e23-4300-8053-55fbf243b673",
"issuer": "https://example-appservice-auth.com"
}
}
}
}
A hitelesítés egy támogatott identitásszolgáltatóhoz van delegálva, ahol a hozzáférési jogkivonat kibocsátható. A Data API Builder felé irányuló bejövő kérésekhez egy beszerzett hozzáférési jogkivonatot kell tartalmaznia. A Data API Builder ezután ellenőrzi a bemutatott hozzáférési jogkivonatokat, biztosítva, hogy a Data API Builder legyen a jogkivonat célközönsége.
Microsoft Entra-azonosító
{
"host": {
"mode": "production",
"cors": {
"origins": [ "https://api.example.com" ],
"credentials": true
},
"authentication": {
"provider": "AzureAD",
"jwt": {
"audience": "c123d456-a789-0abc-a12b-3c4d56e78f90",
"issuer": "https://login.microsoftonline.com/98765f43-21ba-400c-a5de-1f2a3d4e5f6a/v2.0"
}
}
}
}
Szimulátor (csak fejlesztés)
{
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
}
Célközönség (gazdagép-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.authentication.jwt |
audience |
húr | ❌ Nem | Egyik sem |
A JWT-jogkivonat célközönsége.
Formátum
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<client-id>"
}
}
}
}
}
Kiállító (gazdagép futtatókörnyezete)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.host.authentication.jwt |
issuer |
húr | ❌ Nem | Egyik sem |
A JWT-jogkivonat kiállítója.
Formátum
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"issuer": "<issuer-url>"
}
}
}
}
}
Lapozás (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
pagination |
tárgy | ❌ Nem | Egyik sem |
A REST- és GraphQL-végpontok lapozási korlátait konfigurálja.
Formátum
{
"runtime": {
"pagination": {
"max-page-size": <integer; default: 100000>,
"default-page-size": <integer; default: 100>
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
max-page-size |
❌ Nem | egész szám | 100,000 |
default-page-size |
❌ Nem | egész szám | 100 |
Példakonfiguráció
{
"runtime": {
"pagination": {
"max-page-size": 1000,
"default-page-size": 2
}
},
"entities": {
"Users": {
"source": "dbo.Users",
"permissions": [
{
"actions": ["read"],
"role": "anonymous"
}
]
}
}
}
REST-lapozási példa
Ebben a példában a REST GET kérés kiadása https://localhost:5001/api/users
két rekordot ad vissza a value
tömbben, mert a default-page-size
értéke 2. Ha további eredmények is léteznek, a Data API Builder egy nextLink
tartalmaz a válaszban. A nextLink
egy $after
paramétert tartalmaz a következő adatoldal beolvasásához.
Kérés:
GET https://localhost:5001/api/users
Válasz:
{
"value": [
{
"Id": 1,
"Name": "Alice",
"Age": 30,
"IsAdmin": true,
"IsMinor": false
},
{
"Id": 2,
"Name": "Bob",
"Age": 17,
"IsAdmin": false,
"IsMinor": true
}
],
"nextLink": "https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}
A nextLink
használatával az ügyfél lekérheti a következő találatokat.
GraphQL-lapozási példa
A GraphQL-ben a lapozáshoz használja a hasNextPage
és endCursor
mezőket. Ezek a mezők azt jelzik, hogy további eredmények érhetők-e el, és a kurzort adja meg a következő oldal beolvasásához.
Lekérdezés:
query {
users {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Válasz:
{
"data": {
"users": {
"items": [
{
"Id": 1,
"Name": "Alice",
"Age": 30,
"IsAdmin": true,
"IsMinor": false
},
{
"Id": 2,
"Name": "Bob",
"Age": 17,
"IsAdmin": false,
"IsMinor": true
}
],
"hasNextPage": true,
"endCursor": "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}
}
}
A következő lap beolvasásához adja meg a endCursor
értéket a következő lekérdezésben:
Lekérdezés kurzorral:
query {
users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
items {
Id
Name
Age
IsAdmin
IsMinor
}
hasNextPage
endCursor
}
}
Oldalméret módosítása
A REST és a GraphQL egyaránt lehetővé teszi a lekérdezésenkénti eredmények számának módosítását $limit
(REST) vagy first
(GraphQL) használatával.
$limit
/
first érték |
Magatartás |
---|---|
-1 |
Alapértelmezett érték: max-page-size . |
< max-page-size |
A megadott értékre korlátozza az eredményeket. |
0 vagy < -1 |
Nem támogatott. |
> max-page-size |
Capped at max-page-size . |
Példa REST-lekérdezésre:
GET https://localhost:5001/api/users?$limit=5
Példa GraphQL-lekérdezésre:
query {
users(first: 5) {
items {
Id
Name
Age
IsAdmin
IsMinor
}
}
}
Oldalméret maximális száma (lapszámozási futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.pagination |
max-page-size |
Int | ❌ Nem | 100,000 |
Beállítja a REST vagy a GraphQL által visszaadott legfelső szintű rekordok maximális számát. Ha egy felhasználó több kérést kér, mint max-page-size
, az eredmények a max-page-size
lesznek leképezve.
Engedélyezett értékek
Érték | Eredmény |
---|---|
-1 |
Alapértelmezés szerint a maximálisan támogatott érték. |
integer |
Minden pozitív 32 bites egész szám támogatott. |
< -1 |
Nem támogatott. |
0 |
Nem támogatott. |
Formátum
{
"runtime": {
"pagination": {
"max-page-size": <integer; default: 100000>
}
}
}
Alapértelmezett oldalméret (lapszámozási futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.pagination |
default-page-size |
Int | ❌ Nem | 100 |
Beállítja a lapozás engedélyezésekor visszaadott legfelső szintű rekordok alapértelmezett számát, de nincs megadva explicit oldalméret.
Engedélyezett értékek
Érték | Eredmény |
---|---|
-1 |
Az aktuális max-page-size beállítás alapértelmezett értéke. |
integer |
Az aktuális max-page-size kisebb pozitív egész szám. |
< -1 |
Nem támogatott. |
0 |
Nem támogatott. |
Gyorsítótár (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
cache |
tárgy | ❌ Nem | Egyik sem |
Engedélyezi és konfigurálja a teljes futtatókörnyezet gyorsítótárazását.
Formátum
{
"runtime": {
"cache": <object>
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
❌ Nem | Logikai | Egyik sem |
ttl-seconds |
❌ Nem | egész szám | 5 |
Példák
Ebben a példában a gyorsítótár engedélyezve van, és az elemek 30 másodperc után lejárnak.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
Engedélyezve (Gyorsítótár-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.cache |
enabled |
Logikai | ❌ Nem | Téves |
Globális gyorsítótárazást tesz lehetővé az összes entitás számára. Alapértelmezett érték: false
.
Formátum
{
"runtime": {
"cache": {
"enabled": <boolean>
}
}
}
Példák
Ebben a példában a gyorsítótár le van tiltva.
{
"runtime": {
"cache": {
"enabled": false
}
}
}
TTL másodpercben (gyorsítótár-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.cache |
ttl-seconds |
egész szám | ❌ Nem | 5 |
Az élettartam (TTL) értékét másodpercben konfigurálja a gyorsítótárazott elemekhez. Ennyi idő elteltével a rendszer automatikusan eltávolítja az elemeket a gyorsítótárból. Az alapértelmezett érték 5
másodperc.
Formátum
{
"runtime": {
"cache": {
"ttl-seconds": <integer>
}
}
}
Példák
Ebben a példában a gyorsítótár globálisan engedélyezve van, és minden elem 15 másodperc után lejár.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 15
}
}
}
Telemetria (futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime |
telemetry |
tárgy | ❌ Nem | Egyik sem |
Ez a tulajdonság konfigurálja az Application Insightst az API-naplók központosítására. További információ.
Formátum
{
"runtime": {
"telemetry": {
"application-insights": {
"enabled": <true; default: true> | <false>,
"connection-string": <string>
}
}
}
}
Application Insights (Telemetria-futtatókörnyezet)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.telemetry |
application-insights |
tárgy | ✔️ Igen | Egyik sem |
Engedélyezve (Application Insights-telemetria)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.telemetry.application-insights |
enabled |
Logikai | ❌ Nem | Igaz |
Kapcsolati sztring (Application Insights-telemetria)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
runtime.telemetry.application-insights |
connection-string |
húr | ✔️ Igen | Egyik sem |
Entitások
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
$root |
entities |
tárgy | ✔️ Igen | Egyik sem |
A entities
szakasz a konfigurációs fájl magjaként szolgál, így hidat hoz létre az adatbázis-objektumok és a hozzájuk tartozó API-végpontok között. Ez a szakasz leképzi az adatbázis-objektumokat a közzétett végpontokra. Ez a szakasz a tulajdonságok leképezését és az engedélydefiníciót is tartalmazza. Minden közzétett entitás egy dedikált objektumban van definiálva. A rendszer az objektum tulajdonságnevét használja a közzéteendő entitás neveként.
Ez a szakasz azt határozza meg, hogy az adatbázis egyes entitásai hogyan jelenik meg az API-ban, beleértve a tulajdonságleképezéseket és az engedélyeket. Minden entitás a saját alszakaszában van beágyazva, és az entitás neve kulcsként szolgál a konfiguráció során.
Formátum
{
"entities": {
"<entity-name>": {
"rest": {
"enabled": <true; default: true> | <false>,
"path": <string; default: "<entity-name>">,
"methods": <array of strings; default: ["GET", "POST"]>
},
"graphql": {
"enabled": <true; default: true> | <false>,
"type": {
"singular": <string>,
"plural": <string>
},
"operation": <"query" | "mutation"; default: "query">
},
"source": {
"object": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": <array of strings>,
"parameters": {
"<parameter-name>": <string | number | boolean>
}
},
"mappings": {
"<database-field-name>": <string>
},
"relationships": {
"<relationship-name>": {
"cardinality": <"one" | "many">,
"target.entity": <string>,
"source.fields": <array of strings>,
"target.fields": <array of strings>,
"linking.object": <string>,
"linking.source.fields": <array of strings>,
"linking.target.fields": <array of strings>
}
},
"permissions": [
{
"role": <"anonymous" | "authenticated" | "custom-role-name">,
"actions": <array of strings>,
"fields": {
"include": <array of strings>,
"exclude": <array of strings>
},
"policy": {
"database": <string>
}
}
]
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
source |
✔️ Igen | tárgy |
permissions |
✔️ Igen | tömb |
rest |
❌ Nem | tárgy |
graphql |
❌ Nem | tárgy |
mappings |
❌ Nem | tárgy |
relationships |
❌ Nem | tárgy |
cache |
❌ Nem | tárgy |
Példák
Ez a JSON-objektum például arra utasítja a Data API Buildert, hogy tegyen közzé egy User
nevű GraphQL-entitást és egy REST-végpontot, amely a /User
útvonalon keresztül érhető el. A dbo.User
adatbázistábla az entitást háttérbe irányítja, és a konfiguráció lehetővé teszi, hogy bárki névtelenül hozzáférjen a végponthoz.
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
]
}
}
}
Ez a példa deklarálja a User
entitást. Ez a név User
a konfigurációs fájl bármely pontján használható, ahol entitásokra hivatkoznak. Ellenkező esetben az entitás neve nem releváns a végpontok szempontjából.
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table",
"key-fields": ["Id"],
"parameters": {} // only when source.type = stored-procedure
},
"rest": {
"enabled": true,
"path": "/users",
"methods": [] // only when source.type = stored-procedure
},
"graphql": {
"enabled": true,
"type": {
"singular": "User",
"plural": "Users"
},
"operation": "query"
},
"mappings": {
"id": "Id",
"name": "Name",
"age": "Age",
"isAdmin": "IsAdmin"
},
"permissions": [
{
"role": "authenticated",
"actions": ["read"], // "execute" only when source.type = stored-procedure
"fields": {
"include": ["id", "name", "age", "isAdmin"],
"exclude": []
},
"policy": {
"database": "@claims.userId eq @item.id"
}
},
{
"role": "admin",
"actions": ["create", "read", "update", "delete"],
"fields": {
"include": ["*"],
"exclude": []
},
"policy": {
"database": "@claims.userRole eq 'UserAdmin'"
}
}
]
}
}
}
Forrás
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
source |
tárgy | ✔️ Igen | Egyik sem |
A {entity}.source
konfiguráció összekapcsolja az API által közzétett entitást és annak mögöttes adatbázis-objektumát. Ez a tulajdonság megadja az entitás által képviselt adatbázistáblát, nézetet vagy tárolt eljárást, amely közvetlen kapcsolatot hoz létre az adatok lekéréséhez és kezeléséhez.
Olyan egyszerű forgatókönyvek esetén, amikor az entitás közvetlenül egy adatbázistáblára van leképezve, a forrástulajdonságnak csak az adatbázis-objektum nevére van szüksége. Ez az egyszerűség megkönnyíti a gyakori használati esetek gyors beállítását: "source": "dbo.User"
.
Formátum
{
"entities": {
"<entity-name>": {
"source": {
"object": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": <array of strings>,
"parameters": { // only when source.type = stored-procedure
"<name>": <string | number | boolean>
}
}
}
}
}
Kellékek
Szükséges | Típus | |
---|---|---|
object |
✔️ Igen | húr |
type |
✔️ Igen | enum sztring |
parameters |
❌ Nem | tárgy |
key-fields |
❌ Nem | sztringtömb |
Példák
1. Egyszerű táblázatleképezés:
Ez a példa bemutatja, hogyan társíthat egy User
entitást egy forrástáblához dbo.Users
.
SQL-
CREATE TABLE dbo.Users (
Id INT PRIMARY KEY,
Name NVARCHAR(100),
Age INT,
IsAdmin BIT
);
konfigurációs
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
}
}
}
}
2. Tárolt eljárás példa:
Ez a példa bemutatja, hogyan társíthat egy User
entitást egy forrásalkalmazáshoz dbo.GetUsers
.
SQL-
CREATE PROCEDURE GetUsers
@IsAdmin BIT
AS
SELECT Id, Name, Age, IsAdmin
FROM dbo.Users
WHERE IsAdmin = @IsAdmin;
konfigurációs
{
"entities": {
"User": {
"source": {
"type": "stored-procedure",
"object": "GetUsers",
"parameters": {
"IsAdmin": "boolean"
}
},
"mappings": {
"Id": "id",
"Name": "name",
"Age": "age",
"IsAdmin": "isAdmin"
}
}
}
}
A mappings
tulajdonság nem kötelező a tárolt eljárásokhoz.
Tárgy
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.source |
object |
húr | ✔️ Igen | Egyik sem |
A használni kívánt adatbázis-objektum neve. Ha az objektum a dbo
sémához tartozik, a séma megadása nem kötelező. Emellett az objektumnevek körüli szögletes zárójelek (például [dbo].[Users]
és dbo.Users
) használhatók vagy kihagyhatók.
Példák
SQL-
CREATE TABLE dbo.Users (
Id INT PRIMARY KEY,
Name NVARCHAR(100),
Age INT,
IsAdmin BIT
);
konfigurációs
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
}
}
}
}
Alternatív jelölés séma és zárójelek nélkül:
Ha a táblázat a dbo
sémában található, kihagyhatja a sémát vagy a zárójeleket:
{
"entities": {
"User": {
"source": {
"object": "Users",
"type": "table"
}
}
}
}
Típus (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.source |
type |
húr | ✔️ Igen | Egyik sem |
A type
tulajdonság azonosítja az entitás mögötti adatbázis-objektum típusát, beleértve a view
, table
és stored-procedure
. Ez a tulajdonság kötelező, és nincs alapértelmezett értéke.
Formátum
{
"entities": {
"<entity-name>": {
"type": <"view" | "stored-procedure" | "table">
}
}
}
Értékrend
Érték | Leírás |
---|---|
table |
Egy táblát jelöl. |
stored-procedure |
Tárolt eljárást jelöl. |
view |
Nézetet jelöl. |
Példák
1. Példa táblázatra:
SQL-
CREATE TABLE dbo.Users (
Id INT PRIMARY KEY,
Name NVARCHAR(100),
Age INT,
IsAdmin BIT
);
konfigurációs
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
}
}
}
}
2. Példa megtekintése:
SQL-
CREATE VIEW dbo.AdminUsers AS
SELECT Id, Name, Age
FROM dbo.Users
WHERE IsAdmin = 1;
konfigurációs
{
"entities": {
"AdminUsers": {
"source": {
"object": "dbo.AdminUsers",
"type": "view",
"key-fields": ["Id"]
},
"mappings": {
"Id": "id",
"Name": "name",
"Age": "age"
}
}
}
}
Megjegyzés: A key-fields
megadása azért fontos a nézeteknél, mert nincsenek bennük eredendő elsődleges kulcsok.
3. Tárolt eljárás példa:
SQL-
CREATE PROCEDURE dbo.GetUsers (@IsAdmin BIT)
AS
SELECT Id, Name, Age, IsAdmin
FROM dbo.Users
WHERE IsAdmin = @IsAdmin;
konfigurációs
{
"entities": {
"User": {
"source": {
"type": "stored-procedure",
"object": "GetUsers",
"parameters": {
"IsAdmin": "boolean"
}
}
}
}
}
Kulcsmezők
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.source |
key-fields |
sztringtömb | ❌ Nem | Egyik sem |
A {entity}.key-fields
tulajdonság különösen szükséges a nézetek által támogatott entitásokhoz, így a Data API Builder tudja, hogyan azonosíthat és adhat vissza egyetlen elemet. Ha type
key-fields
megadása nélkül view
, a motor nem indul el. Ez a tulajdonság táblákkal és tárolt eljárásokkal engedélyezett, de ezekben az esetekben nem használatos.
Fontos
Ez a tulajdonság akkor szükséges, ha az objektum típusa view
.
Formátum
{
"entities": {
"<entity-name>": {
"source": {
"type": <"view" | "stored-procedure" | "table">,
"key-fields": <array of strings>
}
}
}
}
Példa: Nézet kulcsmezőkkel
Ez a példa a dbo.AdminUsers
nézetet használja a kulcsmezőként megjelölt Id
.
SQL-
CREATE VIEW dbo.AdminUsers AS
SELECT Id, Name, Age
FROM dbo.Users
WHERE IsAdmin = 1;
konfigurációs
{
"entities": {
"AdminUsers": {
"source": {
"object": "dbo.AdminUsers",
"type": "view",
"key-fields": ["Id"]
}
}
}
}
Paraméterek
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.source |
parameters |
tárgy | ❌ Nem | Egyik sem |
A entities.{entity}.source
parameters
tulajdonsága tárolt eljárások által támogatott entitásokhoz használható. Biztosítja a tárolt eljáráshoz szükséges paraméternevek és adattípusok megfelelő leképezését.
Fontos
A parameters
tulajdonság szükséges, ha az objektum type
stored-procedure
, és a paraméter megadása kötelező.
Formátum
{
"entities": {
"<entity-name>": {
"source": {
"type": "stored-procedure",
"parameters": {
"<parameter-name-1>": <string | number | boolean>,
"<parameter-name-2>": <string | number | boolean>
}
}
}
}
}
1. példa: Tárolt eljárás paraméterek nélkül
SQL-
CREATE PROCEDURE dbo.GetUsers AS
SELECT Id, Name, Age, IsAdmin FROM dbo.Users;
konfigurációs
{
"entities": {
"Users": {
"source": {
"object": "dbo.GetUsers",
"type": "stored-procedure"
}
}
}
}
2. példa: Tárolt eljárás paraméterekkel
SQL-
CREATE PROCEDURE dbo.GetUser (@userId INT) AS
SELECT Id, Name, Age, IsAdmin FROM dbo.Users
WHERE Id = @userId;
konfigurációs
{
"entities": {
"User": {
"source": {
"object": "dbo.GetUser",
"type": "stored-procedure",
"parameters": {
"userId": "number"
}
}
}
}
}
Engedélyek
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
permissions |
tárgy | ✔️ Igen | Egyik sem |
Ez a szakasz azt határozza meg, hogy ki férhet hozzá a kapcsolódó entitáshoz, és hogy milyen műveletek engedélyezettek. Az engedélyek szerepkörök és CRUD-műveletek: create
, read
, update
és delete
. A permissions
szakasz meghatározza, hogy mely szerepkörök férhetnek hozzá a kapcsolódó entitáshoz, és mely műveleteket használhatják.
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"actions": ["create", "read", "update", "delete", "execute", "*"]
}
]
}
}
}
Akció | Leírás |
---|---|
create |
Új rekord létrehozását teszi lehetővé az entitásban. |
read |
Lehetővé teszi rekordok beolvasását vagy beolvasását az entitásból. |
update |
Lehetővé teszi az entitás meglévő rekordjainak frissítését. |
delete |
Engedélyezi a rekordok törlését az entitásból. |
execute |
Lehetővé teszi a tárolt eljárás vagy művelet végrehajtását. |
* |
Megadja az összes vonatkozó CRUD-műveletet. |
Példák
1. példa: Névtelen szerepkör a felhasználói entitásokon
Ebben a példában a anonymous
szerepkör az User
entitás összes lehetséges műveletéhez való hozzáféréssel van definiálva.
{
"entities": {
"User": {
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
]
}
}
}
2. példa: Vegyes műveletek névtelen szerepkörökhöz
Ez a példa bemutatja, hogyan keverheti össze a sztring- és objektumtömbműveleteket az User
entitáshoz.
{
"entities": {
"User": {
"permissions": [
{
"role": "anonymous",
"actions": [
{ "action": "read" },
"create"
]
}
]
}
}
}
Névtelen szerepkör: Lehetővé teszi a névtelen felhasználók számára, hogy az összes mezőt beolvassák, kivéve egy feltételezett bizalmas mezőt (például secret-field
). A "include": ["*"]
"exclude": ["secret-field"]
használatával elrejti a secret-field
, miközben minden más mezőhöz hozzáférést engedélyez.
Hitelesített szerepkör: Lehetővé teszi a hitelesített felhasználók számára adott mezők olvasását és frissítését. Például a id
, name
és age
explicit belefoglalása, de a isAdmin
kizárása bemutatja, hogy a kizárások hogyan bírálják felül a belefoglalásokat.
rendszergazdai szerepkör: A rendszergazdák kivétel nélkül minden műveletet (*
) végrehajthatnak az összes mezőn. Ha üres "exclude": []
tömböt tartalmazó "include": ["*"]
ad meg, az minden mezőhöz hozzáférést biztosít.
Ez a konfiguráció:
"fields": {
"include": [],
"exclude": []
}
gyakorlatilag megegyezik a következő értékeket:
"fields": {
"include": ["*"],
"exclude": []
}
Vegye figyelembe ezt a beállítást is:
"fields": {
"include": [],
"exclude": ["*"]
}
Ez azt határozza meg, hogy a mezők nincsenek explicit módon belefoglalva, és az összes mező ki van zárva, ami általában teljes mértékben korlátozza a hozzáférést.
Gyakorlati használat: Az ilyen konfiguráció ellentétesnek tűnhet, mivel minden mezőhöz korlátozza a hozzáférést. Azonban olyan helyzetekben is használható, amikor egy szerepkör bizonyos műveleteket hajt végre (például entitásokat hoz létre), és nem fér hozzá az adataihoz.
Ugyanez a viselkedés, de különböző szintaxissal a következő lenne:
"fields": {
"include": ["Id", "Name"],
"exclude": ["*"]
}
Ez a beállítás csak Id
és Name
mezőket próbál belefoglalni, de kizárja az összes mezőt a exclude
helyettesítő karaktere miatt.
Ugyanezt a logikát a következő módon lehet kifejezni:
"fields": {
"include": ["Id", "Name"],
"exclude": ["Id", "Name"]
}
Mivel exclude
elsőbbséget élvez include
, a exclude: ["*"]
megadása azt jelenti, hogy az összes mező ki van zárva, még a include
mezői is. Így első pillantásra úgy tűnhet, hogy ez a konfiguráció megakadályozza a mezők akadálymentesítését.
Fordított: Ha a szándék az, hogy csak Id
és Name
mezőkhöz adjon hozzáférést, egyértelműbb és megbízhatóbb, ha csak azokat a mezőket adja meg a include
szakaszban kizárási helyettesítő karakter használata nélkül:
"fields": {
"include": ["Id", "Name"],
"exclude": []
}
Kellékek
Szükséges | Típus | |
---|---|---|
role |
✔️ Igen | húr |
actions (sztringtömb)vagy actions (objektumtömb) |
✔️ Igen | objektum vagy sztringtömb |
Szerep
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.permissions |
role |
húr | ✔️ Igen | Egyik sem |
Annak a szerepkörnek a nevét tartalmazó sztring, amelyre a megadott engedély vonatkozik. A szerepkörök beállítják azt az engedélykörnyezetet, amelyben a kérést végre kell hajtani. A futtatókörnyezeti konfigurációban definiált összes entitáshoz meghatározhat szerepköröket és kapcsolódó engedélyeket, amelyek meghatározzák, hogyan érhető el az entitás REST- és GraphQL-végpontokon keresztül. A szerepkörök nem additívak.
A Data API Builder egyetlen szerepkör kontextusában értékeli ki a kéréseket:
Szerep | Leírás |
---|---|
anonymous |
Nem jelenik meg hozzáférési jogkivonat |
authenticated |
Megjelenik egy érvényes hozzáférési jogkivonat |
<custom-role> |
Megjelenik egy érvényes hozzáférési jogkivonat, és a X-MS-API-ROLE HTTP-fejléc a jogkivonatban található szerepkört adja meg |
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": <"anonymous" | "authenticated" | "custom-role">,
"actions": ["create", "read", "update", "delete", "execute", "*"],
"fields": {
"include": <array of strings>,
"exclude": <array of strings>
}
}
]
}
}
}
Példák
Ez a példa egy reader
nevű szerepkört határoz meg, amely csak read
engedélyekkel rendelkezik a User
entitáson.
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
A <custom-role>
akkor használhatja, ha egy érvényes hozzáférési jogkivonat jelenik meg , és a X-MS-API-ROLE
HTTP-fejlécet, megadva egy felhasználói szerepkört, amely a hozzáférési jogkivonat szerepkör-jogcímében is szerepel. Az alábbiakban példákat talál az User
entitáshoz érkező GET-kérelmekre, beleértve az engedélyezési tulajdonosi jogkivonatot és a X-MS-API-ROLE
fejlécet is a REST végpontbázison, /api
localhost
különböző nyelveket használva.
GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role
Műveletek (sztringtömb)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.permissions |
actions |
oneOf [sztring, tömb] | ✔️ Igen | Egyik sem |
Sztringértékek tömbje, amely részletezi, hogy milyen műveletek engedélyezettek a társított szerepkörhöz.
table
és view
adatbázis-objektumok esetében a szerepkörök a create
, read
, update
vagy delete
műveletek bármilyen kombinációját használhatják. Tárolt eljárások esetén a szerepkörök csak a execute
műveletet hajthatják végre.
Akció | SQL-művelet |
---|---|
* |
Helyettesítő karakter, beleértve a végrehajtást is |
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 |
Jegyzet
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
.
Példák
Ez a példa create
és read
engedélyeket ad egy contributor
nevű szerepkörhöz, és delete
engedélyeket a User
entitáson auditor
nevű szerepkörhöz.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": ["delete"]
},
{
"role": "contributor",
"actions": ["read", "create"]
}
]
}
}
}
Egy másik példa:
{
"entities": {
"User": {
"permissions": [
{
"role": "contributor",
"actions": ["read", "create"]
}
]
}
}
}
Műveletek (objektumtömb)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.permissions |
actions |
sztringtömb | ✔️ Igen | Egyik sem |
A társított szerepkör engedélyezett műveleteit részletező műveleti objektumok tömbje.
table
és view
objektumok esetében a szerepkörök a create
, read
, update
vagy delete
bármilyen kombinációját használhatják. Tárolt eljárások esetén csak execute
engedélyezett.
Jegyzet
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
.
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
action |
✔️ Igen | húr | Egyik sem |
fields |
❌ Nem | sztringtömb | Egyik sem |
policy |
❌ Nem | tárgy | Egyik sem |
Példa
Ez a példa csak read
engedélyt ad a User
entitás auditor
szerepkörére 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"
}
}
]
}
]
}
}
}
Akció
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.permissions.actions[] |
action |
húr | ✔️ Igen | Egyik sem |
Megadja az adatbázis-objektumon engedélyezett konkrét műveletet.
Értékrend
Táblázatok | Kilátás nyílik | Tárolt eljárások | Leírás | |
---|---|---|---|---|
create |
✔️ Igen | ✔️ Igen | ❌ Nem | Új elemek létrehozása |
read |
✔️ Igen | ✔️ Igen | ❌ Nem | Meglévő elemek olvasása |
update |
✔️ Igen | ✔️ Igen | ❌ Nem | Elemek frissítése vagy cseréje |
delete |
✔️ Igen | ✔️ Igen | ❌ Nem | Elemek törlése |
execute |
❌ Nem | ❌ Nem | ✔️ Igen | Programozott műveletek végrehajtása |
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": "<role>",
"actions": [
{
"action": "<string>",
"fields": {
"include": [/* fields */],
"exclude": [/* fields */]
},
"policy": {
"database": "<predicate>"
}
}
]
}
]
}
}
}
Példa
Íme egy példa, amelyben anonymous
felhasználók execute
egy tárolt eljárást, és read
a User
táblából.
{
"entities": {
"User": {
"source": {
"object": "dbo.Users",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read"
}
]
}
]
},
"GetUser": {
"source": {
"object": "dbo.GetUser",
"type": "stored-procedure",
"parameters": {
"userId": "number"
}
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "execute"
}
]
}
]
}
}
}
Mezők
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.permissions.actions[] |
fields |
tárgy | ❌ Nem | Egyik sem |
Részletes specifikációk, amelyeken adott mezők engedélyezettek az adatbázis-objektumhoz való hozzáféréshez. A szerepkör-konfiguráció egy olyan objektumtípus, amely két belső tulajdonsággal rendelkezik, include
és exclude
. Ezek az értékek támogatják a fields
szakaszban engedélyezett adatbázisoszlopok (mezők) részletes meghatározását.
Formátum
{
"entities": {
<string>: {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": {
"include": <array of strings>,
"exclude": <array of strings>
},
"policy": <object>
}
]
}
]
}
}
}
Példák
Ebben a példában a anonymous
szerepkör az id
kivételével minden mezőből beolvasható, de az elemek létrehozásakor az összes mezőt használhatja.
{
"entities": {
"Author": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": [ "*" ],
"exclude": [ "id" ]
}
},
{ "action": "create" }
]
}
]
}
}
}
A közös munka belefoglalása és kizárása. A *
szakaszban szereplő helyettesítő karakter include
az összes mezőt jelzi. A exclude
szakaszban feljegyzett mezők elsőbbséget élveznek a include
szakaszban feljegyzett mezőkkel szemben. A definíció lefordítja tartalmazza az összes mezőt, kivéve a "last_updated" mezőt.
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ],
// Include All Except Specific Fields
"fields": {
"include": [ "*" ],
"exclude": [ "secret-field" ]
}
},
{
"role": "authenticated",
"actions": [ "read", "update" ],
// Explicit Include and Exclude
"fields": {
"include": [ "id", "title", "secret-field" ],
"exclude": [ "secret-field" ]
}
},
{
"role": "author",
"actions": [ "*" ],
// Include All With No Exclusions (default)
"fields": {
"include": ["*"],
"exclude": []
}
}
]
}
Politika
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.permissions.actions[] |
policy |
tárgy | ❌ Nem | Egyik sem |
A policy
definiált action
szakasz olyan elemszintű biztonsági szabályokat (adatbázis-szabályzatokat) határoz meg, amelyek korlátozzák a kérésből visszaadott eredményeket. Az alszakasz database
a kérések végrehajtása során kiértékelt adatbázis-szabályzatkifejezést jelöli.
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <object>,
"policy": {
"database": <string>
}
}
]
}
]
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
database |
✔️ Igen | húr | Egyik sem |
Leírás
A database
szabályzat: az adatbázis kiértékelését egy lekérdezésre lefordított OData-szerű kifejezés, beleértve az eq
, lt
és gt
operátorokat is. Ahhoz, hogy egy kérelem eredményei vissza legyenek adva, a kérelem adatbázis-szabályzatból feloldott lekérdezési predikátumának true
kell kiértékelnie az adatbázison való végrehajtás során.
Példaelemházirend | Állítmány |
---|---|
@item.OwnerId eq 2000 |
WHERE Table.OwnerId = 2000 |
@item.OwnerId gt 2000 |
WHERE Table.OwnerId > 2000 |
@item.OwnerId lt 2000 |
WHERE Table.OwnerId < 2000 |
A
predicate
egy IGAZ vagy HAMIS értékre kiértékelt kifejezés. A predikátumok az WHERE záradékok és HAVING záradékok keresési feltételeiben, a FROM záradékok illesztési feltételeiben és egyéb olyan szerkezetekben használatosak, ahol logikai értékre van szükség. (Microsoft Learn Docs)
Adatbázis-szabályzat
Adatbázisházirend-kifejezés létrehozásakor kétféle irányelv használható az adatbázis-szabályzatok kezelésére:
Irányelv | Leírás |
---|---|
@claims |
Jogcím elérése a kérelemben megadott érvényesített hozzáférési jogkivonaton belül |
@item |
Annak az entitásnak a mezője, amelyhez az adatbázis-szabályzat definiálva van |
Jegyzet
Ha Azure Static Web Apps hitelesítést (EasyAuth) konfigurál, korlátozott számú jogcímtípus érhető el az adatbázis-szabályzatokban: identityProvider
, userId
, userDetails
és userRoles
. További információ: Az Azure Static Web App Ügyfélnév adatai dokumentációja.
Íme néhány példa adatbázis-szabályzatra:
@claims.userId eq @item.OwnerId
@claims.userId gt @item.OwnerId
@claims.userId lt @item.OwnerId
A Data API Builder összehasonlítja a UserId
jogcím értékét az adatbázismező OwnerId
értékével. Az eredmény hasznos adatai csak olyan rekordokat tartalmaznak, amelyek megfelelnek a kérés metaadatainak és az adatbázisházirend-kifejezésnek.
Korlátozások
Az adatbázis-szabályzatok táblákhoz és nézetekhez támogatottak. A tárolt eljárások nem konfigurálhatók szabályzatokkal.
Az adatbázis-szabályzatok nem akadályozzák meg a kérések végrehajtását az adatbázisban. Ennek a viselkedésnek az az oka, hogy az adatbázismotornak átadott generált lekérdezések predikátumaként vannak feloldva.
Az adatbázis-szabályzatok csak a actions
létrehozási, olvasási, frissítésiés törlésitámogatottak. Mivel a tárolt eljáráshívásokban nincs predikátum, nem fűzhetők hozzá.
Támogatott OData-szerű operátorok
Operátor | Leírás | Mintaszintaxis |
---|---|---|
and |
Logikai ÉS | "@item.status eq 'active' and @item.age gt 18" |
or |
Logikai VAGY | "@item.region eq 'US' or @item.region eq 'EU'" |
eq |
Egyenlő | "@item.type eq 'employee'" |
gt |
Nagyobb, mint | "@item.salary gt 50000" |
lt |
Kisebb, mint | "@item.experience lt 5" |
További információ: bináris operátorok.
Operátor | Leírás | Mintaszintaxis |
---|---|---|
- |
Negate (numerikus) | "@item.balance lt -100" |
not |
Logikai negate (NEM) | "not @item.status eq 'inactive'" |
További információ: nem naplós operátorok.
Entitásmezőnév korlátozásai
-
szabályok: Betűvel vagy aláhúzásjellel (
_
) kell kezdődnie, amelyet legfeljebb 127 betű, aláhúzásjel (_
) vagy számjegy (0-9
) követ. - Hatás: Az ezekhez a szabályokhoz nem igazodó mezők nem használhatók közvetlenül az adatbázis-szabályzatokban.
-
Megoldás: A
mappings
szakasz használatával aliasokat hozhat létre olyan mezőkhöz, amelyek nem felelnek meg ezeknek az elnevezési konvencióknak; a leképezések biztosítják, hogy az összes mező szerepelhessen a szabályzatkifejezésekben.
mappings
használata nem konformáló mezőkhöz
Ha az entitásmezők nevei nem felelnek meg az OData szintaxis szabályainak, vagy egyszerűen csak más okokból szeretné aliasolni őket, a konfiguráció mappings
szakaszában definiálhat aliasokat.
{
"entities": {
"<entity-name>": {
"mappings": {
"<field-1-name>": <string>,
"<field-2-name>": <string>,
"<field-3-name>": <string>
}
}
}
}
Ebben a példában field-1-name
az eredeti adatbázismező neve, amely nem felel meg az OData elnevezési konvencióinak. Ha field-1-name
és field-1-alias
térképet hoz létre, az adatbázis-szabályzatkifejezésekben problémamentesen hivatkozhat erre a mezőre. Ez a megközelítés nem csak az OData elnevezési konvenciók betartásában segít, hanem javítja az adatmodell érthetőségét és akadálymentességét a GraphQL- és RESTful-végpontokon is.
Példák
Vegyünk egy Employee
nevű entitást egy Olyan Data API-konfigurációban, amely jogcím- és elemirányelveket is használ. Biztosítja, hogy az adathozzáférés biztonságosan kezelhető legyen a felhasználói szerepkörök és az entitások tulajdonjoga alapján:
{
"entities": {
"Employee": {
"source": {
"object": "HRUNITS",
"type": "table",
"key-fields": ["employee NUM"],
"parameters": {}
},
"mappings": {
"employee NUM": "EmployeeId",
"employee Name": "EmployeeName",
"department COID": "DepartmentId"
},
"policy": {
"database": "@claims.role eq 'HR' or @claims.userId eq @item.EmployeeId"
}
}
}
}
Entitásdefiníciós: A Employee
entitás REST- és GraphQL-felületekhez van konfigurálva, ami azt jelzi, hogy az adatok lekérdezhetők vagy módosíthatók ezeken a végpontokon keresztül.
forráskonfigurációs: Az adatbázis HRUNITS
azonosítja, kulcsmezőként pedig employee NUM
.
leképezések: Az aliasok employee NUM
, employee Name
és department COID
EmployeeId
, EmployeeName
és DepartmentId
leképezésére szolgálnak, leegyszerűsítve a mezőneveket, és esetleg elrejtik a bizalmas adatbázisséma részleteit.
házirendalkalmazás: A policy
szakasz OData-szerű kifejezéssel alkalmaz adatbázis-szabályzatot. Ez a szabályzat korlátozza az adathozzáférést a HR-szerepkörrel (@claims.role eq 'HR'
) rendelkező felhasználóknak, illetve azoknak a felhasználóknak, akiknek UserId
jogcíme megegyezik EmployeeId
– a mező aliasa – az adatbázisban (@claims.userId eq @item.EmployeeId
). Biztosítja, hogy az alkalmazottak csak akkor férhessenek hozzá a saját rekordjaikhoz, ha a HR-részleghez tartoznak. A szabályzatok dinamikus feltételek alapján kényszeríthetik ki a sorszintű biztonságot.
Adatbázis
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.permissions.actions.policy |
database |
tárgy | ✔️ Igen | Egyik sem |
A policy
definiált action
szakasz olyan elemszintű biztonsági szabályokat (adatbázis-szabályzatokat) határoz meg, amelyek korlátozzák a kérésből visszaadott eredményeket. Az alszakasz database
a kérések végrehajtása során kiértékelt adatbázis-szabályzatkifejezést jelöli.
Formátum
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": {
"include": <array of strings>,
"exclude": <array of strings>
},
"policy": {
"database": <string>
}
}
]
}
]
}
}
}
Ez a tulajdonság azt az adatbázisházirend-kifejezést jelöli, amelyet a kérelem végrehajtása során kiértékelnek. A szabályzatsztring egy OData-kifejezés, amely az adatbázis által kiértékelt lekérdezésre lesz lefordítva. A @item.OwnerId eq 2000
szabályzatkifejezés például a lekérdezési predikátumra WHERE <schema>.<object-name>.OwnerId = 2000
lesz lefordítva.
Jegyzet
A predikátum olyan kifejezés, amely TRUE
, FALSE
vagy UNKNOWN
értékre emel. A predikátumok a következőkben használatosak:
- A
WHERE
záradékok keresési feltétele - A
FROM
záradékok keresési feltétele - A
FROM
záradékok illesztési feltételei - Egyéb szerkezetek, ahol logikai értékre van szükség.
További információ: predikátumok.
Ahhoz, hogy egy kérelem eredményei vissza legyenek adva, a kérelem adatbázis-szabályzatból feloldott lekérdezési predikátumának true
kell kiértékelnie az adatbázison való végrehajtás során.
Adatbázisházirend-kifejezés létrehozásakor kétféle irányelv használható az adatbázis-szabályzat kezelésére:
Leírás | |
---|---|
@claims |
A kérelemben megadott érvényesített hozzáférési jogkivonaton belüli jogcímhez fér hozzá |
@item |
Annak az entitásnak a mezője, amelyhez az adatbázis-szabályzat definiálva van |
Jegyzet
Az Azure Static Web Apps-hitelesítés (EasyAuth) konfigurálásakor korlátozott számú jogcímtípus használható adatbázis-szabályzatokban. Ezek a jogcímtípusok a következők: identityProvider
, userId
, userDetails
és userRoles
. További információ: Azure Static Web Apps-ügyfélnévadatok.
Példák
Egy alapszintű szabályzatkifejezés például kiértékelheti, hogy egy adott mező igaz-e a táblában. Ez a példa kiértékeli, hogy a soft_delete
mező false
-e.
{
"entities": {
"Manuscripts": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"policy": {
"database": "@item.soft_delete eq false"
}
}
]
}
]
}
}
}
A predikátumok claims
és item
irányelvtípusokat is kiértékelhetnek. Ez a példa lekéri a UserId
mezőt a hozzáférési jogkivonatból, és összehasonlítja azt a céladatbázistábla owner_id
mezőjével.
{
"entities": {
"Manuscript": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"policy": {
"database": "@claims.userId eq @item.owner_id"
}
}
]
}
]
}
}
}
Korlátozások
- Az adatbázis-szabályzatok táblákhoz és nézetekhez támogatottak. A tárolt eljárások nem konfigurálhatók szabályzatokkal.
- Az adatbázis-házirendek nem használhatók a kérések adatbázison belüli végrehajtásának megakadályozására. Ennek a korlátozásnak az az oka, hogy az adatbázis-szabályzatok lekérdezési predikátumként vannak feloldva a létrehozott adatbázis-lekérdezésekben. Az adatbázismotor végül kiértékeli ezeket a lekérdezéseket.
- Az adatbázis-szabályzatok csak a
actions
create
,read
,update
ésdelete
esetében támogatottak. - Az adatbázisházirend OData-kifejezésszintaxisa csak ezeket a forgatókönyveket támogatja.
- Bináris operátorok, beleértve, de nem kizárólagosan;
and
,or
,eq
,gt
éslt
. További információ:BinaryOperatorKind
. - Unary operátorok, például a
-
(negate) ésnot
operátorok. További információ:UnaryOperatorKind
.
- Bináris operátorok, beleértve, de nem kizárólagosan;
- Az adatbázis-szabályzatok a mezőnevekre vonatkozó korlátozásokkal is rendelkeznek.
- Betűvel vagy aláhúzásjellel kezdődő entitásmezőnevek, amelyeket legfeljebb 127 betű, aláhúzásjel vagy számjegy követ.
- Ez a követelmény OData-specifikációnként van megadva. További információ: OData Common Schema Definition Language.
Borravaló
Az adatbázis-szabályzatok nem hivatkozhatnak azokra a mezőkre, amelyek nem felelnek meg az említett korlátozásoknak. Áthidaló megoldásként konfigurálja az entitást egy leképezési szakaszsal, hogy megfelelő aliasokat rendeljen a mezőkhöz.
GraphQL (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
graphql |
tárgy | ❌ Nem | Egyik sem |
Ez az objektum határozza meg, hogy a GraphQL engedélyezve van-e, és az entitás graphQL-típusként való közzétételéhez használt név[ek]. Ez az objektum nem kötelező, és csak akkor használható, ha az alapértelmezett név vagy beállítások nem elegendőek.
Ez a szegmens egy entitás GraphQL-sémába való integrálását biztosítja. Lehetővé teszi a fejlesztők számára az entitás alapértelmezett értékeinek megadását vagy módosítását a GraphQL-ben. Ez a beállítás biztosítja, hogy a séma pontosan tükrözze a kívánt struktúrát és elnevezési konvenciókat.
Formátum
{
"entities": {
"<entity-name>": {
"graphql": {
"enabled": <true> (default) | <false>,
"type": {
"singular": <string>,
"plural": <string>
},
"operation": "query" (default) | "mutation"
}
}
}
}
{
"entities": {
"<entity-name>": {
"graphql": {
"enabled": <boolean>,
"type": <string-or-object>,
"operation": "query" (default) | "mutation"
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
❌ Nem | Logikai | Egyik sem |
type |
❌ Nem | sztring vagy objektum | Egyik sem |
operation |
❌ Nem | enum sztring | Egyik sem |
Példák
Ez a két példa funkcionálisan egyenértékű.
{
"entities": {
"Author": {
"graphql": true
}
}
}
{
"entities": {
"Author": {
"graphql": {
"enabled": true
}
}
}
}
Ebben a példában a definiált entitás Book
, ami azt jelzi, hogy az adatbázisban lévő könyvekhez kapcsolódó adatok készletével foglalkozunk. A GraphQL-szegmensen belüli Book
entitás konfigurációja egyértelmű struktúrát kínál arra vonatkozóan, hogy hogyan kell ábrázolni és használni egy GraphQL-sémában.
Engedélyezett tulajdonság: A Book
entitás a GraphQL ("enabled": true
) használatával érhető el, ami azt jelenti, hogy a fejlesztők és a felhasználók GraphQL-műveleteken keresztül kérdezhetik le vagy mutálhatják a könyvadatokat.
Típus tulajdonság: Az entitás a GraphQL-sémában az egyedi névvel "Book"
és a többes számmal "Books"
. Ez a megkülönböztetés biztosítja, hogy egyetlen könyv vagy több könyv lekérdezésekor a séma intuitívan elnevezett típusokat (Book
egyetlen bejegyzéshez, Books
egy listához) kínáljon, növelve az API használhatóságát.
művelettulajdonság: A művelet "query"
értékre van állítva, ami azt jelzi, hogy az Book
entitással a GraphQL-n keresztüli elsődleges interakció célja az adatok lekérdezése (lekérése) ahelyett, hogy mutációt (létrehozást, frissítést vagy törlést) okoz. Ez a beállítás igazodik a tipikus használati mintákhoz, ahol a könyvadatokat gyakrabban olvassák, mint módosítják.
{
"entities": {
"Book": {
...
"graphql": {
"enabled": true,
"type": {
"singular": "Book",
"plural": "Books"
},
"operation": "query"
},
...
}
}
}
Típus (GraphQL-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.graphql |
type |
oneOf [sztring, objektum] | ❌ Nem | {entity-name} |
Ez a tulajdonság határozza meg a GraphQL-sémán belüli entitások elnevezési konvencióját. Skaláris sztringértékeket és objektumtípusokat egyaránt támogat. Az objektumérték a többes és a többes számú űrlapot adja meg. Ez a tulajdonság részletes vezérlést biztosít a séma olvashatósága és felhasználói élménye felett.
Formátum
{
"entities": {
<entity-name>: {
"graphql": {
"type": <string>
}
}
}
}
{
"entities": {
<entity-name>: {
"graphql": {
"type": {
"singular": <string>,
"plural": <string>
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
singular |
❌ Nem | húr | Egyik sem |
plural |
❌ Nem | húr | N/A (alapértelmezett: egyedi) |
Példák
A GraphQL-típus még nagyobb mértékű szabályozásához konfigurálhatja, hogy az egyes és többes számú név egymástól függetlenül legyen ábrázolva.
Ha plural
hiányzik vagy hiányzik (például skaláris érték), a Data API Builder megpróbálja automatikusan pluralizálni a nevet a pluralizálás angol szabályainak megfelelően (például: https://engdic.org/singular-and-plural-noun-rules-definitions-examples)
{
"entities" {
"<entity-name>": {
...
"graphql": {
...
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Az egyéni entitásnév a sztringértékkel rendelkező type
paraméterrel adható meg. Ebben a példában a motor automatikusan különbséget tesz a név egyes és többes változatai között a pluralizálás általános angol szabályainak használatával.
{
"entities": {
"Author": {
"graphql": {
"type": "bookauthor"
}
}
}
}
Ha explicit módon adja meg a neveket, használja a type.singular
és type.plural
tulajdonságokat. Ez a példa mindkét nevet explicit módon állítja be.
{
"entities": {
"Author": {
"graphql": {
"type": {
"singular": "bookauthor",
"plural": "bookauthors"
}
}
}
}
}
Mindkét példa funkcionálisan egyenértékű. Mindkettő ugyanazt a JSON-kimenetet adja vissza egy GraphQL-lekérdezéshez, amely a bookauthors
entitásnevet használja.
{
bookauthors {
items {
first_name
last_name
}
}
}
{
"data": {
"bookauthors": {
"items": [
{
"first_name": "Henry",
"last_name": "Ross"
},
{
"first_name": "Jacob",
"last_name": "Hancock"
},
...
]
}
}
}
Művelet (GraphQL-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.graphql |
operation |
enum sztring | ❌ Nem | Egyik sem |
A tárolt eljárásokra leképezett entitások esetében a operation
tulajdonság a GraphQL művelettípust (lekérdezést vagy mutációt) jelöli meg, ahol a tárolt eljárás elérhető. Ez a beállítás lehetővé teszi a séma logikai rendszerezését és a GraphQL ajánlott eljárásainak betartását a funkciók befolyásolása nélkül.
Jegyzet
Az entitások tárolt eljárásként lesznek megadva, ha a {entity}.type
tulajdonság értékét stored-procedure
értékre állítja. Tárolt eljárás esetén automatikusan létrejön egy új GraphQL-típus, az ExecuteXXX. A operation
tulajdonság azonban lehetővé teszi, hogy a fejlesztő az adott típus helyét a séma mutation
vagy query
részeibe társítsa. Ez a tulajdonság lehetővé teszi a sémahigens beállítást, és operation
értéktől függetlenül nincs funkcionális hatása.
Ha hiányzik, a operation
alapértelmezett értéke mutation
.
Formátum
{
"entities": {
"<entity-name>": {
"graphql": {
"operation": "query" (default) | "mutation"
}
}
}
}
Értékrend
Íme a tulajdonság engedélyezett értékeinek listája:
Leírás | |
---|---|
query |
A mögöttes tárolt eljárás lekérdezésként van közzétéve |
mutation |
A mögöttes tárolt eljárás mutációként jelenik meg |
Példák
Ha operation
mutation
, a GraphQL-séma a következőhöz hasonló:
type Mutation {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
Ha operation
query
, a GraphQL-séma a következőhöz hasonló:
A GraphQL-séma a következőhöz hasonló:
type Query {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
Jegyzet
A operation
tulajdonság csak a művelet GraphQL-sémában való elhelyezéséről szól, nem változtatja meg a művelet viselkedését.
Engedélyezve (GraphQL-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.graphql |
enabled |
Logikai | ❌ Nem | Igaz |
Engedélyezi vagy letiltja a GraphQL-végpontot. Azt szabályozza, hogy egy entitás elérhető-e GraphQL-végpontokon keresztül. A enabled
tulajdonság egyesítése lehetővé teszi, hogy a fejlesztők szelektíven tegyenek közzé entitásokat a GraphQL-sémából.
Formátum
{
"entities": {
"<entity-name>": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
rest |
tárgy | ❌ Nem | Egyik sem |
A konfigurációs fájl rest
szakasza az egyes adatbázis-entitások RESTful végpontjainak finomhangolására szolgál. Ez a testreszabási funkció biztosítja, hogy a közzétett REST API megfeleljen az adott követelményeknek, és javítsa a segédprogramot és az integrációs képességeket is. Elhárítja az alapértelmezett következtetési beállítások és a kívánt végpont viselkedése közötti lehetséges eltéréseket.
Formátum
{
"entities": {
"<entity-name>": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "<entity-name>">,
"methods": <array of strings; default: ["GET", "POST"]>
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
✔️ Igen | Logikai | Igaz |
path |
❌ Nem | húr | /<entity-name> |
methods |
❌ Nem | sztringtömb | KAP |
Példák
Ez a két példa funkcionálisan egyenértékű.
{
"entities": {
"Author": {
"source": {
"object": "dbo.authors",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
],
"rest": true
}
}
}
{
"entities": {
"Author": {
...
"rest": {
"enabled": true
}
}
}
}
Íme egy másik példa egy entitás REST-konfigurációjára.
{
"entities" {
"User": {
"rest": {
"enabled": true,
"path": "/User"
},
...
}
}
}
Engedélyezve (REST-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.rest |
enabled |
Logikai | ❌ Nem | Igaz |
Ez a tulajdonság kapcsolóként szolgál az entitások REST API-beli láthatóságához. Ha a enabled
tulajdonságot true
vagy false
értékre állítja, a fejlesztők szabályozhatják az adott entitásokhoz való hozzáférést, így az alkalmazásbiztonsági és funkcionalitási követelményeknek megfelelő, testre szabott API-felület érhető el.
Formátum
{
"entities": {
"<entity-name>": {
"rest": {
"enabled": <true> (default) | <false>
}
}
}
}
Elérési út (REST-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.rest |
path |
húr | ❌ Nem | Egyik sem |
A path
tulajdonság határozza meg azt az URI-szegmenst, amellyel egy entitást a REST API-val érhet el. Ez a testreszabás lehetővé teszi az alapértelmezett entitásnéven túli leíróbb vagy egyszerűsített végpontútvonalak használatát, ami növeli az API navigálását és az ügyféloldali integrációt. Alapértelmezés szerint az elérési út /<entity-name>
.
Formátum
{
"entities": {
"<entity-name>": {
"rest": {
"path": <string; default: "<entity-name>">
}
}
}
}
Példák
Ez a példa a Author
entitást teszi elérhetővé a /auth
végpont használatával.
{
"entities": {
"Author": {
"rest": {
"path": "/auth"
}
}
}
}
Metódusok (REST-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.rest |
methods |
sztringtömb | ❌ Nem | Egyik sem |
A kifejezetten tárolt eljárásokra alkalmazható methods
tulajdonság határozza meg, hogy az eljárás mely HTTP-parancsokra (például GET, POST) tud válaszolni. A metódusok lehetővé teszik a tárolt eljárások REST API-val való megjelenítésének pontos ellenőrzését, így biztosítva a RESTful szabványokkal és az ügyfél elvárásaival való kompatibilitást. Ez a szakasz aláhúzza a platform rugalmasságra és fejlesztői vezérlésre vonatkozó elkötelezettségét, amely lehetővé teszi az egyes alkalmazások egyedi igényeire szabott, pontos és intuitív API-kialakítást.
Ha nincs megadva vagy hiányzik, a methods
alapértelmezett értéke POST
.
Formátum
{
"entities": {
"<entity-name>": {
"rest": {
"methods": ["GET" (default), "POST"]
}
}
}
}
Értékrend
Íme a tulajdonság engedélyezett értékeinek listája:
Leírás | |
---|---|
get |
HTTP GET-kérelmeket tesz elérhetővé |
post |
HTTP POST-kérelmek közzététele |
Példák
Ez a példa arra utasítja a motort, hogy a stp_get_bestselling_authors
tárolt eljárás csak HTTP GET
műveleteket támogat.
{
"entities": {
"BestSellingAuthor": {
"source": {
"object": "dbo.stp_get_bestselling_authors",
"type": "stored-procedure",
"parameters": {
"depth": "number"
}
},
"rest": {
"path": "/best-selling-authors",
"methods": [ "get" ]
}
}
}
}
Leképezések (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
mappings |
tárgy | ❌ Nem | Egyik sem |
A mappings
szakasz lehetővé teszi az aliasok vagy a közzétett nevek konfigurálását az adatbázis-objektummezőkhöz. A konfigurált közzétett nevek a GraphQL- és REST-végpontokra is érvényesek.
Fontos
A GraphQL-t engedélyező entitások esetében a konfigurált közzétett névnek meg kell felelnie a GraphQL elnevezési követelményeinek. További információ: GraphQL-nevek specifikációja.
Formátum
{
"entities": {
"<entity-name>": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Példák
Ebben a példában az adatbázis-objektum sku_title
mezője dbo.magazines
a title
néven jelenik meg. Hasonlóképpen, a sku_status
mező status
jelenik meg a REST és a GraphQL végpontokban is.
{
"entities": {
"Magazine": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Íme egy másik példa a leképezésekre.
{
"entities": {
"Book": {
...
"mappings": {
"id": "BookID",
"title": "BookTitle",
"author": "AuthorName"
}
}
}
}
leképezések: A mappings
objektum a külsőleg használt intuitívabb vagy szabványosabb nevekhez (BookID
, BookTitle
, AuthorName
) kapcsolja össze az adatbázismezőket (id
, title
, author
). Ez az aliasolás több célt is szolgál:
egyértelműség és konzisztencia: Lehetővé teszi a tiszta és konzisztens elnevezés használatát az API-ban, az alapul szolgáló adatbázissémától függetlenül. Az adatbázis
BookID
példáulid
ként jelenik meg az API-ban, így intuitívabb a végponttal kommunikáló fejlesztők számára.GraphQL-megfelelőség: Az aliasmezőnevek mechanizmusának biztosításával biztosítja, hogy a GraphQL-felületen közzétett nevek megfeleljenek a GraphQL elnevezési követelményeinek. A nevekre való figyelem azért fontos, mert a GraphQL szigorú szabályokkal rendelkezik a nevekre vonatkozóan (például szóközök nélkül, betűvel vagy aláhúzásjellel kell kezdődnie stb.). Ha például egy adatbázismező neve nem felel meg ezeknek a feltételeknek, akkor megfeleltetésekkel aliasolható egy megfelelő névhez.
rugalmassági: Ez az aliasolás absztrakciós réteget ad hozzá az adatbázisséma és az API között, lehetővé téve az egyik módosítását anélkül, hogy a másikban módosításokat igényelne. Az adatbázis mezőnevének módosítása például nem igényel frissítést az API dokumentációjában vagy az ügyféloldali kódban, ha a leképezés konzisztens marad.
mezőnév-elfedés: A leképezés lehetővé teszi a mezőnevek elhomályosítását, ami megakadályozhatja, hogy a jogosulatlan felhasználók bizalmas információkat vonnak le az adatbázis sémájáról vagy a tárolt adatok természetéről.
Védett adatok védelme: A mezők átnevezésével védett neveket vagy üzleti logikát is védhet, amelyekre az adatbázis eredeti mezőnevei utalhatnak.
Kapcsolatok (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity} |
relationships |
tárgy | ❌ Nem | Egyik sem |
Ez a szakasztérképek olyan kapcsolatdefiníciókat tartalmaznak, amelyek leképezik, hogyan kapcsolódnak az entitások más közzétett entitásokhoz. Ezek a kapcsolatdefiníciók opcionálisan részleteket is tartalmazhatnak a kapcsolatok támogatásához és érvényesítéséhez használt mögöttes adatbázis-objektumokról. Az ebben a szakaszban definiált objektumok GraphQL-mezőkként jelennek meg a kapcsolódó entitásban. További információ: Data API Builder-kapcsolatok részletezése.
Jegyzet
A kapcsolatok csak a GraphQL-lekérdezések szempontjából relevánsak. A REST-végpontok egyszerre csak egy entitáshoz férnek hozzá, és nem tudnak beágyazott típusokat visszaadni.
A relationships
szakasz ismerteti, hogyan működnek együtt az entitások a Data API builderben, részletezve az ilyen kapcsolatok társításait és lehetséges adatbázis-támogatását. Az egyes kapcsolatok relationship-name
tulajdonsága kötelező, és egyedinek kell lennie egy adott entitás összes kapcsolatában. Az egyéni nevek egyértelmű, azonosítható kapcsolatokat biztosítanak, és megőrzik az ezekből a konfigurációkból létrehozott GraphQL-séma integritását.
Kapcsolat | Számossága | Példa |
---|---|---|
egy-a-többhöz | many |
Egy kategória-entitás számos teendő entitáshoz kapcsolódhat |
több az egyhez | one |
Számos teendő entitás kapcsolódhat egy kategória-entitáshoz |
több-a-többhöz | 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 |
Formátum
{
"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>"]
}
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
cardinality |
✔️ Igen | enum sztring | Egyik sem |
target.entity |
✔️ Igen | húr | Egyik sem |
source.fields |
❌ Nem | sztringtömb | Egyik sem |
target.fields |
❌ Nem | sztringtömb | Egyik sem |
linking.<object-or-entity> |
❌ Nem | húr | Egyik sem |
linking.source.fields |
❌ Nem | sztringtömb | Egyik sem |
linking.target.fields |
❌ Nem | sztringtömb | Egyik sem |
Példák
A kapcsolatok mérlegelésekor érdemes összehasonlítani a egy-a-többhöz, a több-az-egyhezés a több-a-többhöz kapcsolatok közötti különbségeket.
Egy-a-többhöz
Először is tekintsünk egy példát arra, hogy a közzétett Category
entitás egy-a-többhöz kapcsolatban áll a Book
entitással. Itt a számosság beállítása many
. Minden Category
több kapcsolódó Book
entitással rendelkezhet, míg minden Book
entitás csak egyetlen Category
entitáshoz van társítva.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Ebben a példában a source.fields
lista a forrás entitás (id
) Category
mezőjét adja meg. Ez a mező a target
entitás kapcsolódó eleméhez való csatlakozásra szolgál. Ezzel szemben a target.fields
lista a cél entitás (category_id
) Book
mezőjét határozza meg. Ez a mező a source
entitás kapcsolódó eleméhez való csatlakozásra szolgál.
Ezzel a kapcsolattal az eredményként közzétett GraphQL-sémának ehhez a példához kell hasonlítania.
type Category
{
id: Int!
...
books: [BookConnection]!
}
Több az egyhez
Ezután fontolja meg több az egyhez, amely a számosságot one
állítja be. A közzétett Book
entitás egyetlen kapcsolódó Category
entitással rendelkezhet. A Category
entitás több kapcsolódó Book
entitással is rendelkezhet.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Itt a source.fields
lista azt határozza meg, hogy a forrás entitás (category_id
) Book
mezője a kapcsolódó cél entitás (id
) Category
mezőjére hivatkozik. Ezzel szemben a target.fields
lista az inverz kapcsolatot határozza meg. Ezzel a kapcsolattal az eredményként kapott GraphQL-séma mostantól tartalmaz egy leképezést a könyvekről a kategóriákra.
type Book
{
id: Int!
...
category: Category
}
Több-a-többhöz
Végül egy több-a-többhöz kapcsolat many
számosságával és több metaadattal definiálva határozza meg, hogy mely adatbázis-objektumok használatával hozza létre a kapcsolatot a háttéradatbázisban. Itt a Book
entitás több Author
entitással is rendelkezhet, és ezzel szemben a Author
entitás több Book
entitással is rendelkezhet.
{
"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": {
...
}
}
}
}
Ebben a példában a source.fields
és a target.fields
egyaránt azt jelzik, hogy a kapcsolattábla a forrás (id
) és a cél (Book
) entitások elsődleges azonosítóját (Author
) használja. A linking.object
mező azt határozza meg, hogy a kapcsolat az dbo.books_authors
adatbázis-objektumban van definiálva. A linking.source.fields
azt is megadja, hogy a csatolási objektum book_id
mezője a id
entitás Book
mezőjére hivatkozik, linking.target.fields
pedig azt határozza meg, hogy a csatolási objektum author_id
mezője a id
entitás Author
mezőjére hivatkozik.
Ez a példa az ehhez a példához hasonló GraphQL-sémával írható le.
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Számossága
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
cardinality |
húr | ✔️ Igen | Egyik sem |
Azt adja meg, hogy az aktuális forrásentitás csak a cél entitás egyetlen példányához vagy többhez kapcsolódik-e.
Értékrend
Íme a tulajdonság engedélyezett értékeinek listája:
Leírás | |
---|---|
one |
A forrás csak egy rekordhoz kapcsolódik a céltól |
many |
A forrás nulla-a-több rekordhoz kapcsolódhat a céltól |
Cél entitás
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
target.entity |
húr | ✔️ Igen | Egyik sem |
A konfigurációban máshol definiált entitás neve, amely a kapcsolat célja.
Forrásmezők
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
source.fields |
tömb | ❌ Nem | Egyik sem |
Nem kötelező paraméter a forrásban való leképezéshez használt mező meghatározásához, a cél entitás kapcsolódó eleméhez való csatlakozáshoz.
Borravaló
Ez a mező nem szükséges, ha idegen kulcs korlátozás van az adatbázison a kapcsolat automatikus következtetéséhez használható két adatbázis-objektum között.
Célmezők
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
target.fields |
tömb | ❌ Nem | Egyik sem |
Nem kötelező paraméter a forrás entitás kapcsolódó eleméhez való csatlakozáshoz használt cél- entitás leképezéséhez használt mező definiálásához.
Borravaló
Ez a mező nem szükséges, ha idegen kulcs korlátozás van az adatbázison a kapcsolat automatikus következtetéséhez használható két adatbázis-objektum között.
Objektum vagy entitás csatolása
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
linking.object |
húr | ❌ Nem | Egyik sem |
Több-a-többhöz kapcsolatok esetén annak az adatbázis-objektumnak vagy entitásnak a neve, amely a két másik entitás közötti kapcsolat meghatározásához szükséges adatokat tartalmazza.
Forrásmezők csatolása
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
linking.source.fields |
tömb | ❌ Nem | Egyik sem |
A forrás entitáshoz kapcsolódó adatbázis-objektum vagy entitásmező neve.
Célmezők összekapcsolása
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.relationships |
linking.target.fields |
tömb | ❌ Nem | Egyik sem |
A cél entitáshoz kapcsolódó adatbázis-objektum vagy entitásmező neve.
Gyorsítótár (entitások)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.cache |
enabled |
Logikai | ❌ Nem | Téves |
Engedélyezi és konfigurálja az entitás gyorsítótárazását.
Formátum
You're right; the formatting doesn't match your style. Here’s the corrected version following your preferred documentation format:
```json
{
"entities": {
"<entity-name>": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>
}
}
}
}
Kellékek
Ingatlan | Szükséges | Típus | Alapértelmezett |
---|---|---|---|
enabled |
❌ Nem | Logikai | Téves |
ttl-seconds |
❌ Nem | egész szám | 5 |
Példák
Ebben a példában a gyorsítótár engedélyezve van, és az elemek 30 másodperc után lejárnak.
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
}
Engedélyezve (Gyorsítótár-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.{entity}.cache |
enabled |
Logikai | ❌ Nem | Téves |
Engedélyezi az entitás gyorsítótárazását.
Adatbázis-objektum támogatása
Objektumtípus | Gyorsítótár támogatása |
---|---|
Asztal | ✅ Igen |
Nézet | ✅ Igen |
Tárolt eljárás | ✖️ Nem |
Konténer | ✖️ Nem |
HTTP-fejléc támogatása
Kérelem fejléce | Gyorsítótár támogatása |
---|---|
no-cache |
✖️ Nem |
no-store |
✖️ Nem |
max-age |
✖️ Nem |
public |
✖️ Nem |
private |
✖️ Nem |
etag |
✖️ Nem |
Formátum
{
"entities": {
"<entity-name>": {
"cache": {
"enabled": <boolean> (default: false)
}
}
}
}
Példák
Ebben a példában a gyorsítótár le van tiltva.
{
"entities": {
"Author": {
"cache": {
"enabled": false
}
}
}
}
TTL másodpercben (Gyorsítótár-entitás)
Szülő | Ingatlan | Típus | Szükséges | Alapértelmezett |
---|---|---|---|---|
entities.cache |
ttl-seconds |
egész szám | ❌ Nem | 5 |
Az élettartam (TTL) értékét másodpercben konfigurálja a gyorsítótárazott elemekhez. Ennyi idő elteltével a rendszer automatikusan eltávolítja az elemeket a gyorsítótárból. Az alapértelmezett érték 5
másodperc.
Formátum
{
"entities": {
"<entity-name>": {
"cache": {
"ttl-seconds": <integer; inherited>
}
}
}
}
Példák
Ebben a példában a gyorsítótár engedélyezve van, és az elemek 15 másodperc után lejárnak. Ha nincs megadva, ez a beállítás örökli a globális beállítást vagy az alapértelmezett beállítást.
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 15
}
}
}
}