Swagger / Open API - проверка запроса по схеме swagger в зависимости от параметра тела запроса пользователя - PullRequest
0 голосов
/ 30 октября 2018

У меня есть некоторые трудности с проверкой OAS3 (swagger). Я пытаюсь создать проект, который использует AWS API-шлюз, определенный в файле swagger. В этом проекте пользователи могут загружать документы. Перед сохранением входящего документа мне нужно выполнить некоторую проверку в зависимости от значения параметра тела запроса documentType . Есть ли возможность в OAS для проверки динамической схемы? У меня есть запрос как это:

Запрос пользователя:

POST: documents/

с таким телом запроса:

{
   "key1":"value1",
   "key2":"value2",
   "documentType":"x",
   "data":{
       "foo":"valueA",
       "bar":"valueB"
    }
}

Проблематика

Мне нужно определить валидацию для объекта данных в зависимости от заданного значения documentType. Допустим, documentType равен x, поэтому мне нужно проверить объект данных по схеме x. Если documentType равен y, проверьте его по схеме y и т. Д. Мне также нужно обрабатывать ситуацию по умолчанию, когда данный documentType не имеет своего валидатора. В этом случае я хочу вернуть ошибку неверного запроса. Может ли ОАГ этого добиться? Если да, то как?

Возможное решение

paths:
  /documents:
    post:
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/DocType1'
                - $ref: '#/components/schemas/DocType2'
      responses:
        '200':
          description: Updated
components:
  schemas:
    DocType1:
      type: object
      properties:
        key1:
          type: string
        key2:
          type: string
        documentType:
          type: string
          enum: [x]
        data:
          properties:
            foo:
              type: string
            bar:
              type: string
    DocType2:
      type: object
      properties:
        key1:
          type: string
        key2:
          type: string
        documentType:
          type: string
          enum: [y]
        data:
          properties:
            baz:
              type: string
            qux:
              type: string

Это моя идея, как это может работать, но мне это не нравится. Я вижу проблемы, когда тело запроса становится большим, даже если это решение можно упростить с помощью ссылок. Я надеюсь, что есть ясное решение, но все еще не в моем понимании.

...