URI 本身没有什么特别, 唯独两个 URI 拼接的时候会产生一点困扰:

当host和path直接相加时, 只是拼接, 自动处理 /:

p URI('http://baidu.com') + URI('/v1/users')
#<URI::HTTP http://baidu.com/v1/users>
p URI('http://baidu.com') + URI('v1/users')
#<URI::HTTP http://baidu.com/v1/users>
p URI('http://baidu.com/') + URI('/v1/users')
#<URI::HTTP http://baidu.com/v1/users>
p URI('http://baidu.com/') + URI('v1/users')
#<URI::HTTP http://baidu.com/v1/users>

当host也携带部分path信息时, 复杂情况:

当host的部分path没有以/结尾, 则忽略它:

p URI('http://baidu.com/api') + URI('v1/users')
#<URI::HTTP http://baidu.com/v1/users>

p URI('http://baidu.com/admin/api') + URI('v1/users')
#<URI::HTTP http://baidu.com/admin/v1/users>

当path以/开头, 将忽略host部分的所有path:

p URI('http://baidu.com/api') + URI('/v1/users')
#<URI::HTTP http://baidu.com/v1/users>
p URI('http://baidu.com/api/') + URI('/v1/users')
#<URI::HTTP http://baidu.com/v1/users>

如果要在host里配置部分path, 则要写成如下的样子:

host 结尾带 /, path 开头不带 /

p URI('http://baidu.com/api/') + URI('v1/users')
#<URI::HTTP http://baidu.com/api/v1/users>