Exemples de modèles de données et de modèles de mappage pour API Gateway - APIPasserelle Amazon

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.

Exemples de modèles de données et de modèles de mappage pour API Gateway

Les sections suivantes fournissent des exemples de modèles et de modèles de mappage qui pourraient être utilisés comme point de départ pour les vôtres APIs dans API Gateway. Pour plus d'informations sur les transformations de données, consultez Modèles de mappage pour REST APIs. Pour plus d'informations sur les modèles de données, consultezModèles de données pour REST APIs.

Exemple d'album photo

L'exemple suivant montre un album photo API dans API Gateway. Nous fournissons un exemple de transformation des données, des modèles supplémentaires et des modèles de mappage.

Exemple de transformation de données

L'exemple suivant montre comment transformer les données d'entrée relatives aux photos à l'aide d'un modèle de mappage Velocity Template Language (VTL). Pour plus d'informations sur le langage de modèle Velocity, voir Apache Velocity - VTL Reference.

L'exemple suivant montre les données d'entrée d'une demande d'intégration.

{ "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 } ] } }

L'exemple suivant est un modèle de mappage permettant de transformer les données des photos.

#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 } ] }

Modèle d'entrée pour les données photographiques

Vous pouvez définir un modèle pour vos données d'entrée. Ce modèle de saisie nécessite que vous téléchargiez une photo, et il spécifie un minimum de 10 photos pour chaque page. Vous pouvez utiliser ce modèle de saisie pour générer SDK ou activer une validation de demande pour votreAPI.

{ "$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" } } } } } } } }

Modèle de sortie pour les données photographiques

Vous pouvez définir un modèle pour vos données de sortie. Vous pouvez utiliser ce modèle pour un modèle de réponse de méthode, ce qui est nécessaire lorsque vous générez un type fortement typé SDK pour leAPI. 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" } } } } } }

Modèle de mappage d'entrée pour les données photographiques

Vous pouvez définir un modèle de mappage pour modifier les données d'entrée. Vous pouvez modifier les données d'entrée pour poursuivre l'intégration des fonctions ou les réponses d'intégration.

#set($inputRoot = $input.path('$')) { "photos": { "page": $inputRoot.photos.page, "pages": "$inputRoot.photos.pages", "perpage": $inputRoot.photos.perpage, "total": "$inputRoot.photos.total", "photo": [ #foreach($elem in $inputRoot.photos.photo) { "id": "$elem.id", "owner": "$elem.owner", "photographer_first_name" : "$elem.photographer_first_name", "photographer_last_name" : "$elem.photographer_last_name", "secret": "$elem.secret", "server": "$elem.server", "farm": $elem.farm, "title": "$elem.title", "ispublic": $elem.ispublic, "isfriend": $elem.isfriend, "isfamily": $elem.isfamily }#if($foreach.hasNext),#end #end ] } }

Exemple d'article de presse

L'exemple suivant montre un article de presse API dans API Gateway. Nous fournissons un exemple de transformation des données, des modèles supplémentaires et des modèles de mappage.

Exemple de transformation de données

L'exemple suivant montre comment transformer les données d'entrée relatives à un article de presse à l'aide d'un modèle de mappage Velocity Template Language (VTL). Pour plus d'informations sur le langage de modèle Velocity, voir Apache Velocity - VTL Reference.

L'exemple suivant montre les données d'entrée d'une demande d'intégration.

{ "count": 1, "items": [ { "last_updated_date": "2015-04-24", "expire_date": "2016-04-25", "author_first_name": "John", "description": "Sample Description", "creation_date": "2015-04-20", "title": "Sample Title", "allow_comment": true, "author": { "last_name": "Doe", "email": "johndoe@example.com", "first_name": "John" }, "body": "Sample Body", "publish_date": "2015-04-25", "version": "1", "author_last_name": "Doe", "parent_id": 2345678901, "article_url": "http://www.example.com/articles/3456789012" } ], "version": 1 }

L'exemple suivant est un modèle de mappage permettant de transformer les données des articles de presse.

#set($inputRoot = $input.path('$')) { "count": $inputRoot.count, "items": [ #foreach($elem in $inputRoot.items) { "creation_date": "$elem.creation_date", "title": "$elem.title", "author": "$elem.author.first_name $elem.author.last_name", "body": "$elem.body", "publish_date": "$elem.publish_date", "article_url": "$elem.article_url" }#if($foreach.hasNext),#end #end ], "version": $inputRoot.version }

L'exemple suivant montre les données de sortie de la transformation.

{ "count": 1, "items": [ { "creation_date": "2015-04-20", "title": "Sample Title", "author": "John Doe", "body": "Sample Body", "publish_date": "2015-04-25", "article_url": "http://www.example.com/articles/3456789012" } ], "version": 1 }

Modèle d'entrée pour les données d'actualité

Vous pouvez définir un modèle pour vos données d'entrée. Ce modèle de saisie nécessite qu'un article de presse contienne unURL, un titre et un corps. Vous pouvez utiliser ce modèle de saisie pour générer SDK ou activer une validation de demande pour votreAPI.

{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "NewsArticleInputModel", "type": "object", "properties": { "count": { "type": "integer" }, "items": { "type": "array", "items": { "type": "object", "required": [ "article_url", "title", "body" ], "properties": { "last_updated_date": { "type": "string" }, "expire_date": { "type": "string" }, "author_first_name": { "type": "string" }, "description": { "type": "string" }, "creation_date": { "type": "string" }, "title": { "type": "string" }, "allow_comment": { "type": "boolean" }, "author": { "type": "object", "properties": { "last_name": { "type": "string" }, "email": { "type": "string" }, "first_name": { "type": "string" } } }, "body": { "type": "string" }, "publish_date": { "type": "string" }, "version": { "type": "string" }, "author_last_name": { "type": "string" }, "parent_id": { "type": "integer" }, "article_url": { "type": "string" } } } }, "version": { "type": "integer" } } }

Modèle de sortie pour les données d'actualité

Vous pouvez définir un modèle pour vos données de sortie. Vous pouvez utiliser ce modèle pour un modèle de réponse de méthode, ce qui est nécessaire lorsque vous générez un type fortement typé SDK pour leAPI. 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" } } } } } }

Modèle de mappage d'entrée pour les données d'actualité

Vous pouvez définir un modèle de mappage pour modifier les données d'entrée. Vous pouvez modifier les données d'entrée pour poursuivre l'intégration des fonctions ou les réponses d'intégration.

#set($inputRoot = $input.path('$')) { "count": $inputRoot.count, "items": [ #foreach($elem in $inputRoot.items) { "last_updated_date": "$elem.last_updated_date", "expire_date": "$elem.expire_date", "author_first_name": "$elem.author_first_name", "description": "$elem.description", "creation_date": "$elem.creation_date", "title": "$elem.title", "allow_comment": "$elem.allow_comment", "author": { "last_name": "$elem.author.last_name", "email": "$elem.author.email", "first_name": "$elem.author.first_name" }, "body": "$elem.body", "publish_date": "$elem.publish_date", "version": "$elem.version", "author_last_name": "$elem.author_last_name", "parent_id": $elem.parent_id, "article_url": "$elem.article_url" }#if($foreach.hasNext),#end #end ], "version": $inputRoot.version }