Ruby URI
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>