Exemple de modèle de mappage supplémentaire pour REST APIs dans API Gateway - Amazon API Gateway

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.

Exemple de modèle de mappage supplémentaire pour REST APIs dans API Gateway

L’exemple suivant montre une API d’album photo API Gateway qui utilise des modèles de mappage pour transformer les données de la demande d’intégration et de la réponse d’intégration. Elle utilise également des modèles de données pour définir les données utiles de la demande de méthode et de la réponse d’intégration. Pour plus d’informations sur les modèles de données, consultez Modèles de données pour REST APIs.

Demande de méthode et demande d’intégration

Voici un modèle qui définit le corps de la demande de méthode. Ce modèle d’entrée exige le chargement d’une page de photos et un minimum de 10 photos pour chaque page. Vous pouvez utiliser ce modèle d’entrée pour générer un kit SDK ou utiliser le validateur de demande pour votre API. Dans ce dernier cas, si le corps de la demande de méthode ne respecte pas la structure de données du modèle, API Gateway fait échouer la demande.

{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PhotosInputModel", "type": "object", "properties": { "photos": { "type": "object", "required" : [ "photo" ], "properties": { "page": { "type": "integer" }, "pages": { "type": "string" }, "perpage": { "type": "integer", "minimum" : 10 }, "total": { "type": "string" }, "photo": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "owner": { "type": "string" }, "photographer_first_name" : {"type" : "string"}, "photographer_last_name" : {"type" : "string"}, "secret": { "type": "string" }, "server": { "type": "string" }, "farm": { "type": "integer" }, "title": { "type": "string" }, "ispublic": { "type": "boolean" }, "isfriend": { "type": "boolean" }, "isfamily": { "type": "boolean" } } } } } } } }

Voici un exemple de corps de demande de méthode qui respecte la structure de données du modèle de données précédent.

{ "photos": { "page": 1, "pages": "1234", "perpage": 100, "total": "123398", "photo": [ { "id": "12345678901", "owner": "23456789@A12", "photographer_first_name" : "Saanvi", "photographer_last_name" : "Sarkar", "secret": "abc123d456", "server": "1234", "farm": 1, "title": "Sample photo 1", "ispublic": true, "isfriend": false, "isfamily": false }, { "id": "23456789012", "owner": "34567890@B23", "photographer_first_name" : "Richard", "photographer_last_name" : "Roe", "secret": "bcd234e567", "server": "2345", "farm": 2, "title": "Sample photo 2", "ispublic": true, "isfriend": false, "isfamily": false } ] } }

Dans cet exemple, si le précédent corps de la demande de méthode a été soumis par le client, ce modèle de mappage transforme les données utiles pour qu’elles correspondent au format requis par le point de terminaison d’intégration.

#set($inputRoot = $input.path('$')) { "photos": [ #foreach($elem in $inputRoot.photos.photo) { "id": "$elem.id", "photographedBy": "$elem.photographer_first_name $elem.photographer_last_name", "title": "$elem.title", "ispublic": $elem.ispublic, "isfriend": $elem.isfriend, "isfamily": $elem.isfamily }#if($foreach.hasNext),#end #end ] }

L’exemple suivant montre les données de sortie de la transformation :

{ "photos": [ { "id": "12345678901", "photographedBy": "Saanvi Sarkar", "title": "Sample photo 1", "ispublic": true, "isfriend": false, "isfamily": false }, { "id": "23456789012", "photographedBy": "Richard Roe", "title": "Sample photo 2", "ispublic": true, "isfriend": false, "isfamily": false } ] }

Ces données sont envoyées à la demande d’intégration, puis au point de terminaison d’intégration.

Réponse d’intégration et réponse de méthode

Voici un exemple de modèle de sortie pour les données photo du point de terminaison d’intégration. Vous pouvez utiliser ce modèle comme modèle de réponse de méthode, ce qui s’avère nécessaire quand vous générez un kit SDK fortement typé pour l’API. Cela entraîne la conversion (cast) de la sortie en une classe appropriée en Java ou Objective-C.

{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PhotosOutputModel", "type": "object", "properties": { "photos": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "photographedBy": { "type": "string" }, "title": { "type": "string" }, "ispublic": { "type": "boolean" }, "isfriend": { "type": "boolean" }, "isfamily": { "type": "boolean" } } } } } }

Le point de terminaison d’intégration peut ne pas répondre par une réponse conforme à la structure de données de ce modèle. Par exemple, la réponse d’intégration peut ressembler à ce qui suit :

"photos": [ { "id": "12345678901", "photographedBy": "Saanvi Sarkar", "title": "Sample photo 1", "description": "My sample photo 1", "public": true, "friend": false, "family": false }, { "id": "23456789012", "photographedBy": "Richard Roe", "title": "Sample photo 2", "description": "My sample photo 1", "public": true, "friend": false, "family": false } ] }

L’exemple de modèle de mappage suivant transforme les données de la réponse d’intégration dans le format attendu par la réponse de méthode :

#set($inputRoot = $input.path('$')) { "photos": [ #foreach($elem in $inputRoot.photos.photo) { "id": "$elem.id", "photographedBy": "$elem.photographer_first_name $elem.photographer_last_name", "title": "$elem.title", "ispublic": $elem.public, "isfriend": $elem.friend, "isfamily": $elem.family }#if($foreach.hasNext),#end #end ] }

L’exemple suivant montre les données de sortie de la transformation :

{ "photos": [ { "id": "12345678901", "photographedBy": "Saanvi Sarkar", "title": "Sample photo 1", "ispublic": true, "isfriend": false, "isfamily": false }, { "id": "23456789012", "photographedBy": "Richard Roe", "title": "Sample photo 2", "ispublic": true, "isfriend": false, "isfamily": false } ] }

Ces données sont envoyées à la réponse de méthode, puis renvoyées au client.