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


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 szakasz ki van zárva az entitás REST-konfigurációjából, a rendszer a POST alapértelmezett metódust is kikövetkezteti. Az entitás REST-végpontjának letiltásához konfigurálja 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
  }
}