在AWS API Gateway JavaScript SDK中设置路径参数

时间:2016-03-12 20:40:54

标签: amazon-web-services aws-api-gateway

我尝试通过JavaScript SDK调用API Gateway端点时设置路径参数,但没有任何运气。看起来我要么配置错误,要么SDK生成中存在错误。

我能够成功调用不接受路径参数的端点,但是当我尝试传入一个参数用作路径参数时,SDK只是将路径参数替换为空白而我的调用失败。

示例,假设client是正确初始化的API网关客户端。我有一个名为/measurement的端点,其子级为/measurement/{id}。我可以直接打电话。

client.measurementGet({},{}); - 成功调用我的/measurement端点 client.measurementIdGet({"id": "1234"}, {}); - 浏览器拨打/measurement/而不是/measurement/1234

查看我的apigClient.js的来源,似乎SDK生成器没有将路径参数放入它正在寻找的参数列表中。例如,我生成的measurementIdGet方法的代码如下所示:

    apigClient.measurementIdGet = function (params, body, additionalParams) {
        if(additionalParams === undefined) { additionalParams = {}; }

        apiGateway.core.utils.assertParametersDefined(params, [], ['body']);

        var measurementIdGetRequest = {
            verb: 'get'.toUpperCase(),
            path: pathComponent + uritemplate('/measurement/{id}').expand(apiGateway.core.utils.parseParametersToObject(params, [])),
            headers: apiGateway.core.utils.parseParametersToObject(params, []),
            queryParams: apiGateway.core.utils.parseParametersToObject(params, []),
            body: body
        };

        return apiGatewayClient.makeRequest(measurementIdGetRequest, authType, additionalParams, config.apiKey);
    };

我挖掘了assertParametersDefinedparseParametersToObject,看起来这些方法需要查找参数列表。在这两种情况下,SDK都生成了空列表,而不是将路径参数放在那里。

如果我手动更新生成的文件,将两行更改为

apiGateway.core.utils.assertParametersDefined(params, ['id'], ['body']);

apiGateway.core.utils.parseParametersToObject(params, ['id'])

SDK正确调用。

我在配置中遗漏了什么或者代码生成器中是否有错误?

3 个答案:

答案 0 :(得分:1)

如果您正在使用像我这样的云形成。您需要将其添加到RequestParameters

对于像这样的资源/ api / pets / {id} / attributes / {attrid}代码工作

  PetsByIdAttributesByAttridGetMethod:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref MyApi
      ResourceId: !Ref PetsByIdAttributesByAttridResource
      HttpMethod: GET
      AuthorizationType: AWS_IAM
      RequestParameters:
        method.request.path.id : true
        method.request.path.attrid : true
      Integration:
        Type: AWS_PROXY
        IntegrationHttpMethod: POST
        Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyLambda.Arn}/invocations

答案 1 :(得分:0)

假设您正在导入一个swagger定义来创建API,那么在方法级别而不是路径级别定义parameters将导致生成的SDK填充key out并且应该正常工作。

{
    ...
    "/path/{to}/resource": {
        "get": {
            "parameters": [ // define here
                "name": "to",
                "in": "path",
                ...
            ],
            ...
        },
        "parameters": [] // not here
}

虽然根据Swagger规范在路径级定义parameters是正确的,并且API网关确实在创建的API中使用它们,但似乎API Gateway在某些情况下忽略它们。

答案 2 :(得分:0)

这看起来像是一个问题,无法解析参数。

https://github.com/aws/chalice/issues/498 enter link description here