add an "append_path" function to url #934
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This
append_path
function is an alternative toUrl::join
which addresses issues discussed in #333, mainly thatUrl::join
is sensitive to trailing slashes is in theUrl
, and if the trailing slash is missing, may remove segments from the base url and replace them with segments from the joinedUrl
.There are good reasons for
Url::join
to behave that way, because that is was is specified in theUrl
standard. (mentioned here: #333 (comment))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.