假设DogManagementPro程序是一个用客户端/服务器架构编写的应用程序,购买它的客户应该在自己的PC上运行服务器,并在本地或远程访问它。
假设我想支持DogManagementPro REST API中的“列出所有狗”操作。
所以GET http://localhost/DogManagerPro/api/dogs
现在应该获取以下响应:
<dogs>
<dog>http://localhost/DogManagerPro/api/dogs/ralf</dog>
<dog>http://localhost/DogManagerPro/api/dogs/sparky</dog>
</dogs>
我想在本地局域网上远程访问它,[我机器的本地IP是192.168.0.33]
什么应该获得http://192.168.0.33:1234/DogManagerPro/api/dogs
获取?
应该是:
<dogs>
<dog>http://localhost/DogManagerPro/api/dogs/ralf</dog>
<dog>http://localhost/DogManagerPro/api/dogs/sparky</dog>
</dogs>
或者也许:
<dogs>
<dog>http://192.168.0.33/DogManagerPro/api/dogs/ralf</dog>
<dog>http://192.168.0.33/DogManagerPro/api/dogs/sparky</dog>
</dogs>
有些人认为我应该通过返回一个像这样的路径元素来完全解决问题:
<dogs>
<dog>/DogManagerPro/api/dogs/ralf</dog>
<dog>/DogManagerPro/api/dogs/sparky</dog>
</dogs>
最好的方法是什么?
答案 0 :(得分:3)
我个人总是使用非绝对网址。它还解决了一些其他问题,例如反向/缓存代理。
虽然客户端有点复杂,如果他们想按原样存储文档,可能意味着他们现在还需要存储基本网址,或者扩展内部网址。
如果您选择使用完整网址,我建议不要使用HTTP_HOST,而是设置多个虚拟主机和环境变量并使用它。 如果您以后需要在源服务器前面使用代理,这就解决了这个问题。
答案 1 :(得分:0)
我会说基于客户端发送的Host
标头创建的绝对URL
<dogs>
<dog>http://192.168.0.33:1234/DogManagerPro/api/dogs/ralf</dog>
<dog>http://192.168.0.33:1234/DogManagerPro/api/dogs/sparky</dog>
</dogs>
返回的URI应该是客户端能够解析的内容。