如何解決 API Gateway 的「指定的對應運算式無效」錯誤?

2 分的閱讀內容
0

我使用 AWS CloudFormation 範本、OpenAPI 定義或 AWS Command Line Interface (AWS CLI) 命令來建立具有 Proxy 資源的 Amazon API Gateway API。我嘗試將網址路徑參數新增至 API 時,系統出現「指定的對應運算式無效」錯誤訊息。

簡短說明

當 Proxy 路徑參數 {proxy+} 不具有已定義的網址路徑參數對應時,API Gateway 會傳回 "Invalid mapping expression specified" 錯誤訊息。

若要解決此問題,請對您用來建立 API 的工具完成下列步驟。

解決方法

CloudFormation 範本

定義 AWS::ApiGateway::Method 區段的 RequestParameters 屬性。

完成下列步驟:

  1. 更新 CloudFormation 範本,以將 RequestParameters 值設定為 true

    範例範本:

    ....
    .
      ProxyMethod:
        Type: 'AWS::ApiGateway::Method'
        Properties:
          .
          .
          RequestParameters:
    
            method.request.path.proxy: true
    
          Integration:
            RequestParameters:
              integration.request.path.proxy: 'method.request.path.proxy'
    
            IntegrationHttpMethod: ANY
            .
            .
    ...
  2. 若要更新 API,使用 CloudFormation 範本更新 API 更新 AWS CloudFormation 堆疊

**注意:**如需如何更新 API Gateway 資源的詳細資訊,請參閱 Amazon API Gateway 資源類型參考

OpenAPI 定義

定義 x-amazon-apigateway-any-method object 中的參數區段。

完成下列步驟:

  1. 更新您的 API 定義,使 x-amazon-apigateway-any-method 區段下方的參數具有下列值:

          "x-amazon-apigateway-any-method": {                "parameters": [
              {
                "name": "proxy",
                "in": "path",
                "required": true,
                "type": "string"
              }
            ]
    
    ....
    
    ....
    
    }
  2. 將更新的 API 定義檔匯入 API Gateway 以更新 API。

**注意:**如需詳細資訊,請參閱 Swagger 網站的說明參數

AWS CLI 命令

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

在執行 put-integration 命令來設定整合時,請新增 --request-parameters

  1. 執行 update-method 命令以更新 HTTP 方法的方法請求組態:

    aws apigateway update-method \
        --rest-api-id <your-api-id> \
        --resource-id <your-resource-id> \
        --http-method <your-http-method> \
        --patch-operations op="add",path="/requestParameters/method.request.path.proxy",value="true"
  2. 執行 put-integration 命令以更新具有 --request-parameters 的 HTTP 方法的整合請求組態。範例參數命名為 proxy,並且具有 method.request.path.proxy 的值。put-integration 命令設定與 VPC 鏈路HTTP_PROXY 整合:

    aws apigateway put-integration \
        --rest-api-id <your-api-id>\
        --resource-id <your-resource-id> \
        --http-method <your-http-method> \
        --type HTTP_PROXY \
        --integration-http-method <your-integration-http-method> \
        --uri "<your-integration-endpoint-uri>" \
        --connection-type VPC_LINK \
        --connection-id <your-vpclink-connection-id> \
        --request-parameters "integration.request.path.proxy=method.request.path.proxy"

    **注意:**用您的值取代所有範例值。

測試設定

完成下列步驟:

  1. 開啟 API Gateway 主控台,然後選擇 API 的名稱。
  2. 新增 URL 路徑參數
    **注意:**如果您的 Proxy 路徑參數包含正確定義的網址路徑參數對應,系統就不會出現錯誤。

相關資訊

x-amazon-apigateway-integration.requestParameters 物件

使用 Proxy 資源設定 Proxy 整合

設定 REST API 的資料轉換

AWS 官方
AWS 官方已更新 9 個月前