'Defining URL Query String Parameters in AWS::Serverless::Api SAM template

How do I define and validate URL Query String Parameters for an AWS::Serverless::Api in a SAM template?

They don't seem to be mentioned in the documentation https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html

Just to be clear this is what I am talking about enter image description here



Solution 1:[1]

The URL Query String Parameters is defined in AWS::Serverless::Function rather than AWS::Serverless::Api using RequestParameters property.

All parameter names must start with method.request and must be limited to method.request.header, method.request.querystring, or method.request.path.

For example to define email, name in URL Query String Parameters and Authorization in HTTP Request Headers u can do the following:

Events:
 ApiEvent:
   Type: Api
   Properties:
     Path: /path
     Method: get
     RequestParameters:
       - method.request.querystring.email:
           Required: true
           Caching: false
       - method.request.querystring.name:
           Required: true
           Caching: false
       - method.request.header.Authorization:
           Required: true
           Caching: true

I hope this helps.

Solution 2:[2]

I think that your response is in another resource, AWS::ApiGateway::Method.

Check the documentation (search for Request Parameters):

The request parameters that API Gateway accepts. Specify request parameters as key-value pairs (string-to-Boolean mapping), with a source as the key and a Boolean as the value. The Boolean specifies whether a parameter is required. A source must match the format method.request.location.name, where the location is querystring, path, or header, and name is a valid, unique parameter name.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestparameters

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Filipe Mendes