5

假设 DogManagementPro 程序是用客户端/服务器架构编写的应用程序,购买它的客户应该在自己的 PC 上运行服务器,并在本地或远程访问它。

假设我想在 DogManagementPro REST API 中支持“列出所有狗”操作。

所以一个 GEThttp://localhost/DogManagerPro/api/dogs应该现在获取以下响应:

<dogs>
  <dog>http://localhost/DogManagerPro/api/dogs/ralf</dog>
  <dog>http://localhost/DogManagerPro/api/dogs/sparky</dog>
</dogs>

我想在我的本地 LAN 上远程访问它,[我机器的本地 IP 是 192.168.0.33] 应该用 GEThttp://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>

什么是最好的方法?

4

2 回答 2

6

我个人一直使用非绝对网址。它还解决了一些其他问题,例如反向/缓存代理。

但是对于客户端来说有点复杂,如果他们想按原样存储文档,这可能意味着他们现在还需要存储基本 url,或者扩展内部 url。

如果您确实选择使用完整 url 路由,我不建议使用 HTTP_HOST,而是设置多个虚拟主机和环境变量并使用它。如果您以后需要在源服务器前使用代理,这可以解决问题。

于 2012-07-12T19:26:06.723 回答
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 应该是客户端能够解析的内容。

于 2012-07-12T16:06:03.430 回答