Open Zstorm999 opened 1 month ago
Hello !
I have an api specification of the form :
#[OpenApi(prefix_path="/hello/:name")] impl Api { #[oai(path = "/:surname", method = "get")] async fn get(...) -> ... { ... } }
Note that I have path parameters in both prefix_path and path.
prefix_path
path
I expect the parameter name to be included in the api spec, so the generated spec should be something like
name
"paths": { "/hello/{name}/{surname}": { "get": { "parameters": [ { "name": "name", ... }, { "name": "surname", ... } ], }}}
Instead, what is being generated is
"paths": { "/hello/:name/{surname}": { "get": { "parameters": [ { "name": "name", ... }, { "name": "surname", ... } ], }}}
This causes problems with api viewers (tested with redoc and swagger-ui), as they do not generate the correct request.
curl -X GET http://localhost/api/hello/myname/mysurname
curl -X GET http://localhost/api/hello/:name/mysurname
For the record, I tested the following api construction in Rust:
#[OpenApi(prefix_path="/hello/{name}")] impl Api { #[oai(path = "/:surname", method = "get")] async fn get(...) -> ... { ... } }
This generates the correct specification, but poem is then unable to correctly use the route and I get a 404 error when trying to access it.
So I found the problem at this line.
When the full path is generated below, no conversion is applied to the prefix_path, only to the oai_path. This means the path is half-standardized in the final output.
Hello !
I have an api specification of the form :
Note that I have path parameters in both
prefix_path
andpath
.Expected Behavior
I expect the parameter
name
to be included in the api spec, so the generated spec should be something likeActual Behavior
Instead, what is being generated is
This causes problems with api viewers (tested with redoc and swagger-ui), as they do not generate the correct request.
Expected:
Actual
Additional testing
For the record, I tested the following api construction in Rust:
This generates the correct specification, but poem is then unable to correctly use the route and I get a 404 error when trying to access it.
Specifications
Full code example
```rust use poem::{listener::TcpListener, Route, Server}; use poem_openapi::{param::{Path, Query}, payload::PlainText, OpenApi, OpenApiService}; struct Api; #[OpenApi(prefix_path="/hello/:name")] impl Api { #[oai(path = "/:surname", method = "get")] async fn index(&self, name: Path