Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO: Všechny úrovně služby API Management
Nakonfigurujte překladač pro načtení nebo nastavení dat pro pole GraphQL v typu objektu určeném ve schématu GraphQL. Schéma se musí importovat do služby API Management jako rozhraní GraphQL API.
Poznámka:
V současné době tato funkce není dostupná v pracovních prostorech.
Api Management v současné době podporuje překladače, které mají přístup k následujícím zdrojům dat:
- Datový zdroj založený na protokolu HTTP (REST nebo SOAP API)
- Databáze Cosmos DB
- Azure SQL Database
Co je třeba vědět
- Resolver je prostředek obsahující definici politiky, která se vyvolá pouze v případě, že se spustí odpovídající typ objektu a pole ve schématu.
- Každý resolver řeší data pro jedno pole. Pokud chcete přeložit data pro více polí, nakonfigurujte pro každou z nich samostatný překladač.
- Zásady s vymezeným oborem resolveru se vyhodnocují po všech
inboundabackendzásadách v rámci vykonávacího kanálu zásad. Nedědí zásady z jiných oborů. Další informace najdete v tématu Zásady ve službě Azure API Management. - Můžete nakonfigurovat zásady omezené na API pro GraphQL API nezávisle na zásadách omezených na resolver. Přidejte například do oboru zásadu validate-graphql-request, která před vyvoláním resolveru ověří požadavek. Nakonfigurujte zásady vymezené rozhraním API na kartě Zásady rozhraní API pro rozhraní API.
- Aby bylo možné podporovat rozhraní a unie v resolveru GraphQL, musí backendová odpověď buď obsahovat
__typenamepole, nebo být změněna pomocí set-body zásady tak, aby zahrnovala__typename.
Požadavky
- Existující instance služby API Management. Vytvořte ho, pokud jste to ještě neudělali.
- Importujte průchozí nebo syntetické rozhraní GraphQL API.
Vytvořit resolver
Následující postup vytvoří překladač pomocí zdroje dat založeného na protokolu HTTP. Obecné kroky jsou podobné pro jakýkoli překladač, který používá podporovaný zdroj dat.
Na webu Azure Portal přejděte k vaší instanci služby API Management.
V nabídce vlevo vyberte rozhraní API a pak vyberte název rozhraní GraphQL API.
Na kartě Schéma zkontrolujte schéma pole v typu objektu, ve kterém chcete nakonfigurovat překladač.
Vyberte pole a potom na levém okraji umístěte kurzor myši.
Vyberte + Přidat řešitel.
Na stránce Vytvořit resolver:
- Pokud chcete, aktualizujte vlastnost Název, volitelně zadejte popis a potvrďte nebo aktualizujte výběry typu a pole.
- Vyberte zdroj dat řešitele. V tomto příkladu vyberte rozhraní HTTP API.
V editoru zásada Resolver aktualizujte zásadu
http-data-sourcepodřízenými prvky pro váš scénář.Aktualizujte požadovaný
http-requestprvek pomocí zásad pro transformaci operace GraphQL na požadavek HTTP.Volitelně přidejte
http-responseprvek a přidejte podřízené zásady pro transformaci odpovědi HTTP překladače. Pokud neníhttp-responsezadaný prvek, vrátí se odpověď jako nezpracovaný řetězec.Vyberte Vytvořit.
Překladač je připojený k poli a zobrazí se na kartě Překladače .
Správa resolvérů
Překladače pro rozhraní GraphQL API můžete vypsat a spravovat na kartě Překladače rozhraní API.
Na kartě Resolvery :
Propojený sloupec označuje, jestli je překladač nakonfigurovaný pro pole, které je aktuálně ve schématu GraphQL. Pokud resolver není propojený, nelze ho vyvolat.
V místní nabídce (...) pro řešitel najděte příkazy Klonovat, Upravit nebo Odstranit řešitel. Naklonujte uvedený překladač a rychle vytvořte podobný překladač, který cílí na jiný typ a pole.
Můžete vytvořit nový řešitel výběrem + Vytvořit.
Úprava a otestování překladače
Při úpravě jednoho překladače se otevře stránka Upravit překladač . Můžete:
Aktualizujte politiku překladače a volitelně i zdroj dat. Změna zdroje dat přepíše aktuální zásady resolveru.
Změňte typ a pole, na které cílí řešitel.
Otestujte a laďte konfiguraci překladače. Při úpravě zásad řešitele vyberte Spustit test a zkontrolujte výstup datového zdroje, který můžete ověřit podle schématu. Pokud dojde k chybám, odpověď obsahuje informace o řešení potíží.
Kontext GraphQL
- Kontext požadavku a odpovědi překladače (pokud je zadaný) se liší od kontextu původního požadavku rozhraní API brány:
-
context.GraphQLVlastnosti jsou nastaveny na argumenty (Arguments) a nadřazený objekt (Parent) pro aktuální spuštění resolveru. - Kontext požadavku obsahuje argumenty předávané v dotazu GraphQL jako jeho tělo.
- Kontext odpovědi je odpověď z nezávislého volání provedeného resolverem, nikoli kontext pro úplnou odpověď požadavku směrovače.
Proměnná
context, která se předává prostřednictvím kanálu požadavku a odpovědi, je rozšířena o kontext GraphQL při použití s překladačem GraphQL.
-
kontext.GraphQL.parent
Objekt context.GraphQL.parent je nastaven jako nadřazený objekt pro aktuální spuštění řešitele. Zvažte následující částečné schéma:
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
}
Zvažte také dotaz GraphQL pro všechny informace pro konkrétní blog:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Pokud pro pole comments v typu Blog nastavíte resolver, budete chtít zjistit, jaké ID blogu použít. ID blogu můžete získat pomocí context.GraphQL.Parent["id"] následujícího resolveru:
<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>
kontext.GraphQL.Arguments
Argumenty pro parametrizovaný dotaz GraphQL se přidají do context.GraphQL.Arguments. Představte si například následující dva dotazy:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
Tyto dotazy představují dva způsoby volání překladače getComment . GraphQL odešle následující datovou část JSON:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
Překladač můžete definovat následujícím způsobem:
<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>
Související obsah
Chcete-li vidět další příklady resolverů, podívejte se na: