Swagger架构中的oneOf不起作用

fas*_*ava 11 yaml jsonschema swagger

我想定义PaymentMethod如下.是否支持swagger.yaml?

PaymentMethod:
      oneOf:
        - $ref: '#/definitions/NewPaymentMethod'
        - $ref: '#/definitions/ExistPaymentMethod'
Run Code Online (Sandbox Code Playgroud)

ExistPaymentMethod将只有ID,并cardNumber在那里NewPaymentMethod将没有id,但所有其他的细节,例如cardNumber,cardholderName,cardholderAddress等.

小智 19

oneOf在OpenAPI版本3(openapi: 3.0.0)中受支持,但在Swagger版本2(swagger: '2.0')中不受支持.

PaymentMethod:
  oneOf:
    - $ref: '#/components/schemas/NewPaymentMethod'
    - $ref: '#/components/schemas/ExistPaymentMethod'
Run Code Online (Sandbox Code Playgroud)

GitHub问题参考:https://github.com/OAI/OpenAPI-Specification/issues/333

有关OpenAPI 3.0与2.0相比的更改列表,请参阅:https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/


Jas*_*ers 7

Swagger使用的仅受JSON Schema的启发.他们没有偏离JSON Schema太多,但他们留下一些东西,添加一些东西,并改变一些行为.Swagger遗漏的一件事是oneOf.

有关详细信息,请访问http://swagger.io/specification/#schemaObject

  • 这个答案已经过时了 - 现在在OpenAPI 3.0中支持`oneOf`,如[Evan Torkos的回答](/sf/answers/3117428961/)中所述. (4认同)