本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
覆寫 API請求和回應參數和狀態碼的範例
下列範例示範如何建立和測試映射範本覆寫。前兩個範例使用 , AWS Management Console 而範例API作為起點。最後兩個範例使用適用於 SDK的 AWS CLI 和 JavaScript。
使用 覆寫 API的回應狀態碼 AWS Management Console
若要使用 PetStore 範例 擷取寵物API,您可以使用 API的方法請求GET /pets/{petId}
,其中 {petId}
是路徑參數,可在執行時間耗用 數字。
在此範例中,您將透過建立映射範本來覆寫此GET
方法的回應程式碼,以便在偵測到錯誤條件400
時映射$context.responseOverride.status
到 。
在 https://console.aws.amazon.com/apigateway
登入API閘道主控台。 -
在 下APIs,選擇 PetStore API,然後選擇 資源 。
-
在資源樹狀結構中的
/{petId}
下,選擇GET
方法。 -
選擇測試標籤。您可能需要選擇向右箭頭按鈕才能顯示此索引標籤。
-
對於 petId,輸入
-1
,然後選擇測試 。您會在結果中注意到兩件事:
首先,回應內文指出錯誤 out-of-range:
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
其次,在日誌方塊下的最後一列結尾為:
Method completed with status: 200
。 -
在整合回應索引標籤上,針對預設 - 回應,選擇編輯。
-
選擇對應範本。
-
選擇新增對應範本。
-
針對內容類型,輸入
application/json
。 -
針對範本內文,輸入下列內容:
#set($inputRoot = $input.path('$')) $input.json("$") #if($inputRoot.toString().contains("error")) #set($context.responseOverride.status = 400) #end
-
選擇儲存。
-
選擇測試標籤。
-
對於 petId,輸入
-1
。 -
在結果中,回應內文指出錯誤 out-of-range:
{ "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }
然而,在 Logs (日誌) 方塊下的最後一列目前結尾為:
Method completed with status: 400
。
使用 覆寫 API的請求參數和標頭 AWS Management Console
在此範例中,您將建立映射$context.requestOverride.header.
到結合其他兩個標頭的新標頭的映射範本,以覆寫header_name
GET
方法的請求標頭程式碼。
在 https://console.aws.amazon.com/apigateway
登入API閘道主控台。 -
在 下APIs,選擇 PetStore API。
-
在資源樹狀結構中的
/pet
下,選擇GET
方法。 -
在方法請求索引標籤上,針對方法請求設定,選擇編輯。
-
選擇HTTP請求標頭 ,然後選擇新增標頭 。
-
針對名稱,輸入
header1
。 -
選擇新增標頭,然後建立名為
header2
的第二個標頭。 -
選擇 Save (儲存)。
-
在整合請求索引標籤上,針對整合請求設定,選擇編輯。
-
針對請求內文傳遞,選取未定義範本時 (建議)。
-
選擇對應範本,然後執行下列動作:
-
選擇新增對應範本。
-
針對內容類型,輸入
application/json
。 -
針對範本內文,輸入下列內容:
#set($header1Override = "foo") #set($header3Value = "$input.params('header1')$input.params('header2')") $input.json("$") #set($context.requestOverride.header.header3 = $header3Value) #set($context.requestOverride.header.header1 = $header1Override) #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
-
-
選擇儲存。
-
選擇測試標籤。
-
在 {pets} ({pets}) 的 Headers (標頭) 下,複製下列程式碼:
header1:header1Val header2:header2Val
-
選擇 Test (測試)。
在日誌中,您應該會看到一個包括此文字的項目:
Endpoint request headers: {header3=header1Valheader2Val, header2=header2Val, header1=foo, x-amzn-apigateway-api-id=
<api-id>
, Accept=application/json, multivalueheader=foo,header1Valheader2Val}
使用 覆寫 API的請求參數和標頭 AWS CLI
下列CLI範例示範如何使用 put-integration
命令覆寫回應碼:
aws apigateway put-integration --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--type<INTEGRATION_TYPE>
--request-templates<REQUEST_TEMPLATE_MAP>
where <REQUEST_TEMPLATE_MAP>
是從內容類型到要套用之範本字串的映射。對應的結構如下所示:
Content_type1=template_string,Content_type2=template_string
或,以JSON語法表示:
{"content_type1": "template_string" ...}
下列範例示範如何使用 put-integration-response
命令來覆寫 API的回應碼:
aws apigateway put-integration-response --rest-api-id
<API_ID>
--resource-id<PATH_TO_RESOURCE_ID>
--http-method<METHOD>
--status-code<STATUS_CODE>
--response-templates<RESPONSE_TEMPLATE_MAP>
where <RESPONSE_TEMPLATE_MAP>
具有與 相同的格式 <REQUEST_TEMPLATE_MAP>
以上。
使用 SDK的 覆寫 API的請求參數和標頭 JavaScript
以下範例示範如何使用 put-integration
命令來覆寫回應程式碼:
要求:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ type: HTTP | AWS | MOCK | HTTP_PROXY | AWS_PROXY, /* required */ requestTemplates: { '
<Content_type>
': 'TEMPLATE_STRING', /* '<String>
': ... */ }, }; apigateway.putIntegration(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });
回應:
var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ statusCode: 'STRING_VALUE', /* required */ responseTemplates: { '<Content_type>': 'TEMPLATE_STRING', /* '<String>': ... */ }, }; apigateway.putIntegrationResponse(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });