web-dev-qa-db-ja.com

swaggerを使用してパスにオプションのパラメーターを定義する方法

GETメソッドで動作するREST Webサービスには関数があり、2つのオプションパラメーターがあります。

Swaggerで定義しようとしましたが、requiredfalseとして設定した後、エラーが発生しました有効なパラメーター定義ではありません

requiredの値をtrueに設定すると、エラーがなくなることがわかりました。 Swaggerコードのサンプルを次に示します。

...
paths:
  '/get/{param1}/{param2}':
    get:
      ...
      parameters:
      - name: param1
        in: path
        description: 'description regarding param1'
        required: false
        type: string
      - name: param2
        in: path
        description: 'description regarding param2'
        required: false
        type: string

本体のパラメーターやクエリのパラメーターではこれを経験しませんでした。この問題は、パス内のパラメーターにのみ関連していると思います。 swagger仕様ファイルにも解決策が見つかりませんでした。

Swaggerでオプションのパラメーターを定義する他の方法はありますか、またはコードに誤りがありますか?

任意の助けをいただければ幸いです。

45
Hedeshy

OpenAPI/Swagger仕様に従ってパスパラメーターが必要な場合、次のパスを持つ2つの個別のエンドポイントを追加することを検討できます。

  • /get/{param1}/{param2}param2が提供されている場合
  • /get/{param1}/param2が提供されていない場合
38
William Cheng

基本的なuriパラメータをオプションで持つことはできず、クエリ文字列値(urlの場合)のみを持つため、爆発する可能性があります。

例えば:

  • GET/products/{id}/pricing?foo = bar
  • ** fooがオプションの場合、INパラメータは「パス」ではなく「クエリ」である必要があります
  • ** {id}がオプションの場合、何か問題があります。 {id}は、ベースuriに含まれているため、オプションにすることはできません。

これは動作するはずです:

{
"in":"query",
"required":false
}

これは機能しません

{
"in":"path",
"required":false
}

「in」プロパティを「path」ではなく「query」に変更すると、機能するはずです。

24
Jerrod Horton

YAMLが失敗する理由は、仕様に記載されているとおりです。

このパラメーターが必須かどうかを決定します。パラメータが「パス」にある場合、このプロパティは必須であり、その値はtrueでなければなりません。

ソース: http://swagger.io/specification/#parameterObject固定フィールドテーブルを見てください)

4
Paulo Oliveira