Fotos-Beispiel (API Gateway-Modelle und -Mapping-Vorlagen) - Amazon API Gateway

Fotos-Beispiel (API Gateway-Modelle und -Mapping-Vorlagen)

Das folgende Beispiel zeigt eine Fotoalbum-API in API Gateway. Wir bieten ein Beispiel für die Datentransformation, zusätzliche Modelle und Zuweisungsvorlagen. Weitere Informationen zu Datentransformationen finden Sie unter Grundlegendes zu Zuweisungsvorlagen. Weitere Informationen zu Modellen und Zuweisungsvorlagen in API Gateway finden Sie unter PetStore-Zuweisungsvorlage.

Beispiel für eine Datentransformation

Das folgende Beispiel zeigt, wie Sie Eingabedaten zu Fotos mithilfe einer VTL-Zuweisungsvorlage (Velocity Template Language) transformieren können. Weitere Informationen zur Velocity Template Language finden Sie in der Apache Velocity – VTL-Reference.

Eingabedaten
{ "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 } ] } }
Ausgabe-Zuweisungsvorlage
#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 ] }
Ausgabedaten
{ "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 } ] }

Eingabemodell für Fotodaten

Sie können ein Modell für Ihre Eingabedaten definieren. Dieses Eingabemodell erfordert, dass Sie ein Foto hochladen, und es gibt ein Minimum von 10 Fotos pro Seite an. Sie können dieses Eingabemodell verwenden, um ein SDK zu generieren oder um eine Anforderungsvalidierung für Ihre API zu aktivieren.

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

Ausgabemodell für Fotodaten

Sie können ein Modell für Ihre Ausgabedaten definieren. Sie können dieses Modell für ein Methodenantwortmodell verwenden; dies ist erforderlich, wenn Sie ein stark typisiertes SDK für die API generieren. Dies stellt sicher, dass die Ausgabe an eine geeignete Klasse in Java oder Objective-C übergeben wird.

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

Eingabe-Zuweisungsvorlage für Fotodaten

Sie können eine Zuweisungsvorlage definieren, um Eingabedaten zu ändern. Sie können Eingabedaten für weitere Funktionsintegrationen oder Integrationsantworten ändern.

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