Reputation: 10757
I have an API which allows any arbitrary path to be passed in, for example all of these:
/api/tags
/api/tags/foo
/api/tags/foo/bar/baz
Are valid paths. I tried to describe it as follows:
/tags{tag_path}:
get:
parameters:
- name: tag_path
in: path
required: true
type: string
default: "/"
However, https://generator.swagger.io encodes slashes in the path, so it doesn't work. So is there a way to describe my API in Swagger?
Upvotes: 22
Views: 18706
Reputation: 321
If you are using a framework like Connexion, chances are it does support a wildcard path parameter (even though it is not in the OpenAPI spec).
Here is an example for Connexion.
paths:
/pages/{path}:
get:
# (...)
parameters:
- name: "path"
in: path
description: "Remainder of path, including slashes."
schema:
type: string
format: path
The difference is the format: path
added.
Upvotes: 1
Reputation: 10757
This is not supported as of OpenAPI 3.1, and I have to resort to a workaround.
If I have a path /tags{tag_path}
and I enter something like this as tag_path
: /foo/bar
, then the actual query request URL will be: /tags%2Ffoo%2Fbar
. So, I just added support for that on my backend: the endpoint handler for /tags*
urldecodes the path (which is %2Ffoo%2Fbar
), and it becomes /foo/bar
again.
Yes, a hack, but it works, and it's better than nothing. In my case, tag names can't contain the /
character, so there's no conflict. Your mileage may vary, of course.
Upvotes: 13