servo / rust-url

URL parser for Rust
https://docs.rs/url/
Apache License 2.0
1.27k stars 317 forks source link

add an "append_path" function to url #934

Open cbeck88 opened 1 month ago

cbeck88 commented 1 month ago

This append_path function is an alternative to Url::join which addresses issues discussed in #333, mainly that Url::join is sensitive to trailing slashes is in the Url, and if the trailing slash is missing, may remove segments from the base url and replace them with segments from the joined Url.

There are good reasons for Url::join to behave that way, because that is was is specified in the Url standard. (mentioned here: https://github.com/servo/rust-url/issues/333#issuecomment-1410749893)

However it's still inconvenient because it often leads to situations where, a service takes some base-url for some API as a config parameter, uses Url::join to append various routes to it and make requests, and if a trailing / is omitted in the config, you don't figure it out until deploying and looking at logs and seeing nonsense requests failing. In many situations in web development these trailing / are not significant so this is easy to forget and can become just an annoying papercut.

One suggestion in #333 was to add an alternative utility function that isn't sensitive to the trailing /'s in this way. This commit adds such a utility function with tests.

I've been copy-pasting this around in several projects, I figured I would PR it back and see if there was any interest since it was discussed in the github issue.