使用閘道主控台設RESTAPI定API閘道回應 - Amazon API 网关

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

使用閘道主控台設RESTAPI定API閘道回應

下列範例顯示如何使用閘道主控台設RESTAPI定API閘道回應

使用閘道主控台自訂API閘道回應
  1. 請在 https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選擇一個RESTAPI。

  3. 在主導覽窗格中,選擇閘道資源

  4. 選擇回應類型,然後選擇編輯。在此逐步說明中,我們使用遺漏身分驗證權杖作為範例。

  5. 您可以變更API閘道產生的狀態碼,以傳回符合您API需求的不同狀態碼。在此範例中,自訂會將狀態碼從預設值 (403) 變更為 404,因為當用戶端呼叫可視為找不到的不支援或無效資源時會出現此錯誤訊息。

  6. 若要傳回自訂標頭,請在回應標頭下,選擇新增標頭。為了方便說明,我們新增下列自訂標頭:

    Access-Control-Allow-Origin:'a.b.c' x-request-id:method.request.header.x-amzn-RequestId x-request-path:method.request.path.petId x-request-query:method.request.querystring.q

    在先前的標頭對應中,靜態網域名稱 ('a.b.c') 會對應至Allow-Control-Allow-Origin標頭以允許CORS存取API;回應request-id中的x-amzn-RequestId輸入要求標頭會對應至;傳入要求的 petId path 變數會對應至回應中的request-path標頭;原始要求的 q query 參數會對應至回應的request-query標頭。

  7. 回應範本下,將內容類型保持為 application/json,然後在範本內文編輯器中輸入下列內文對應範本:

    { "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }

    此範例示範如何將 $context$stageVariables 屬性對應到閘道回應內文的屬性。

  8. 選擇儲存變更

  9. API將部署到新的或現有的階段。

通過調用以下CURL命令來測試您的網關響應,假設對應API方法的調用URL是https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}

curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1

由於額外的查詢字串參數與q=1不相容API,因此會從指定的閘道回應傳回錯誤。您應該取得類似如下的閘道回應:

> GET /custErr/pets/5?q=1 HTTP/1.1 Host: o81lxisefl.execute-api.us-east-1.amazonaws.com User-Agent: curl/7.51.0 Accept: */* HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 334 Connection: keep-alive Date: Tue, 02 May 2017 03:15:47 GMT x-amzn-RequestId: 123344566 Access-Control-Allow-Origin: a.b.c x-amzn-ErrorType: MissingAuthenticationTokenException header-1: static x-request-query: 1 x-request-path: 5 X-Cache: Error from cloudfront Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront) X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA== { "message":"Missing Authentication Token", "type": MISSING_AUTHENTICATION_TOKEN, "statusCode": '404', "stage": custErr, "resourcePath": /pets/{petId}, "stageVariables.a": a }

上述範例假設後API端為 Pet Storea且API已定義階段變數。