web-dev-qa-db-ja.com

プロパティを指定する方法は、nullまたはswaggerを使用した参照にすることができます

プロパティをnullまたは参照として指定する方法は? jsonschemaを使用してプロパティをnullまたは参照として指定する方法について説明します。

闊歩で同じことをしたいと思っています。

上記の答えをjsonschemaで要約すると、次のようになります。

{
   "definitions": {
      "Foo": {
         # some complex object
      }
   },

   "type": "object",
   "properties": {
      "foo": {
         "oneOf": [
            {"$ref": "#/definitions/Foo"},
            {"type": "null"}
         ]
      }
   }
}

答えの要点は、oneOfの使用でした。

私の質問の要点:

  1. DRY)を保持したい複雑なオブジェクトがあるので、それを定義セクションに入れて、スワガー仕様全体で再利用します。他のプロパティの値、応答オブジェクトなどです。

  2. 私の仕様のさまざまな場所で、プロパティはそのようなオブジェクトへの参照である可能性がありますOR nullです。

oneOfまたはanyOfをサポートしないSwaggerでこれを指定するにはどうすればよいですか?

注:一部のSwagger実装では、x-nullable(またはそのようなもの)を使用してプロパティ値をnullにすることができますが、$refreplacesオブジェクトが参照しているため、x-nullableの使用は無視されているように見えます。

8
djpinne

それをするのは簡単ではありません。ほとんど不可能ですら。あなたのオプション:

待つ

これについては非常に長い議論があります ポイント 、多分いつかそれが行われるでしょう...

ベンダー拡張機能を使用する

ベンダー拡張x-oneOfおよびx-anyOfのように使用できます。私はすでにこの難しい方法をとっています:これらのベンダーの拡張機能を考慮に入れるには、すべてのused 'swaggertools'をアップグレードする必要があります。

私の場合、必要なのは「のみ」です。

  • ソースからSwaggerAPIファイルを抽出するために、カスタマイズされたアノテーションを使用して独自のJax-RSパーサーを開発します
  • Swagger-codegenを拡張して、これらの拡張機能を考慮に入れ、クライアント用のJavaコードを生成します。
  • 独自のswagger-uiを開発します。この作業を容易にするために、拡張機能を備えたswaggerスキーマを有効なjsonスキーマに変換する前処理ステップを追加しました。 javascriptのSwaggerスキーマよりも、jsonスキーマを表すモジュールを見つける方が簡単です。短所として、「試してみる」ボタンでAPIをテストするというアイデアをあきらめました。

一年前、多分今...

APIをリファクタリングします

多くのプロジェクトはanyOfとoneOfを必要としません、なぜ私たちではないのですか?

2
Nelson G.

OpenAPI 3.0では、次を使用できます。

"foo": {
    "nullable": true,
    "allOf": [
        {
            "$ref": "#/definitions/Foo"
        }
    ]
}

YAMLバージョン:

foo:
  nullable: true
  allOf:
  - $ref: '#/definitions/Foo'

$refを他のキーワードと組み合わせるには$refallOfにラップする必要があります-$refは兄弟キーワードを上書きするためです。これについては、OpenAPI仕様リポジトリで詳しく説明されています。 参照オブジェクトは「nullable」とうまく結合しません

8
Helen