I'm trying to set path parameters when making calls to API Gateway endpoints via the JavaScript SDK and not having any luck. It looks like I either have something misconfigured or there is a bug in the SDK generation.
I am able to successfully call endpoints that do not take path parameters but when I try to pass in a parameter to be used as a path parameter the SDK just replaces the path parameter with a blank and my call fails.
Example, assume client
is a properly initialized API Gateway client. I have an endpoint called /measurement
with a child of /measurement/{id}
. I am able to call both directly.
client.measurementGet({},{});
- successfully calls my /measurement
endpoint
client.measurementIdGet({"id": "1234"}, {});
- Browser makes a call to /measurement/
instead of /measurement/1234
Looking at the source of my apigClient.js, it appears that the SDK generator is not putting path parameters into the list of parameters that it's looking for. For example, the code of my generated measurementIdGet
method looks like this:
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);
};
I dug into the assertParametersDefined
and parseParametersToObject
and it looks like those methods are expecting a list of parameters to look for. In both cases the SDK has generated empty lists instead of putting my path parameter in there.
If I manually update the generated file to change the two lines to
apiGateway.core.utils.assertParametersDefined(params, ['id'], ['body']);
and
apiGateway.core.utils.parseParametersToObject(params, ['id'])
The SDK makes the proper call.
Am I missing something in my configuration or is there a bug in the code generator?
Path parameters help to scope the call down to one single resource, thereby saving you the trouble of having to build a body to deliver something as simple as a resource finder.
Connects a custom domain name registered via aws. apigateway. DomainName with a deployed API so that its methods can be called via the custom domain name.
If you are using cloud formation like me. You will need to add it in the RequestParameters.
for a resource like this /api/pets/{id}/attributes/{attrid} following code works
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With