Как повторно использовать мое определение x-amazon-apigateway-интеграции в документе Swagger YAML? - PullRequest
0 голосов
/ 14 ноября 2018

В настоящее время я использую Swagger для определения API со многими конечными точками, и каждая из этих конечных точек имеет одно и то же определение для ключа «x-amazon-apigateway-интеграция». Я хотел бы определить это где-то в документе и повторно использовать это определение повсеместно.

Либо я не понимаю, как должно быть определено определение, я не помещаю его в правильное местоположение или их сочетание. Я попытался определить это определение в «определениях» и как псевдоним под его собственным ключом. Определение (с удалением ключевой информации):

x-amazon-apigateway-integration:
  responses:
    default:
      statusCode: '200'
  passthroughBehavior: when_no_match
  httpMethod: POST
  uri: >-
    arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<lambda arn>/invocations
  credentials: '<role arn>'
  type: aws     
  requestTemplates: "application/json": "<object definition>"  

Я попытался определить это как псевдоним под своим собственным ключом (не определениями, а той же базовой областью):

amazon:
  Amazon: &Amazon
    - responses:
        default:
          statusCode: '200'
    - passthroughBehavior: when_no_match
    - httpMethod: POST
    - uri: >-
    arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<lambda arn>/invocations
    - credentials: '<role arn>'
    - type: aws     
    - requestTemplates:
      "application/json": "<object definition>"

Чтобы использовать, у меня есть следующее:

x-amazon-apigateway-integration:
  *Amazon

Ошибка при импорте API-шлюза: «Невозможно проанализировать определение API из-за неправильной интеграции по пути /»

Я также попытался определить это в разделе «определения» и использовать для доступа к нему «ref»:

definitions:
  Amazon:
    type: object
    x-amazon-apigateway-integration:
      responses:
        default:
          statusCode: '200'
      passthroughBehavior: when_no_match
      httpMethod: POST
      uri: >-
          arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<lambda arn>/invocations
      credentials: '<role arn>'
      type: aws     
      requestTemplates:
        "application/json": "<object definition>"   

Для использования у меня есть следующее:

x-amazon-apigateway-integration:
  $ref: '#/definitions/Amazon'

При импорте в API Gateway я получаю следующие ошибки:

Ваш API не был импортирован из-за ошибок в файле Swagger.

  • Невозможно создать модель для Amazon: указана неверная модель: Результат проверки: предупреждения: [], ошибки: [Указана неверная схема модели. Неподдерживаемые ключевые слова: ["x-amazon-apigateway-интеграции"]]
  • Кроме того, были найдены следующие предупреждения:
  • Неизвестный тип интеграции 'null' для 'POST /'. Не обращая внимания.

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 14 ноября 2018

Использование якоря YAML кажется хорошей идеей.Правильный синтаксис выглядит следующим образом.

Добавьте на корневом уровне вашего файла OpenAPI следующее:

x-definitions:      # <--- "x-" before "definitions" prevents it from being
                    #      attempted to be parsed as an OpenAPI Schema object.
  Amazon: &Amazon   # <--- "&Amazon" is the anchor
    type: object
    x-amazon-apigateway-integration:
      responses:
        default:
          statusCode: '200'
      passthroughBehavior: when_no_match
      httpMethod: POST
      uri: >-
          arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<lambda arn>/invocations
      credentials: '<role arn>'
      type: aws     
      requestTemplates:
        "application/json": "<object definition>" 

Затем вы можете ссылаться на якорь следующим образом:

x-amazon-apigateway-integration: *Amazon

Однако, возможно, что анализатор AWS не поддерживает якоря YAML (&..., *...).В этом случае вы можете попробовать предварительно обработать ваше определение, используя анализатор, который может разрешить привязки YAML, а затем передать обработанный файл в AWS.

...