requestTemplates и responseTemplates не работают в AWS шаблоне SAM Gateway API - PullRequest
0 голосов
/ 01 мая 2020

У меня проблема с получением заданных шаблонов requestTemplates и responseTemplates.

Соответствующий фрагмент моего (обработанного) шаблона находится здесь:

/cse:
            options:
              x-amazon-apigateway-integration:
                type: mock
                requestTemplates:
                  application/json: |
                    {
                      "statusCode" : 200
                    }
                responses:
                  default:
                    statusCode: '200'
                    responseTemplates:
                      application/json: |
                        {}
                    responseParameters:
                      method.response.header.Access-Control-Allow-Origin: '''*'''
                      method.response.header.Access-Control-Allow-Methods: '''GET,OPTIONS'''
              summary: CORS support
              responses:
                '200':
                  headers:
                    Access-Control-Allow-Origin:
                      schema:
                        type: string
                    Access-Control-Allow-Methods:
                      schema:
                        type: string
                  description: Default response for CORS method
            get:
              x-amazon-apigateway-integration:
                httpMethod: POST
                requestTemplates:
                  application/json: |
                    {
                      "body": $input.json('$'),
                      "headers": {
                        #foreach($header in $input.params().header.keySet())
                        "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end
                          #end
                      },
                      "method": "$context.httpMethod",
                      "params": {
                        #foreach($param in $input.params().path.keySet())
                        "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
                          #end
                      },
                      "query": {
                        #foreach($queryParam in $input.params().querystring.keySet())
                        "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
                          #end
                      }
                    }
                type: aws
                responses:
                  default:
                    statusCode: 200
                    responseTemplates:
                      text/html: $input.path('$')
                    responseParameters:
                      method.response.header.Access-Control-Allow-Origin: '''*'''
                      method.response.header.Access-Control-Allow-Methods: '''GET,OPTIONS'''
                uri: !Sub >-
                  arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${CSELambda.Arn}/invocations
              responses:
                '200':
                  headers:
                    Access-Control-Allow-Origin:
                      type: string
                    Access-Control-Allow-Methods:
                      type: string
                  description: OK

Бит options автоматически генерируется AWS путем добавления записи Cors в шаблон и работает нормально. Посмотрите, как он определяет responseTemplates и requestTemplates, и он работает.

Бит get - это тот, который я пытаюсь заставить работать. Насколько я могу судить, я использую тот же формат, что и автоматически сгенерированный бит options, но API-шлюз не устанавливает эти 2 шаблона, и я в растерянности.

Гуглил, пробовал разные вещи пока безрезультатно. Любая помощь приветствуется.

...