REST API 渴望还是懒惰?

ACV*_*ACV 1 rest json

什么是更好的?当 REST 端点查询实体时 - 一次返回所有实体和子实体,然后使用一些客户端代码(我们称之为“急切”模式)将它们显示在 UI 上,或者最好返回主要实体而不是它的子实体,返回这些子实体的 id,然后让 UI 照顾并为每个 id 发出正确的 REST 请求?(我们称之为lazy模式)。

所以要返回这个 JSON(这实际上不是一个有效的 JSON,只是留下 region: 前缀让你了解它是什么实体):

country: {
 name: 'C1',
 regions: [
   region: {
      id: 'I1'
      name: 'R1',
      area: 'A1'
   },

   region: {
      id: 'I2'
      name: 'R2',
      area: 'A2'
   },
]

}
Run Code Online (Sandbox Code Playgroud)

或这个 :

country: {
 name: 'C1',
 regions: ['I1','I2']
}
Run Code Online (Sandbox Code Playgroud)

进而:

GET /rest/region/I1
GET /rest/region/I2
Run Code Online (Sandbox Code Playgroud)

哪一个更好?什么时候使用哪个?谢谢

ton*_*oft 5

通常应该根据需要做出这样的决定,而不是试图预先设计一切。想想谁在使用你的服务(你提到它将从 UI 中使用)以及需求是什么。

UI 是否总是需要加载所有数据?如果是这样,那么延迟加载根本没有意义,只会增加客户端代码的复杂性。如果您遇到性能问题,或者如果您添加另一个不需要所有数据的 UI 页面,您始终可以稍后在另一个 URL 上实施“延迟加载”。

如果默认情况下 UI 仅显示“顶级数据”并且更详细的信息仅根据用户的某些输入有条件地显示,那么采用“懒惰模式”是有意义的,因为所有数据都是不是一直都需要。

本质上,编写 API之前先编写UI 代码。这将告诉您哪种实现更有意义。