静态资源 URL 作为 API 响应中的绝对路径或相对路径

Muk*_*kun 11 api json assets relative-path absolute-path

我有一个 Spring boot API 服务,其他网站和移动应用程序调用此 API 来获取数据和图像。图像存储在文件系统中,文件路径存储在数据库中。我正在寻找在 API 响应中返回图像 URL 的最佳实践。

示例数据库记录

 +-----+-------+-----------------+
| Id  | Name  | profile_img_url |
+-----+-------+-----------------+
|  1  | John  | /image/john.jpg |
|  2  | Jane  | /image/jane.jpg |
|  3  | Doe   | /image/doe.jpg  |
+-----+-------+-----------------+
Run Code Online (Sandbox Code Playgroud)

例如我有一个会员API。

https://example.com/get/member/id
Run Code Online (Sandbox Code Playgroud)

该API将返回JSON,其中包含会员图像URL

我应该返回 profile_img_url 作为绝对 URL 还是相对 URL

这是我的想法

带相对 URL 的响应

{
"name" : "John",
"profile_img_url": "/image/john.jpg",
}
Run Code Online (Sandbox Code Playgroud)
  • 在API代码中,无需担心基本URL(域名),调用网站或移动应用程序需要处理基本URL。
  • 在API中,我只是读取并发送配置文件img url,不需要花时间连接域名和文件名来创建绝对URL,因此响应应该很快。

使用绝对 URL 进行响应

{
"name" : "John",
"profile_img_url": "https://example.com/image/john.jpg",
}
Run Code Online (Sandbox Code Playgroud)
  • 在我的 API 中,我需要查找主机名并连接每个请求的文件路径,从而导致 API 服务器上出现不必要的负载。

  • 如果我返回成员列表,我需要从数据库获取并循环列表并创建绝对 URL。这可能会使 API 响应变慢。

  • 我还需要确保,代理或负载平衡后面的 API 服务器可以检测域名/主机名并将其用于连接

  • 调用网站或移动应用程序,无需担心基本 URL/域名

  • 我不必教育移动团队或客户端应用程序开发团队如何获取个人资料图片

  • 将来,如果我决定从不同域或子域服务器图像,我不必通知其他团队

如果它是一个简单的网站(前端+后端在一起),我认为相对 URL 对于网站来说就足够了,除非您正在运行需要非常高的性能优化的高流量网站。

就我而言,我只运行后端 API。前端将是我们公司或我们合作伙伴的其他应用程序/移动应用程序

你也可以阅读这个页面,虽然它与我的问题没有直接关系,但它讨论了与解耦系统中的 URL 相关的问题

那么 API 响应中的最佳实践是绝对 URL 还是相对 URL?