web-dev-qa-db-ja.com

Swagger:ワイルドカードパスパラメータ

たとえば、次のすべてのように、任意のパスを渡すことができるAPIがあります。

  • /api/tags
  • /api/tags/foo
  • /api/tags/foo/bar/baz

有効なパスです。私はそれを次のように説明しようとしました:

 /tags{tag_path}:
    get:
      parameters:
        - name: tag_path
          in: path
          required: true
          type: string
          default: "/"

ただし、 https://generator.swagger.io はパス内のスラッシュをエンコードするため、機能しません。では、SwaggerでAPIを説明する方法はありますか?

13
Dmitry Frank

したがって、これはすぐにはサポートされなくなり(Swagger 3.0でも計画されていません)、回避策を講じる必要があります。

パス/tags{tag_path}があり、次のようにtag_path/foo/barと入力すると、実際のクエリ要求URLは/tags%2Ffoo%2Fbarになります。そのため、バックエンドでそのサポートを追加しました。/tags*のエンドポイントハンドラーがパス(%2Ffoo%2Fbar)をデコードし、再び/foo/barになります。

はい、ハックですが、それは機能し、何もないよりはましです。私の場合、タグ名に/文字を含めることはできないため、競合は発生しません。もちろん、マイレージは異なる場合があります。

6
Dmitry Frank