在 REST API 中返回绝对 URI 和相对 URI

Avi*_*hek 5 api rest http hyperlink

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

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

所以http://localhost/DogManagerPro/api/dogs现在GET应该获取以下响应:

<dogs>
  <dog>http://localhost/DogManagerPro/api/dogs/ralf</dog>
  <dog>http://localhost/DogManagerPro/api/dogs/sparky</dog>
</dogs>
Run Code Online (Sandbox Code Playgroud)

我想在本地 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>
Run Code Online (Sandbox Code Playgroud)

也许:

<dogs>
  <dog>http://192.168.0.33/DogManagerPro/api/dogs/ralf</dog>
  <dog>http://192.168.0.33/DogManagerPro/api/dogs/sparky</dog>
</dogs>
Run Code Online (Sandbox Code Playgroud)

?

有些人认为我应该通过只返回一个路径元素来完全解决这个问题:

<dogs>
  <dog>/DogManagerPro/api/dogs/ralf</dog>
  <dog>/DogManagerPro/api/dogs/sparky</dog>
</dogs>
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?

Eve*_*ert 5

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

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

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