Origine dati HTTP per un resolver
SI APPLICA A: Tutti i livelli di Gestione API
Il criterio del resolver http-data-source
consente di configurare la richiesta HTTP e, facoltativamente, la risposta HTTP per risolvere i dati per un tipo di oggetto e un campo in uno schema GraphQL. Lo schema deve essere importato in Gestione API come API GraphQL.
Nota
Impostare gli elementi e gli elementi figlio del criterio nell'ordine specificato nell'istruzione del criterio. Altre informazioni su come impostare o modificare i criteri di API Management.
Istruzione del criterio
<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>
Elementi
Nome | Descrizione | Richiesto |
---|---|---|
http-request | Specifica un URL e i criteri figlio per configurare la richiesta HTTP del resolver. | Sì |
back-end | Facoltativamente, inoltra la richiesta HTTP del resolver a un servizio back-end, se specificato. | No |
http-response | Facoltativamente, specifica i criteri figlio per configurare la risposta HTTP del resolver. Se non viene specificato, la risposta viene restituita come stringa non elaborata. | No |
Elementi di http-request
Nota
Tranne dove indicato, ogni elemento figlio può essere specificato al massimo una volta. Specificare gli elementi nell'ordine elencato.
Elemento | Descrizione | Richiesto |
---|---|---|
get-authorization-context | Ottiene un contesto di autorizzazione per la richiesta HTTP del resolver. | No |
set-backend-service | Reindirizza la richiesta HTTP del resolver al back-end specificato. | No |
include-fragment | Inserisce un frammento di criterio nella definizione del criterio. Se sono presenti più frammenti, aggiungere altri elementi include-fragment . |
No |
set-method | Imposta il metodo della richiesta HTTP del resolver. | Sì |
set-url | Imposta l'URL della richiesta HTTP del resolver. | Sì |
set-header | Imposta un'intestazione nella richiesta HTTP del resolver. Se sono presenti più intestazioni, aggiungere altri elementi header . |
No |
set-body | Imposta il corpo nella richiesta HTTP del resolver. | No |
authentication-certificate | Esegue l'autenticazione usando un certificato client nella richiesta HTTP del resolver. | No |
Elemento di backend
Elemento | Descrizione | Richiesto |
---|---|---|
forward-request | Inoltra la richiesta HTTP del resolver a un servizio back-end configurato. | No |
Elementi di http-response
Nota
Tranne dove indicato, ogni elemento figlio può essere specificato al massimo una volta. Specificare gli elementi nell'ordine elencato.
Nome | Descrizione | Richiesto |
---|---|---|
set-body | Imposta il corpo nella risposta HTTP del resolver. | No |
xml-to-json | Trasforma la risposta HTTP del resolver da XML a JSON. | No |
find-and-replace | Trova una sottostringa nella risposta HTTP del resolver e la sostituisce con una sottostringa diversa. | No |
publish-event | Pubblica un evento in una o più sottoscrizioni specificate nello schema dell'API GraphQL. | No |
include-fragment | Inserisce un frammento di criterio nella definizione del criterio. Se sono presenti più frammenti, aggiungere altri elementi include-fragment . |
No |
Utilizzo
- Ambiti dei criteri: resolver GraphQL
- Gateway: versione classica, v2, A consumo
Note sull'utilizzo
- Per configurare e gestire un resolver con questo criterio, vedere Configurare un resolver GraphQL.
- Questo criterio viene richiamato solo quando si risolve un singolo campo in un tipo di operazione GraphQL corrispondente nello schema.
Esempi
Resolver per una query GraphQL
L'esempio seguente risolve una query effettuando una chiamata HTTP GET
a un'origine dati back-end.
Schema di esempio
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Criterio di esempio
<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>
Resolver per una query GraphQL che restituisce un elenco, usando un modello Liquid
Nell'esempio seguente viene usato un modello Liquid, supportato per l'uso nel criterio set-body, per restituire un elenco nella risposta HTTP a una query. Viene anche rinominato il campo username
nella risposta restituita dall'API REST per name
nella risposta GraphQL.
Schema di esempio
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Criterio di esempio
<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>
Resolver per una mutazione GraphQL
Nell'esempio seguente viene risolta una mutazione che inserisce dati effettuando una richiesta POST
a un'origine dati HTTP. L'espressione nel criterio set-body
della richiesta HTTP modifica un argomento name
passato come corpo nella query GraphQL. Il corpo inviato sarà simile al codice JSON seguente:
{
"name": "the-provided-name"
}
Schema di esempio
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
Criterio di esempio
<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>
Resolver per il tipo di unione GraphQL
L'esempio seguente risolve la query orderById
effettuando una chiamata HTTP GET
a un'origine dati back-end e restituisce un oggetto JSON che include l'ID cliente e il tipo. Il tipo di cliente è un'unione dei tipi RegisteredCustomer
e GuestCustomer
.
Schema di esempio
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!
}
Criterio di esempio
Per questo esempio si simulano i risultati del cliente da un'origine esterna e si impostano come hardcoded i risultati recuperati nel criterio set-body
. Il campo __typename
viene usato per determinare il tipo di cliente.
<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>
Criteri correlati
Contenuto correlato
Per ulteriori informazioni sull'utilizzo dei criteri, vedere:
- Esercitazione: trasformare e proteggere l'API
- Informazioni di riferimento sui criteri per un elenco completo delle istruzioni dei criteri e delle relative impostazioni
- Espressioni di criteri
- Impostare o modificare criteri
- Riutilizzare le configurazioni dei criteri
- Repository dei frammenti di criteri
- Creare criteri usando Microsoft Copilot in Azure