53

OPが200または400を返そうとしていたため、この質問は( Swagger - オプションのオブジェクトプロパティまたは複数の応答を指定する)の複製ではありません。

GETオプションのパラメーターを持つ があります。例: GET /endpoint?selector=foo

パラメータが渡されたかどうかに基づいてスキーマが異なる 200 を返したいです。

GET /endpoint -> {200, schema_1}
GET /endpoint?selector=blah  -> {200, schema_2}

yaml で、2 つの 200 コードを使用しようとしましたが、ビューアーは 1 つだけを指定したかのようにそれらを押しつぶしてしまいます。

これを行う方法はありますか?

編集: 以下は関連しているようです: https://github.com/OAI/OpenAPI-Specification/issues/270

4

2 に答える 2

-3

私は同じことを望んでいましたが、うまくいくと思われる回避策を思いつきました:

2 つの異なるパスを定義しました。

/path:
(...)
      responses:
        200:
          description: Sucesso
          schema:
            $ref: '#/definitions/ResponseOne'
(...)

/path?parameter=value:
(...)
      responses:
        200:
          description: Sucesso
          schema:
            $ref: '#/definitions/ResponseTwo'
(...)

パスは、swagger エディターで機能します。各オプションを別の方法で文書化し、2 番目のケースにしか存在しない可能性があるオプションのパラメーターをまとめて、API 文書をより明確にすることもできます。operationId を使用すると、生成された API メソッドにわかりやすい名前を付けることができます。

ここ ( https://github.com/OAI/OpenAPI-Specification/issues/270 ) に同じソリューションを投稿して、さらに何か不足しているかどうかを確認しました。

明示的に許可されていない/推奨されていないことを理解しています(明示的に禁止している場所も見つかりませんでした)。しかし、回避策として、現在の仕様でこの動作を持つ API を文書化する唯一の方法である、オプションのように見えます。

私が見つけた2つの問題:

  • Java コード生成 URL は「=」記号をエスケープするため、生成されたコードでこれを修正しない限り機能しません。おそらく、他のコードジェネレーターでも発生します。
  • より多くのクエリ パラメータがある場合は、余分な「?」が追加されます。そして失敗します。

それらがブロッカーでない場合、少なくともそのようなケースを適切に文書化し、swagger エディターでテストできるようになります。

于 2016-09-06T17:48:20.883 に答える