63

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

Swagger で定義しようとしましたが、 asを設定した後にNot a valid parameter definitionというエラーが発生しました。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 でオプションのパラメーターを定義する他の方法はありますか、それともコードに誤りがありますか?

どんな助けでも大歓迎です。

4

5 に答える 5

57

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

  • /get/{param1}/{param2} param2 が指定されている場合
  • /get/{param1}/ param2 が指定されていない場合
于 2016-01-27T06:20:54.510 に答える
26

ベース uri パラメーターをオプションで指定することはできず、クエリ文字列の値 (URL の場合) のみを使用できるため、爆発する可能性があります。

例えば:

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

これはうまくいくはずです:

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

これは機能しないはずです

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

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

于 2016-01-26T14:55:18.000 に答える
5

仕様に記載されているように、YAML は失敗します。

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

ソース: http://swagger.io/specification/#parameterObject (固定フィールドテーブルを参照)

于 2016-03-08T22:09:55.713 に答える