2017-09-27 11 views
1

私はAPIを定義しており、 "ペイロード"と呼ばれるフィールドを持っています。しかし、それらのペイロードデータは構造を持っているし始めて私たちの闊歩に文字列オブジェクトが1つのタイプをスワッガーで持つことを許可する

:私たちは

「タイプ」として定義され、このフィールドを持っていました。より具体的には、クライアントはjsonオブジェクトをいくつかのルールに従わなければならないペイロードデータとして送信します。例えば、ペイロードは、可能性が:それは猫のオブジェクトである場合、ペイロードは犬オブジェクトまたは

{ 
    "hunts": true, 
    "age": 13 
} 

ある

{ 
    "bark": true, 
    "breed": "Dingo" 
} 

場合。

payload: 
     $ref: "#/definitions/payloaddata" 

と私は定義領域に:しかし

components: 
    schemas: 
    Dog: 
     type: object 
     properties: 
     bark: 
      type: boolean 
     breed: 
      type: string 
      enum: [Dingo, Husky, Retriever, Shepherd] 
    Cat: 
     type: object 
     properties: 
     hunts: 
      type: boolean 
     age: 
      type: integer 

payloaddata: 
    type: "object" 
    schema: 
     oneOf: 
     - $ref: '#/components/schemas/Cat' 
     - $ref: '#/components/schemas/Dog' 

コンポーネントは次のように定義されている私が最初に持ってYAMLファイルでそう

yamlファイルはこの入力で "コンパイル"されません。どのようにこれを行うにはどのようなアイデア?

+0

仕様OpenAPI/Swagger 2.0またはOpenAPI 3.0ですか? 'oneOf'は3.0でのみサポートされています。 – Helen

+0

swagger:ファイルの先頭に「3.0」が追加されました。私はeditor.swagger.ioで働いています – cateof

+0

2.0にとどまり、パラメータとして複数の型を値として持つことができますか? editor.swagger dot ioは "3.0"をサポートしていません – cateof

答えて

1

oneOfはOpenAPI 3.0ではサポートされますが、OpenAPI/Swagger 2.0ではサポートされません。投稿したコードは、swagger: '2.0'の代わりにopenapi: 3.0.0と指定されている限り問題ありません。仕様で他のものを変更する必要がある場合もあります。 #/definitions/ - >#/components/schemas/...などです。

+0

私はこの答えを見つけ出すまで*方法*過度の時間を費やしました...ありがとう! –

関連する問題