Sdílet prostřednictvím


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:

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 inbound a backend zá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 __typename pole, nebo být změněna pomocí set-body zásady tak, aby zahrnovala __typename.

Požadavky

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.

  1. Na webu Azure Portal přejděte k vaší instanci služby API Management.

  2. V nabídce vlevo vyberte rozhraní API a pak vyberte název rozhraní GraphQL API.

  3. Na kartě Schéma zkontrolujte schéma pole v typu objektu, ve kterém chcete nakonfigurovat překladač.

    1. Vyberte pole a potom na levém okraji umístěte kurzor myši.

    2. Vyberte + Přidat řešitel.

      Snímek obrazovky s přidáním resolveru z pole ve schématu GraphQL v Azure portálu.

  4. Na stránce Vytvořit resolver:

    1. Pokud chcete, aktualizujte vlastnost Název, volitelně zadejte popis a potvrďte nebo aktualizujte výběry typu a pole.
    2. Vyberte zdroj dat řešitele. V tomto příkladu vyberte rozhraní HTTP API.
  5. V editoru zásada Resolver aktualizujte zásadu http-data-source podřízenými prvky pro váš scénář.

    1. Aktualizujte požadovaný http-request prvek pomocí zásad pro transformaci operace GraphQL na požadavek HTTP.

    2. 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.

    3. Vyberte Vytvořit.

      Snímek obrazovky s editorem zásad překladače v portálu Azure

    Překladač je připojený k poli a zobrazí se na kartě Překladače .

    Snímek obrazovky se seznamem překladačů pro rozhraní GraphQL API na webu Azure Portal

Správa resolvérů

Překladače pro rozhraní GraphQL API můžete vypsat a spravovat na kartě Překladače rozhraní API.

Snímek obrazovky ze správy resolverů pro rozhraní GraphQL API v Azure portálu

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íží.

    Snímek obrazovky s úpravou resolveru v portálu Azure.

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í 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>

Chcete-li vidět další příklady resolverů, podívejte se na: