tamasfe / aide

An API documentation library
Apache License 2.0
417 stars 70 forks source link

fix: remove trailing / from nested paths #150

Open 0xf09f95b4 opened 1 month ago

0xf09f95b4 commented 1 month ago

Hi!

This PR attempts to fix https://github.com/tamasfe/aide/issues/134.

Currently, API documentation for nested routes is built by combining the path of the base route (with trailing slashes removed) with the path of the nested route.

If a path of a nested route is only "/", as seen in the todo list example, this leads to that path now containing a trailing slash:

ApiRouter::new().nest_api_service("/todo", ApiRouter::new().api_route("/",post_with(handler, docs)))

Generates this path:

"paths": {
    "/todo/": {
        ...
    },
    ...
}

This PR fixes this issue by removing any trailing slahes after the nested path is built in the nest and nest_api_service functions.

One edge case needs to be handled. In a construct like the following:

ApiRouter::new().nest_api_service("/", ApiRouter::new().api_route("/",post_with(handler, docs)))

the path of this route would be empty. A route of just / is therefore returned unmodified.

I've also added a basic unit test.

This seems to be a simple fix, I hope I didn't miss any other cases here.