Konfigurace překladače GraphQL
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:
- Zdroj dat založený na protokolu HTTP (ROZHRANÍ REST nebo SOAP API)
- Databáze Cosmos DB
- Azure SQL Database
Co je třeba vědět
- Překladač je prostředek obsahující definici zásady, která se vyvolá pouze v případě, že se spustí odpovídající typ objektu a pole ve schématu.
- Každý překladač vyř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 oborem překladače se vyhodnocují po všech
inbound
zásadáchbackend
v kanálu spouštění zásad. Nedědí zásady z jiných oborů. Další informace najdete v tématu Zásady ve službě API Management. - Zásady vymezené rozhraním API můžete nakonfigurovat pro rozhraní GraphQL API nezávisle na zásadách s oborem překladače. Přidejte například do oboru zásadu
inbound
validate-graphql-request, která před vyvolání překladače 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 sjednocovací typy v překladači GraphQL, musí back-endová odpověď buď pole obsahovat
__typename
, nebo musí být změněna pomocí zásad pro nastavení textu, které chcete zahrnout__typename
.
Požadavky
- Existující instance služby API Management. Vytvořte ho, pokud jste to ještě neudělali.
- Import průchozího nebo syntetického rozhraní GraphQL API
Vytvoření překladače
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 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 najeďte myší.
Vyberte + Přidat překladač.
Na stránce Vytvořit překladač:
- Pokud chcete, aktualizujte vlastnost Název, volitelně zadejte popis a potvrďte nebo aktualizujte výběry typu a pole.
- Vyberte zdroj dat překladače. V tomto příkladu vyberte rozhraní HTTP API.
V editoru zásad Resolver aktualizujte zásadu
http-data-source
podřízenými elementy pro váš scénář.Aktualizujte požadovaný
http-request
prvek pomocí zásad pro transformaci operace GraphQL na požadavek HTTP.Volitelně přidejte
http-response
prvek a přidejte podřízené zásady pro transformaci odpovědi HTTP překladače. Pokud neníhttp-response
zadaný 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 překladačů
Seznam a správa překladačů pro rozhraní GraphQL API na kartě Překladače rozhraní API
Na kartě Překladače :
Propojený sloupec označuje, jestli je překladač nakonfigurovaný pro pole, které je aktuálně ve schématu GraphQL. Pokud překladač není propojený, nejde ho vyvolat.
V místní nabídce (...) pro překladač najděte příkazy pro klonování, úpravy nebo odstranění překladače. Naklonujte uvedený překladač a rychle vytvořte podobný překladač, který cílí na jiný typ a pole.
Nový překladač můžete vytvořit tak , že vyberete + 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 provádět následující akce:
Aktualizujte zásady překladače a volitelně i zdroj dat. Změna zdroje dat přepíše aktuální zásady překladače.
Změňte typ a pole, na které cílí překladač.
Otestujte a laďte konfiguraci překladače. Při úpravě zásad překladače vyberte Spustit test a zkontrolujte výstup ze zdroje dat, který můžete ověřit ve 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.GraphQL
Vlastnosti jsou nastaveny na argumenty (Arguments
) a nadřazený objekt (Parent
) pro aktuální provádění překladače.- 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 překladačem, nikoli kontextu pro úplnou odpověď požadavku brány.
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 na nadřazený objekt pro aktuální spuštění překladače. 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 v Blog
typu nastavíte překladačcomments
, budete chtít zjistit, jaké ID blogu použít. ID blogu můžete získat pomocí context.GraphQL.Parent["id"]
následujícího překladače:
<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
Do parametrizovaného dotazu GraphQL se přidají context.GraphQL.Arguments
argumenty parametrizovaného dotazu GraphQL. 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>
Další kroky
Další příklady překladače najdete tady: