Dela via


Översikt över GraphQL API:er i Azure API Management

GÄLLER FÖR: Alla nivåer av API Management

Du kan använda API Management för att hantera GraphQL-API:er, som är API:er baserade på GraphQL-frågespråket. GraphQL tillhandahåller en komplett och förståelig beskrivning av data i ett API, vilket ger klienter möjligheten att effektivt hämta exakt den data de behöver. Läs mer om GraphQL.

API-hantering hjälper dig att importera, hantera, skydda, testa, publicera och övervaka GraphQL API:er. Du kan välja en av två API-modeller:

GenomströmningsgrafQL Syntetisk GraphQL
▪️ Genomströmnings-API till befintlig GraphQL-tjänstslutpunkt

▪️ Stöd för GraphQL-frågor, mutationer och prenumerationer
▪️ API baserad på ett anpassat GraphQL-schema

▪️ Stöd för GraphQL-frågor, mutationer och prenumerationer

▪️ Konfigurera anpassade lösare, till exempel för HTTP-datakällor

▪️ Utveckla GraphQL-scheman och GraphQL-baserade klienter samtidigt som data från äldre API:er används

▪️ Syntetiska prenumerationer kräver inte upplösare. Se publish-event policy.

Tillgänglighet

  • GraphQL-API:er stöds på alla API Management-tjänstnivåer.
  • Syntetiska GraphQL-API:er stöds för närvarande inte i API Management-arbetsytor.
  • Stöd för GraphQL-prenumerationer i syntetiska GraphQL-API:er är för närvarande i förhandsversion och är inte tillgängligt på förbrukningsnivån.

Vad är GraphQL?

GraphQL är ett frågespråk för API:er med öppen källkod som är industristandard. Till skillnad från REST-stil API:er som är utformade kring åtgärder över resurser, stöder GraphQL API:er ett bredare spektrum av användningsfall och fokuserar på datatyper, scheman och frågor.

GraphQL-specifikationen löser uttryckligen vanliga problem som klientwebbappar stöter på och är beroende av REST-API:er.

  • Det kan krävas ett stort antal begäranden för att uppfylla databehoven för en enda sida.
  • REST-API:er returnerar ofta mer data än vad som behövs av sidan som återges.
  • Klientappen måste avsöka för att få ny information.

Med hjälp av ett GraphQL-API kan klientappen ange de data som behövs för att återge en sida i ett frågedokument som skickas som en enda begäran till en GraphQL-tjänst. En klientapp kan också prenumerera på datauppdateringar som skickas från GraphQL-tjänsten i realtid.

Schema och typer

I API Management lägger du till ett GraphQL-API från ett GraphQL-schema, antingen hämtat från en GraphQL API-slutpunkt för serverdelen eller uppladdat av dig. Ett GraphQL-schema beskriver:

  • Dataobjekttyper och fält som klienter kan begära från ett GraphQL-API.
  • Åtgärdstyper som tillåts för data, till exempel frågor.
  • Andra typer, till exempel fackföreningar och gränssnitt, som ger ytterligare flexibilitet och kontroll över data.

Ett grundläggande GraphQL-schema för användardata och en fråga för alla användare kan till exempel se ut så här:

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Operationstyper

API Management stöder följande operationstyper i GraphQL-scheman. Mer information om dessa åtgärdstyper finns i GraphQL-specifikationen.

  • Fråga: Hämtar data, ungefär som en GET åtgärd i REST.

  • Mutation: Ändrar data på serversidan, ungefär som en PUT- eller PATCH-åtgärd i REST.

  • Prenumeration: Gör det möjligt att meddela prenumerationsklienter i realtid om ändringar i data i GraphQL-tjänsten.

    När data till exempel ändras via en GraphQL-mutation kan prenumerationsklienter meddelas automatiskt om ändringen.

    Viktigt

    API Management stödjer prenumerationer implementerade med hjälp av graphql-ws WebSocket-protokollet. Frågor och mutationer stöds inte via WebSocket.

Andra typer

API Management stöder union- och interface-typer i GraphQL-scheman.

Lösare

Resolvers hanterar mappningen av GraphQL-schemat till backend-data och producerar data för varje fält i en objekttyp. Datakällan kan vara ett API, en databas eller en annan tjänst. Till exempel, en resolverfunktion skulle vara ansvarig för att returnera data för users frågan i det föregående exemplet.

I API-hantering kan du skapa en lösare för att koppla ett fält i en objekttyp till en backend-datakälla. Du konfigurerar resolverare för fält i syntetiska GraphQL API-scheman, men du kan också konfigurera dem för att ersätta de standardfältresolverare som används av genomgångs-GraphQL API:er.

API-hantering stödjer för närvarande lösare baserade på HTTP API, Cosmos DB och Azure SQL-datakällor för att returnera data för fält i ett GraphQL-schema. Varje resolver konfigureras med en anpassad policy för att ansluta till datakällan och hämta data.

Datakälla Lösarpolicy
HTTP-baserad datakälla (REST eller SOAP API) http-data-source
Cosmos DB databas cosmosdb-data-source
Azure SQL database sql-data-source

Till exempel kan en API-baserad HTTP-resolver för den föregående users frågan kartlägga till en GET operation i ett backend REST-API.

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://myapi.contoso.com/api/users</set-url>
    </http-request>
</http-data-source>

För mer information om hur du ställer in en resolver, se Konfigurera en GraphQL resolver.

Hantera GraphQL-API:er

  • Skydda GraphQL API:er genom att tillämpa både befintliga åtkomstkontrollpolicyer och en GraphQL-valideringspolicy för att säkra och skydda mot GraphQL-specifika attacker.
  • Utforska GraphQL-schemat och kör testfrågor mot GraphQL-API:erna i Azure- och utvecklarportalerna.