たとえば、次のすべてのように、任意のパスを渡すことができる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を説明する方法はありますか?
したがって、これはすぐにはサポートされなくなり(Swagger 3.0でも計画されていません)、回避策を講じる必要があります。
パス/tags{tag_path}
があり、次のようにtag_path
:/foo/bar
と入力すると、実際のクエリ要求URLは/tags%2Ffoo%2Fbar
になります。そのため、バックエンドでそのサポートを追加しました。/tags*
のエンドポイントハンドラーがパス(%2Ffoo%2Fbar
)をデコードし、再び/foo/bar
になります。
はい、ハックですが、それは機能し、何もないよりはましです。私の場合、タグ名に/
文字を含めることはできないため、競合は発生しません。もちろん、マイレージは異なる場合があります。