При создании шлюза 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
.