web-dev-qa-db-ja.com

SwaggerスキーマのoneOfが機能しない

PaymentMethodを以下のように定義したい。 swagger.yamlでoneOfはサポートされていますか?

PaymentMethod:
      oneOf:
        - $ref: '#/definitions/NewPaymentMethod'
        - $ref: '#/definitions/ExistPaymentMethod'

ExistPaymentMethodにはIDのみが含まれ、cardNumberにはNewPaymentMethodにはidは含まれませんが、その他すべての詳細が含まれます。 cardNumbercardholderNamecardholderAddressなど.

11
fastcodejava

oneOfはOpenAPIバージョン3(openapi: 3.0.0)、ただしSwaggerバージョン2(swagger: '2.0')。

PaymentMethod:
  oneOf:
    - $ref: '#/components/schemas/NewPaymentMethod'
    - $ref: '#/components/schemas/ExistPaymentMethod'

GitHubの問題のリファレンス: https://github.com/OAI/OpenAPI-Specification/issues/3

2.0と比較したOpenAPI 3.0の変更点のリストについては、次を参照してください。 https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/

20
Evan Torkos

Swaggerが使用するものは、JSONスキーマにのみ影響を受けています。彼らはJSONスキーマからそれほど逸脱していませんが、いくつかを省略し、いくつかを追加し、いくつかの動作を変更しています。 Swaggerが除外していることの1つはoneOfです。

詳細は http://swagger.io/specification/#schemaObject にあります。

6

OneOf、anyOf、およびその他の同様のディレクティブは、swagger 2.0ではサポートされていませんが、Open API 3.0仕様ではサポートされています。

Swagger 2.0ファイルをOpen API 3.0ファイルに変換する必要があります。

ここにリンクがあります- https://blog.runscope.com/posts/tutorial-upgrading-swagger-2-api-definition-to-openapi-

ここにもう1つの便利なリンクがあります- https://github.com/swagger-api/swagger-ui/issues/38

1
Dattatray