Bővített adatbázis-objektumok a Data API Builderben
A Data API Builder támogatja a nézeteket és a tárolt eljárásokat az adatbázistáblákhoz vagy -tárolókhoz való leképezés alternatíváiként. Ezek a különálló adatbázis-objektumok egyéni konfigurációt igényelnek, hogy zökkenőmentesen leképeződjenek REST- vagy GraphQL-végpontokra. A Data API Builder nézetekkel és tárolt eljárásokkal való használatához egyéni konfigurációra van szükség.
Ez a cikk azt ismerteti, hogyan használhatja a nézeteket és a tárolt eljárásokat a Data API Builderrel.
Kilátás nyílik
A nézetek ugyanúgy használhatók, mint a táblák a Data API Builderben való használatához. A használat megtekintéséhez meg kell adni az entitás forrástípusát view
. Emellett meg kell adni a key-fields
tulajdonságot, hogy a Data API Builder tudja, hogyan azonosíthat és adhat vissza egyetlen elemet, ha szükséges.
Ha van nézete, például dbo.vw_books_details
az alábbi dab
paranccsal jeleníthető meg:
dab add BookDetail --source dbo.vw_books_details --source.type View --source.key-fields "id" --permissions "anonymous:read"
Megjegyzés
--source.key-fields
a parancssori felületen keresztüli konfiguráció létrehozásakor a nézetek esetében kötelező.
A dab-config.json
fájl a következő példához hasonló:
"BookDetail": {
"source": {
"type": "view",
"object": "dbo.vw_books_details",
"key-fields": [ "id" ]
},
"permissions": [{
"role": "anonymous",
"actions": [ "read" ]
}]
}
Megjegyzés
Vegye figyelembe, hogy az engedélyt ennek megfelelően kell konfigurálnia úgy, hogy a nézet frissíthető legyen, vagy ne. Ha egy nézet nem frissíthető, csak az adott nézet alapján szabad olvasási hozzáférést engedélyeznie az entitáshoz.
REST-támogatás nézetekhez
A nézetek REST-szempontból táblázatként viselkednek. Minden REST-művelet támogatott.
A GraphQL támogatása a nézetekhez
A GraphQL szempontjából a nézetek táblázatként viselkednek. Minden GraphQL-művelet támogatott.
Tárolt eljárások
A tárolt eljárások a Data API Builder által közzétett entitásokhoz kapcsolódó objektumokként használhatók. A tárolt eljárás használatát meg kell határozni, és meg kell adni, hogy az entitás forrástípusa stored-procedure
.
Megjegyzés
A Data API Builder támogatja a relációs adatbázisok (pl. MSSQL) tárolt eljárásait, a nem relációs adatbázisok (pl. NoSQL) esetében azonban nem.
Ha van egy tárolt eljárása, például dbo.stp_get_all_cowritten_books_by_author
az alábbi dab
paranccsal teheti közzé:
dab add GetCowrittenBooksByAuthor --source dbo.stp_get_all_cowritten_books_by_author --source.type "stored-procedure" --source.params "searchType:s" --permissions "anonymous:execute" --rest.methods "get" --graphql.operation "query"
A dab-config.json
fájl a következő példához hasonló:
"GetCowrittenBooksByAuthor": {
"source": {
"type": "stored-procedure",
"object": "dbo.stp_get_all_cowritten_books_by_author",
"parameters": {
"searchType": "s"
}
},
"rest": {
"methods": [ "GET" ]
},
"graphql": {
"operation": "query"
},
"permissions": [{
"role": "anonymous",
"actions": [ "execute" ]
}]
}
A parameters
meghatározza, hogy mely paraméterek legyenek közzétéve, és alapértelmezett értékeket is biztosít a tárolt eljárásparamétereknek, ha ezek a paraméterek nem szerepelnek a HTTP-kérelemben.
Korlátozások
- A Data API Builder csak a tárolt eljárás által visszaadott első eredményhalmazt használja.
- Csak azok a tárolt eljárások támogatottak, amelyek az
sys.dm_exec_describe_first_result_set
által leírt első eredményhalmaz metaadatait támogatják. - REST- és GraphQL-végpontok esetén: ha a konfigurációs fájlban és az URL-lekérdezési sztringben is meg van adva egy tárolt eljárásparaméter, az URL-lekérdezési sztring paramétere elsőbbséget élvez.
- A tárolt eljárás által támogatott entitások nem rendelkeznek automatikusan a táblák, gyűjtemények vagy nézetek által támogatott entitások képességeivel.
- A tárolt eljárás által támogatott entitások nem támogatják a lapozást, a rendezést és a szűrést. Az ilyen entitások nem támogatják az elsődleges kulcsértékek által megadott elemek visszaadását sem.
- A mező-/paraméterszintű engedélyezési szabályok nem támogatottak.
REST-támogatás tárolt eljárásokhoz
A REST-végpont viselkedése a tárolt eljárás által támogatott entitás esetében egy vagy több HTTP-parancs (GET, POST, PUT, PATCH, DELETE) támogatására konfigurálható. Az entitás REST szakasza a következő példához hasonló:
"rest": {
"methods": [ "GET", "POST" ]
}
Az entitáshoz tartozó REST-kérések sikertelenek HTTP 405 metódus nem engedélyezett, ha a konfigurációban nem szereplő HTTP-metódust használnak. A PUT-kérés végrehajtása például a 405-ös hibakóddal meghiúsul.
Ha a "rest": false
és a tárolt eljárás entitásán lévő REST-kérések meghiúsulnak HTTP 404 Nem található.
Ha a tárolt eljárás paramétereket fogad el, a paraméterek átadhatók az URL-lekérdezési sztringben, amikor meghívja a REST-végpontot a GET
HTTP-paranccsal. Például:
GET http://<dab-server>/api/GetCowrittenBooksByAuthor?author=isaac%20asimov
A tárolt eljárások, amelyeket más HTTP-parancsokkal hajtanak végre, például POST, PUT, PATCH, DELETE, megkövetelik, hogy a paraméterek JSON-ként legyenek átadva a kérelem törzsében. Például:
POST http://<dab-server>/api/GetCowrittenBooksByAuthor
{
"author": "isaac asimov"
}
GraphQL-támogatás tárolt eljárásokhoz
A Tárolt eljárás végrehajtása a GraphQL-ben egy tárolt eljárás által támogatott entitás graphql
lehetőségével konfigurálható. Az entitás működésének explicit beállítása lehetővé teszi, hogy a GraphQL-sémában tárolt eljárást a tárolt eljárás viselkedéséhez igazodó módon képviselje.
Megjegyzés
A GraphQL megköveteli, hogy egy lekérdezési elem jelen legyen a sémában. Ha csak a tárolt eljárásokat teszi ki, győződjön meg arról, hogy legalább az egyik támogatja a query
műveletet, ellenkező esetben graphQL-hibát fog kapni, például The object type Query has to at least define one field in order to be valid.
Ha nem állít be értéket a művelethez, az egy mutation
művelet létrehozását eredményezi.
Ha például a operation
beállításhoz query
értéket használja, a tárolt eljárás a GraphQL-séma lekérdezésmezőjeként feloldva.
Parancssori felület használata:
dab add GetCowrittenBooksByAuthor --source dbo.stp_get_all_cowritten_books_by_author --source.type "stored-procedure" --source.params "searchType:s" --permissions "anonymous:execute" --rest.methods "GET" --graphql.operation "query"
Futtatókörnyezet konfigurálása:
"graphql": {
"operation": "query"
}
GraphQL-sémaösszetevők: típus- és lekérdezésmező:
type GetCowrittenBooksByAuthor {
id: Int!
title: String
}
A sémában a tárolt eljárások lekérdezési és mutációs műveletei is előtagként execute
. Az előző tárolt eljárás esetében a létrehozott lekérdezésnév pontos mezője executeGetCowrittenBooksByAuthor
. A létrehozott GraphQL-típus a következő:
type Query {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
Másik lehetőségként operation
is beállítható mutation
, hogy a mutációs mező a GraphQL-sémában tárolt eljárást képviselje. A dab update
paranccsal módosíthatja a operation
:
dab update GetCowrittenBooksByAuthor --graphql.operation "mutation"
Futtatókörnyezet konfigurálása:
"graphql": {
"operation": "mutation"
}
A létrehozott GraphQL-séma a következő:
type Mutation {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
Ha a tárolt eljárás paramétereket fogad el, ezek a paraméterek átadhatók a lekérdezés vagy a mutáció paramétereként. Például:
query {
executeGetCowrittenBooksByAuthor(author:"asimov")
{
id
title
pages
year
}
}
Kapcsolódó tartalom
- konfigurációs referencia
- PARANCSSORI telepítése