Swagger / Open API-根据用户请求主体参数针对swagger模式验证请求

时间:2018-10-30 14:03:41

标签: amazon-web-services swagger openapi

我在OAS3(摇摇欲坠)验证方面遇到一些困难。我正在尝试建立使用由swagger文件定义的AWS API网关的项目。在该项目中,用户可以上传文档。在存储传入文档之前,我需要根据请求正文参数 documentType 的值进行一些验证。 OAS中是否有可能进行动态模式验证?我有这样的要求:

用户请求:

POST: documents/

具有这样的请求正文:

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

问题

我需要根据给定的documentType值为数据对象定义摇摇欲坠的验证。可以说documentType是x,所以我需要根据模式x验证数据对象。如果documentType为y,则根据模式y对其进行验证,依此类推。当给定documentType没有其验证器时,我还需要处理默认情况。在这种情况下,我想返回错误的请求错误。 OAS能做到这一点吗?如果可以,怎么办?

可能的解决方案

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

这是我的想法,它如何工作,但我不喜欢它。我看到当请求主体变大时出现问题,即使可以通过引用简化此解决方案。我希望有一个明确的解决方案,但仍然无法解决。

0 个答案:

没有答案