写真のサンプル (API Gateway のモデルとマッピングテンプレート)
次の例は、API Gateway のフォトアルバム API を示しています。データ変換の例、追加のモデル、マッピングテンプレートを提供します。データ変換の詳細については、「マッピングテンプレートについて」を参照してください。API Gateway のモデルとマッピングテンプレートの詳細については、「PetStore マッピングテンプレート」を参照してください。
データ変換の例
次の例は、Velocity Template Language (VTL) マッピングテンプレートを使用して写真に関する入力データを変換する方法を示しています。Velocity Template Language の詳細については、Apache Velocity - VTL リファレンス
入力データ |
|
出力マッピングテンプレート |
|
出力データ |
|
写真データの入力モデル
入力データのモデルを定義できます。この入力モデルでは、写真 1 枚のアップロードが必要であり、1 ページあたり最低 10 枚の写真を指定します。この入力モデルを使用して SDK を生成したり、API のリクエストの検証を有効にしたりできます。
{ "$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" } } } } } } } }
写真データの出力モデル
出力データのモデルを定義できます。このモデルはメソッドレスポンスモデルに使用できます。これは、API 用に厳密に型指定した SDK を生成するときに必要です。これにより、出力が Java や 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" } } } } } }
写真データの入力マッピングテンプレート
マッピングテンプレートを定義して入力データを変更できます。入力データを変更して、さらに関数統合や統合レスポンスを行うことができます。
#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 ] } }