Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Guide de référence du mappage des données de demande d'API et de réponse Amazon API Gateway
Cette section explique comment configurer les mappages de données de demande de méthode d'une API, y compris des autres données stockées dans les variables context, stage ou util, aux paramètres de demande d'intégration correspondants et les mappages de données de réponse d'intégration, y compris des autres données, aux paramètres de réponse de méthode. Les données de la demande de méthode incluent le corps et les paramètres de la demande (chemin, chaîne de requête, en-têtes). Les données de réponse d'intégration incluent les paramètres de réponse (en-têtes) et le corps. Pour plus d'informations sur l'utilisation des variables d'étape, consultez Référence des variables d'étape Amazon API Gateway.
Rubriques
Mappage des données de demande de méthode aux paramètres de demande d'intégration
Les paramètres de demande d'intégration, sous forme de variables de chemin, de chaînes de requête ou d'en-têtes, peuvent être mappés à partir de n'importe quels paramètres de demande de méthode définis et de la charge utile.
Dans le tableau suivant,
est le nom d'un paramètre de demande de méthode du type de paramètre donné. Il doit respecter le modèle d'expression régulière PARAM_NAME
'^[a-zA-Z0-9._$-]+$]'
. Il doit être défini avant de pouvoir être référencé.
est une expression JSONPath pour un champ JSON du corps d'une demande ou une réponse.JSONPath_EXPRESSION
Note
Le préfixe "$"
est omis dans cette syntaxe.
Expressions de mappage de données de demande d'intégration | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Source de données mappée | Expression de mappage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Chemin de la demande de méthode | method.request.path. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Chaîne de requête de la demande de méthode | method.request.querystring. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Chaîne de requête de la demande de méthode à valeurs multiples | method.request.multivaluequerystring. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En-tête de la demande de méthode | method.request.header. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En-tête de demande de méthode à valeurs multiples | method.request.multivalueheader. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Corps de la demande de méthode | method.request.body |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
corps de la demande de méthode (JsonPath) | method.request.body. . |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Variables d'étape | stageVariables. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Variables de contexte | context. qui doit être l'une des variables de contexte prises en charge. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Valeur statique | . La valeur STATIC_VALUE est un littéral de chaîne qui doit être délimité par des guillemets simples. |
Exemple Mappages du paramètre de demande de méthode au format OpenAPI
L'exemple suivant montre un extrait de code OpenAPI qui mappe :
-
l'en-tête de la demande de méthode, nommé
methodRequestHeaderParam
, au paramètre de chemin de la demande d'intégration, nomméintegrationPathParam
; -
la chaîne de requête de la demande de méthode à valeurs multiples, nommée
methodRequestQueryParam
, à la chaîne de requête de la demande d'intégration, nomméeintegrationQueryParam
.
... "requestParameters" : { "integration.request.path.integrationPathParam" : "method.request.header.methodRequestHeaderParam", "integration.request.querystring.integrationQueryParam" : "method.request.multivaluequerystring.methodRequestQueryParam" } ...
Les paramètres de demande d'intégration peuvent également être mappés à partir des champs du corps de la demande JSON à l'aide d'une expression JSONPath
Exemple Mappage du corps d'une demande de méthode au format OpenAPI
L'exemple suivant présente un extrait de code OpenAPI qui mappe 1) le corps d'une demande de méthode à l'en-tête de demande d'intégration, nommé body-header
, et 2) un champ JSON du corps, spécifié par une expression JSON (petstore.pets[0].name
, sans le préfixe $.
).
... "requestParameters" : { "integration.request.header.body-header" : "method.request.body", "integration.request.path.pet-name" : "method.request.body.petstore.pets[0].name", } ...
Mappage des données de réponse d'intégration aux en-têtes de réponse de méthode
Les paramètres d'en-tête de réponse de méthode peuvent être mappés à partir de n'importe quel en-tête de réponse d'intégration ou corps de réponse d'intégration, variables, $context
, ou valeurs statiques.
Expressions de mappage d'en-tête de réponse de méthode | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Source de données mappée | Expression de mappage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En-tête de réponse d'intégration | integration.response.header. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En-tête de réponse d'intégration | integration.response.multivalueheader. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Corps de réponse intégration | integration.response.body |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Organisme de réponse à l'intégration (JsonPath) | integration.response.body. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Variable d'étape | stageVariables. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Variable de contexte | context. qui doit être l'une des variables de contexte prises en charge. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Valeur statique | . La valeur STATIC_VALUE est un littéral de chaîne qui doit être délimité par des guillemets simples. |
Exemple Mappage de données à partir d'une réponse d'intégration au format OpenAPI
L'exemple suivant présente un extrait de code OpenAPI qui mappe 1) la valeur redirect.url
de la réponse d'intégration, le champ JSONPath dans l'en-tête location
de la réponse de demande ; et 2) l'en-tête x-app-id
de la réponse intégration à l'en-tête id
de la réponse de méthode.
... "responseParameters" : { "method.response.header.location" : "integration.response.body.redirect.url", "method.response.header.id" : "integration.response.header.x-app-id", "method.response.header.items" : "integration.response.multivalueheader.item", } ...
Mappage des charges utiles de demande et de réponse entre méthode et intégration
API Gateway utilise un moteur VTL (Velocity Template Language)
Les modèles VTL utilisent des expressions JSONPath, d'autres paramètres comme des contextes d'appel et des variables d'étape, ainsi que des fonctions d'utilitaire pour traiter les données JSON.
Si un modèle est défini pour décrire la structure de données d'une charge utile, API Gateway peut utiliser le modèle pour générer un squelette de modèle de mappage pour une demande d'intégration ou une réponse d'intégration. Vous pouvez utiliser le squelette de modèle pour vous aider à personnaliser et étendre le script VTL de mappage. Cependant, vous pouvez créer un modèle de mappage à partir de zéro sans définir de modèle la structure de données de la charge utile.
Sélection d'un modèle de mappage VTL
API Gateway utilise la logique suivante pour sélectionner un modèle de mappage, dans Velocity Template Language (VTL)
Pour une charge utile de demande, API Gateway utilise la valeur d'en-tête Content-Type
de la demande en tant que clé pour sélectionner le modèle de mappage de la charge utile de demande. Pour une charge utile de réponse, API Gateway utilise la valeur d'en-tête Accept
de la demande entrante en tant que clé pour sélectionner le modèle de mappage.
Lorsque l'en-tête Content-Type
est absent dans la demande, API Gateway part du principe que sa valeur par défaut est application/json
. Pour une telle demande, API Gateway utilise application/json
comme clé par défaut pour sélectionner le modèle de mappage, s'il est défini. Lorsqu'aucun modèle ne correspond à cette clé, API Gateway transmet la charge utile via un contenu non mappé si la propriété passthroughBehavior est définie sur WHEN_NO_MATCH
ou WHEN_NO_TEMPLATES
.
Lorsque l'en-tête Accept
n'est pas spécifié dans la demande, API Gateway part du principe que sa valeur par défaut est application/json
. Dans ce cas, API Gateway sélectionne un modèle de mappage existant pour que application/json
mappe la charge utile de réponse. Si aucun modèle n'est défini pour application/json
, API Gateway sélectionne le premier modèle existant et l'utilise comme modèle par défaut pour mapper la charge utile de réponse. De même, API Gateway utilise le premier modèle existant lorsque la valeur d'en-tête Accept
spécifiée ne correspond pas à une clé de modèle existante. Si aucun modèle n'est défini, API Gateway transmet simplement la charge utile de réponse via un contenu non mappé.
Supposons, par exemple, qu'une API a un modèle application/json
défini pour une charge utile de demande et un modèle application/xml
défini pour la charge utile de réponse. Si le client définit les en-têtes "Content-Type :
application/json"
et "Accept : application/xml"
dans la demande, les charges utiles de demande et de réponse seront traitées avec les modèles de mappage correspondants. Si l'en-tête Accept:application/xml
est absent, le modèle de mappage application/xml
sera utilisé pour mapper la charge utile de réponse. Pour renvoyer la charge utile de réponse non mappé à la place, vous devez configurer un modèle vide pour application/json
.
Seul le type MIME est utilisé dans les en-têtes Accept
et Content-Type
lors de la sélection d'un modèle de mappage. Par exemple, pour un en-tête "Content-Type: application/json; charset=UTF-8"
, un modèle de demande avec la clé application/json
sera sélectionné.