對應範本 REST APIs - Amazon API 网关

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對應範本 REST APIs

在 API Gateway 中,方法要求或回應可以採用與整合要求或回應不同格式的裝載。API

您可以轉換資料:

  • 將有效負載與API指定的格式相符。

  • 覆蓋API的請求和響應參數和狀態代碼。

  • 傳回用戶端選取的回應標頭。

  • 建立 Proxy 或 HTTP Proxy 方法要求中的路徑參數、查詢字串參數或 AWS 服務 標頭參數的關聯。

  • 選取要使用整合傳送的資料 AWS 服務,例如 Amazon DynamoDB 或 Lambda 函數或端點。HTTP

您可以使用對應範本轉換資料。對應範本是以 Velocity 範本語言 (VTL) 表示的指令碼,並使用套用至有效負載JSONPath

本節說明與對映範本相關的概念資訊。如需為API閘道建立對應範本的指示 RESTAPI,請參閱在API閘道中設定資料轉換

對應範本範例

下列範例是將資料輸入至整合要求。

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

下列範例是用來轉換整合要求資料的對應範本。

#set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]

下列範例是轉換的輸出資料。

[ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]

下圖顯示此對應範本的詳細資訊。

對應範本範例
  1. $inputRoot變數代表上一節原始JSON資料中的根物件。指令以 # 符號開始。

  2. foreach循環遍歷原始JSON數據中的每個對象。

  3. 描述是寵物idtype原始JSON數據的連接。

  4. askingPriceprice是來自原始JSON資料的價格。

1 #set($inputRoot = $input.path('$')) 2 [ 3 #foreach($elem in $inputRoot) 4 { 5 "description" : "Item $elem.id is a $elem.type.", 6 "askingPrice" : $elem.price 7 }#if($foreach.hasNext),#end 8 #end 9 ]

在此對應範本中:

  1. 在第 1 行中,$inputRoot變數代表上一節原始JSON資料中的根物件。指令以 # 符號開始。

  2. 在第 3 行中,foreach循環遍歷原始JSON數據中的每個對象。

  3. 在第 5 行,description是 Pet idtype原始JSON數據的連接。

  4. 在第 6 行,askingPriceprice是來自原始JSON數據的價格。

如需有關速度範本語言的詳細資訊,請參閱 Apache 速度-VTL 參考。若要取得更多資訊JSONPath,請參閱 JSONPath「JSON」XPath的「」。

對應範本會假設基礎資料是JSON物件的。它不需要定義資料模型。不過,輸出資料的模型允許以語言特定物件的形式傳回先前的資料。如需詳細資訊,請參閱 資料模型 REST APIs

複雜的對應範本範例

您也可以建立更複雜的對應範本。下列範例說明用來判斷是否養得起寵物的參考串連和取捨點 (100)。

下列範例是將資料輸入至整合要求。

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

下列範例是用來轉換整合要求資料的對應範本。

#set($inputRoot = $input.path('$')) #set($cheap = 100) [ #foreach($elem in $inputRoot) { #set($name = "${elem.type}number$elem.id") "name" : $name, "description" : "Item $elem.id is a $elem.type.", #if($elem.price > $cheap )#set ($afford = 'too much!') #{else}#set ($afford = $elem.price)#end "askingPrice" : $afford }#if($foreach.hasNext),#end #end ]

下列範例是轉換的輸出資料。

[ { "name" : dognumber1, "description" : "Item 1 is a dog.", "askingPrice" : too much! }, { "name" : catnumber2, "description" : "Item 2 is a cat.", "askingPrice" : too much! }, { "name" : fishnumber3, "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]

您還可以看到更複雜的數據模型。請參閱API閘道的範例資料模型和對應範本