GraphQL-feloldó konfigurálása
A KÖVETKEZŐRE VONATKOZIK: Minden API Management-szint
Konfiguráljon egy feloldót egy GraphQL-sémában megadott objektumtípus GraphQL-mezőinek adatainak lekérésére vagy beállítására. A sémát GraphQL API-ként kell importálni az API Managementbe.
Feljegyzés
Ez a funkció jelenleg nem érhető el a munkaterületeken.
Az API Management jelenleg az alábbi adatforrásokhoz hozzáférő feloldókat támogatja:
- HTTP-alapú adatforrás (REST vagy SOAP API)
- Cosmos DB-adatbázis
- Azure SQL Database
Tudnivalók
- A feloldó olyan erőforrás, amely olyan szabályzatdefiníciót tartalmaz, amelyet csak a séma egyező objektumtípusának és mezőjének végrehajtásakor hív meg.
- Minden feloldó egyetlen mező adatait oldja fel. Több mező adatainak feloldásához mindegyikhez konfiguráljon külön feloldót.
- A feloldó hatókörű szabályzatok kiértékelése a szabályzatvégrehajtási folyamat bármely
inbound
ésbackend
szabályzata után történik. Nem öröklik a szabályzatokat más hatókörökből. További információ: Szabályzatok az API Managementben. - A GraphQL API api-hatókörű szabályzatait a feloldó hatókörű szabályzattól függetlenül konfigurálhatja. Adjon hozzá például egy validate-graphql-request szabályzatot a
inbound
hatókörhöz, amely ellenőrzi a kérést a feloldó meghívása előtt. Konfigurálja az API-hatókörű szabályzatokat az API-szabályzatok lapján. - A GraphQL-feloldók felületi és egyesítő típusainak támogatásához a háttérválasznak vagy már tartalmaznia kell a
__typename
mezőt, vagy módosítania kell a készlettörzs-szabályzattal a belefoglaláshoz__typename
.
Előfeltételek
- Egy meglévő API Management-példány. Hozzon létre egyet, ha még nem tette meg.
- Átmenő vagy szintetikus GraphQL API importálása.
Feloldó létrehozása
Az alábbi lépések http-alapú adatforrás használatával hoznak létre egy feloldót. Az általános lépések hasonlóak a támogatott adatforrást használó feloldóhoz.
Az Azure Portalon keresse meg az API Management-példányt.
A bal oldali menüben válassza az API-kat , majd a GraphQL API nevét.
A Séma lapon tekintse át egy olyan objektumtípus egyik mezőjének sémáját, amelyben konfigurálni szeretné a feloldót.
Jelöljön ki egy mezőt, majd a bal margón vigye az egérmutatót.
Válassza a +Feloldó hozzáadása lehetőséget.
A Feloldó létrehozása lapon:
- Ha szeretné, frissítse a Név tulajdonságot, szükség esetén adjon meg egy leírást, és erősítse meg vagy frissítse a típus- és mezőkijelöléseket.
- Válassza ki a feloldó adatforrását. Ebben a példában válassza a HTTP API-t.
A Resolver szabályzatszerkesztőjében frissítse a szabályzatot a
http-data-source
forgatókönyv gyermekelemeivel.Frissítse a szükséges
http-request
elemet szabályzatokkal a GraphQL-művelet HTTP-kéréssé alakításához.Igény szerint adjon hozzá egy
http-response
elemet, és adjon hozzá gyermekszabályzatokat a feloldó HTTP-válaszának átalakításához. Ha azhttp-response
elem nincs megadva, a válasz nyers sztringként lesz visszaadva.Válassza a Létrehozás lehetőséget.
A feloldó a mezőhöz van csatolva, és a Feloldók lapon jelenik meg.
Feloldók kezelése
A GraphQL API feloldóinak listázása és kezelése az API Feloldók lapján.
A Feloldók lapon:
A Csatolt oszlop azt jelzi, hogy a feloldó konfigurálva van-e a GraphQL-sémában jelenleg található mezőhöz. Ha a feloldó nincs összekapcsolva, nem hívható meg.
A feloldó helyi menüjében (...) keresse meg a feloldó klónozására, szerkesztésére vagy törlésére szolgáló parancsokat. Klónozhat egy felsorolt feloldót, hogy gyorsan létrehozhasson egy hasonló feloldót, amely egy másik típust és mezőt céloz meg.
Új feloldót a + Létrehozás lehetőség kiválasztásával hozhat létre.
Feloldó szerkesztése és tesztelése
Egyetlen feloldó szerkesztésekor megnyílik a Feloldó szerkesztése lap. A következőket teheti:
Frissítse a feloldó házirendet és opcionálisan az adatforrást. Az adatforrás módosítása felülírja az aktuális feloldószabályzatot.
Módosítsa a feloldó által célként megadott típust és mezőt.
A feloldó konfigurációjának tesztelése és hibakeresése. A feloldóházirend szerkesztésekor válassza a Futtatás teszt lehetőséget az adatforrás kimenetének ellenőrzéséhez, amelyet érvényesíthet a sémán. Hibák esetén a válasz hibaelhárítási információkat is tartalmaz.
GraphQL-környezet
- A feloldó kérésének és válaszának környezete (ha meg van adva) eltér az eredeti átjáró API-kérés környezetétől:
context.GraphQL
a tulajdonságok az aktuális feloldóvégrehajtás argumentumára (Arguments
) és szülőobjektumára (Parent
) vannak állítva.- A kérelemkörnyezet a GraphQL-lekérdezés törzseként átadott argumentumokat tartalmaz.
- A válaszkörnyezet a feloldó által küldött független hívás válasza, nem pedig az átjárókérés teljes válaszának környezete.
A
context
kérelem- és válaszfolyamaton keresztül átadott változó a GraphQL-környezettel bővül, ha GraphQL-feloldóval használja.
kontextus. GraphQL.parent
Az context.GraphQL.parent
aktuális feloldó végrehajtásához a szülőobjektum van beállítva. Vegye figyelembe a következő részleges sémát:
type Comment {
id: ID!
owner: string!
content: string!
}
type Blog {
id: ID!
title: string!
content: string!
comments: [Comment]!
comment(id: ID!): Comment
}
type Query {
getBlog(): [Blog]!
getBlog(id: ID!): Blog
}
Emellett fontolja meg egy GraphQL-lekérdezést egy adott blog összes információjára vonatkozóan:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Ha a típusban beállít egy feloldót a comments
Blog
mezőhöz, tudnia kell, hogy melyik blogazonosítót használja. A blog context.GraphQL.Parent["id"]
azonosítóját az alábbi feloldóban látható módon szerezheti be:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
</set-url>
</http-request>
</http-data-source>
kontextus. GraphQL.Arguments
A paraméteres GraphQL-lekérdezés argumentumai hozzá lesznek adva a függvényhez context.GraphQL.Arguments
. Vegyük például a következő két lekérdezést:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
Ezek a lekérdezések a feloldó meghívásának getComment
két módja. A GraphQL a következő JSON hasznos adatokat küldi el:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
A feloldót az alábbiak szerint határozhatja meg:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
</http-request>
</http-data-source>
Következő lépések
További megoldási példákért lásd: