AWS API-шлюз изменяет путь OAS3 и типы параметров запроса на строку - PullRequest
2 голосов
/ 06 января 2020

При создании шлюза API с использованием определения OAS3 типы параметров пути и запроса изменяются на строки. Я не могу найти документацию AWS, в которой указано ожидаемое поведение или почему это так. Я знаю, что при настройке API-шлюза вручную он не предоставляет type для переменных пути / запроса, но есть ли способ заставить API-шлюз сохранить тип параметра OAS3 path / query для документации?

Мы пытаемся использовать Портал разработчиков без сервера для размещения нашей документации по API, и нам необходимо предоставить правильные типы параметров; например, для параметра запроса limit он должен отображаться как integer.

Вот пример SAM для базового c примера. Параметр пути param представляет собой integer, и документация, сгенерированная swagger, отображает его правильно, однако API-шлюз меняет его на string, а сгенерированная документация показывает его как string:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  ComplexityScoreProxy:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      DefinitionBody:
        openapi: 3.0.1
        info:
          version: "1"
          title: Aws API Gateway Boolean Test
        paths:
          /{param}:
            get:
              x-amazon-apigateway-integration:
                type: http_proxy
                uri: https://example.com
                httpMethod: GET
                responses:
                  "200":
                    statusCode: 200
              parameters:
                - name: param
                  in: path
                  required: true
                  schema:
                    type: integer
              responses:
                "200":
                  description: OK

Поместите SAM в tempalte.yaml и запустите cloudformation для развертывания:

aws cloudformation deploy --template-file template.yaml --stack-name boolean-test

Получите ID

aws apigateway get-rest-apis --query "items[?name=='Aws API Gateway Boolean Test'].id"

Получите OAS, заменив --rest-api-id с правильным идентификатором:

aws apigateway get-export --parameters extensions='apigateway' --rest-api-id XXXXXXXXXX --stage-name dev --export-type swagger latestoas.json

В экспортированном определении OAS3 параметр отображается в виде строки:

 "paths" : {
    "/{param}" : {
      "get" : {
        "parameters" : [ {
          "name" : "param",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],

Кроме того, при просмотре сгенерированной документации swagger на Портале для разработчиков без сервера param отображается как string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...