Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: Alla API Management-nivåer
Matchningsprincipen http-data-source konfigurerar HTTP-begäran och om du vill kan HTTP-svaret matcha data för en objekttyp och ett fält i ett GraphQL-schema. Schemat måste importeras till API Management som ett GraphQL-API.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<http-data-source> 
    <http-request>
        <get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
        <set-backend-service>...set-backend-service policy configuration...</set-backend-service>
        <set-method>...set-method policy configuration...</set-method> 
        <set-url>URL</set-url>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
        <set-header>...set-header policy configuration...</set-header>
        <set-body>...set-body policy configuration...</set-body>
        <authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>  
    </http-request> 
    <backend>
        <forward-request>...forward-request policy configuration...</forward-request>
    <http-response>
        <set-body>...set-body policy configuration...</set-body>
        <xml-to-json>...xml-to-json policy configuration...</xml-to-json>
        <find-and-replace>...find-and-replace policy configuration...</find-and-replace>
        <publish-event>...publish-event policy configuration...</publish-event>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
    </http-response>
</http-data-source> 
Element
| Namn | beskrivning | Obligatoriskt | 
|---|---|---|
| HTTP-förfrågan | Anger en URL och underordnade principer för att konfigurera matcharens HTTP-begäran. | Ja | 
| bakgrundssystem | Du kan också vidarebefordra matcharens HTTP-begäran till en serverdelstjänst, om det anges. | Nej | 
| http-svar | Du kan också ange underordnade principer för att konfigurera matcharens HTTP-svar. Om inget anges returneras svaret som en råsträng. | Nej | 
http-request-element
Kommentar
Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.
| Komponent | beskrivning | Obligatoriskt | 
|---|---|---|
| get-authorization-context | Hämtar en auktoriseringskontext för matcharens HTTP-begäran. | Nej | 
| set-backend-service | Omdirigerar matcharens HTTP-begäran till den angivna serverdelen. | Nej | 
| include-fragment | Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragmentelement. | Nej | 
| inställningsmetod | Anger metoden för matcharens HTTP-begäran. | Ja | 
| set-url | Anger URL:en för matcharens HTTP-begäran. | Ja | 
| set-header | Anger ett huvud i matcharens HTTP-begäran. Om det finns flera rubriker lägger du till ytterligare headerelement. | Nej | 
| set-body | Anger brödtexten i matcharens HTTP-begäran. | Nej | 
| authentication-certificate | Autentiserar med ett klientcertifikat i matcharens HTTP-begäran. | Nej | 
serverdelselement
| Komponent | beskrivning | Obligatoriskt | 
|---|---|---|
| forward-request | Vidarebefordrar matcharens HTTP-begäran till en konfigurerad serverdelstjänst. | Nej | 
http-response-element
Kommentar
Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.
| Namn | beskrivning | Obligatoriskt | 
|---|---|---|
| set-body | Anger brödtexten i matcharens HTTP-svar. | Nej | 
| xml-to-json | Transformerar matcharens HTTP-svar från XML till JSON. | Nej | 
| sök-och-ersätt | Hittar en delsträng i matcharens HTTP-svar och ersätter den med en annan delsträng. | Nej | 
| publish-event | Publicerar en händelse till en eller flera prenumerationer som anges i GraphQL API-schemat. | Nej | 
| include-fragment | Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragmentelement. | Nej | 
Förbrukning
- Principomfattningar: GraphQL-matchare
- Gatewayer: klassisk, v2, förbrukning
Användningsanteckningar
- Information om hur du konfigurerar och hanterar en lösning med den här principen finns i Konfigurera en GraphQL-matchare.
- Den här principen anropas endast när du löser ett enda fält i en matchande GraphQL-åtgärdstyp i schemat.
Exempel
Lösare för GraphQL-fråga
Följande exempel löser en fråga genom att göra ett HTTP-anrop GET till en serverdelsdatakälla.
Exempelschema
type Query {
    users: [User]
}
type User {
    id: String!
    name: String!
}
Exempelprincip
<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/get/users</set-url>
    </http-request>
</http-data-source>
Lösare för en GraphQL-fråga som returnerar en lista med hjälp av en flytande mall
I följande exempel används en flytande mall som stöds för användning i set-body-principen för att returnera en lista i HTTP-svaret på en fråga.  Det byter också namn på fältet username i svaret från REST-API:et till name i GraphQL-svaret.
Exempelschema
type Query {
    users: [User]
}
type User {
    id: String!
    name: String!
}
Exempelprincip
<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/users</set-url>
    </http-request>
    <http-response>
        <set-body template="liquid">
            [
                {% JSONArrayFor elem in body %}
                    {
                        "name": "{{elem.username}}"
                    }
                {% endJSONArrayFor %}
            ]
        </set-body>
    </http-response>
</http-data-source>
Lösning för GraphQL-mutation
I följande exempel löses en mutation som infogar data genom att göra en POST begäran till en HTTP-datakälla. Principuttrycket i principen för set-body HTTP-begäran ändrar ett name argument som skickas i GraphQL-frågan som dess brödtext. Brödtexten som skickas ser ut som följande JSON:
{
    "name": "the-provided-name"
}
Exempelschema
type Query {
    users: [User]
}
type Mutation {
    makeUser(name: String!): User
}
type User {
    id: String!
    name: String!
}
Exempelprincip
<http-data-source>
    <http-request>
        <set-method>POST</set-method>
        <set-url>https://data.contoso.com/user/create </set-url>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@{
            var args = context.GraphQL.Arguments;  
            JObject jsonObject = new JObject();
            jsonObject.Add("name", args["name"])
            return jsonObject.ToString();
        }</set-body>
    </http-request>
</http-data-source>
Lösare för GraphQL-uniontyp
Följande exempel löser orderById frågan genom att göra ett HTTP-anrop GET till en serverdelsdatakälla och returnerar ett JSON-objekt som innehåller kund-ID och typ. Kundtypen är en union av RegisteredCustomer och GuestCustomer typer.
Exempelschema
type Query {
  orderById(orderId: Int): Order
}
type Order {
  customerId: Int!
  orderId: Int!  
  customer: Customer
}
enum AccountType {
  Registered
  Guest
}
union Customer = RegisteredCustomer | GuestCustomer
type RegisteredCustomer {
  accountType: AccountType!
  customerId: Int!
  customerGuid: String!
  firstName: String!
  lastName: String!
  isActive: Boolean!
}
type GuestCustomer {
  accountType: AccountType!
  firstName: String!
  lastName: String!
}
Exempelprincip
I det här exemplet hånar vi kundens resultat från en extern källa och hårdkodar de hämtade resultaten i set-body principen. Fältet __typename används för att fastställa kundens typ.
<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/orders/</set-url>
    </http-request>
    <http-response>
        <set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
        </set-body>
    </http-response>
</http-data-source>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Lagringsplats för principlekplats
- Principverktyg för Azure API Management
- Få Hjälp med Copilot för att skapa, förklara och felsöka principer