Source de données HTTP pour un résolveur
S’APPLIQUE À : tous les niveaux de Gestion des API
La stratégie du résolveur http-data-source
configure la requête HTTP et éventuellement la réponse HTTP pour résoudre les données d’un type d’objet et d’un champ dans un schéma GraphQL. Le schéma doit être importé dans API Management en tant qu’API GraphQL.
Notes
Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.
Instruction de la stratégie
<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>
Éléments
Nom | Description | Obligatoire |
---|---|---|
http-request | Spécifie une URL et des stratégies enfants pour configurer la requête HTTP du résolveur. | Oui |
Serveur principal | Transfère éventuellement la requête HTTP du résolveur à un service principal, si spécifié. | Non |
http-response | (Facultatif) Spécifie les stratégies enfants pour configurer la réponse HTTP du résolveur. S’il n’est pas spécifié, la réponse est retournée sous forme de chaîne brute. | Non |
Éléments http-request
Notes
Sauf mention contraire, chaque élément enfant ne peut être spécifié qu’une fois. Indiquez les éléments dans l’ordre indiqué.
Élément | Description | Obligatoire |
---|---|---|
get-authorization-context | Obtient un contexte d’autorisation pour la requête HTTP du résolveur. | Non |
set-backend-service | Redirige la requête HTTP du résolveur vers le serveur principal spécifié. | Non |
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. S’il existe plusieurs fragments, ajoutez les éléments include-fragment supplémentaires. |
Non |
set-method | Définit la méthode de la requête HTTP du résolveur. | Oui |
set-url | Définit l’URL de la requête HTTP du résolveur. | Oui |
set-header | Définit un en-tête dans la requête HTTP du résolveur. S’il existe plusieurs en-têtes, ajoutez des éléments header supplémentaires. |
Non |
set-body | Définit le corps dans la requête HTTP du résolveur. | Non |
authentication-certificate | S’authentifie à l’aide d’un certificat client dans la requête HTTP du résolveur. | Non |
élément principal
Élément | Description | Obligatoire |
---|---|---|
forward-request | Transfère la requête HTTP du résolveur à un service principal configuré. | Non |
Éléments http-response
Notes
Sauf mention contraire, chaque élément enfant ne peut être spécifié qu’une fois. Indiquez les éléments dans l’ordre indiqué.
Nom | Description | Obligatoire |
---|---|---|
set-body | Définit le corps dans la réponse HTTP du résolveur. | Non |
xml-to-json | Transforme la réponse HTTP du résolveur de XML en JSON. | Non |
find-and-replace | Recherche un substring dans la réponse HTTP du résolveur et la remplace par un autre substring. | Non |
publish-event | Publie un événement dans un ou plusieurs abonnements spécifiés dans le schéma de l’API GraphQL. | Non |
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. S’il existe plusieurs fragments, ajoutez les éléments include-fragment supplémentaires. |
Non |
Usage
- Étendues de la stratégie : Résolveur GraphQL
- Passerelles : classiques, v2, Consommation
Notes d’utilisation
- Pour configurer et gérer un programme de résolution avec cette stratégie, reportez-vous à Configurer un programme de résolution de GraphQL.
- Cette stratégie est invoquée uniquement lors de la résolution d’un champ unique dans un type d’opération GraphQL correspondant dans le schéma.
Exemples
Résolveur d’une requête GraphQL
L’exemple suivant résout une requête en effectuant un appel HTTP GET
à une source de données back-end.
Exemple de schéma
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Exemple de stratégie
<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>
Résolveur d’une requête GraphQL qui retourne une liste, à l’aide d’un modèle liquide
L’exemple suivant utilise un modèle liquide (dont l’utilisation est prise en charge dans la stratégie set-body) pour renvoyer une liste dans la réponse HTTP à une requête. Il renomme également le champ username
dans la réponse de l’API REST en name
dans la réponse GraphQL.
Exemple de schéma
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Exemple de stratégie
<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>
Résolveur de la mutation GraphQL
L’exemple suivant résout une mutation qui insère des données en effectuant une requête POST
à une source de données HTTP. L’expression de la stratégie set-body
de la requête HTTP modifie un argument name
transmis dans le corps de la requête GraphQL. Le corps envoyé se présente comme le code JSON suivant :
{
"name": "the-provided-name"
}
Exemple de schéma
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
Exemple de stratégie
<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>
Résolveur du type union GraphQL
L’exemple suivant résout la requête orderById
en effectuant un appel GET
HTTP à une source de données de back-end, et renvoie un objet JSON qui inclut l’ID et le type du client. Le type de client est une union des types RegisteredCustomer
et GuestCustomer
.
Exemple de schéma
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!
}
Exemple de stratégie
Pour cet exemple, nous simulons les résultats du client à partir d’une source externe et nous codons en dur les résultats récupérés dans la stratégie set-body
. Le champ __typename
est utilisé pour déterminer le type du client.
<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>
Stratégies connexes
Contenu connexe
Pour plus d’informations sur l’utilisation des stratégies, consultez :
- Tutoriel : Transformer et protéger votre API
- Référence de stratégie pour obtenir la liste complète des instructions et des paramètres de stratégie
- Expressions de stratégie
- Définir ou modifier des stratégies
- Réutilisation de configurations de stratégie
- Référentiel d’extrait de stratégie
- Créer des stratégies à l’aide de Microsoft Copilot dans Azure