gpt4 book ai didi

javascript - REST : Return complex nested data vs. 多次调用

转载 作者:IT老高 更新时间:2023-10-28 23:19:12 26 4
gpt4 key购买 nike

我有一个由 NodeJS 提供给 AngularJS 前端的 REST api。

我与用户一起工作:

GET  /api/users  #Returns all users
POST /api/users #Create new user

GET /api/users/:id #Return a user
PUT /api/users/:id #Edit a user
DELTE /api/users/:id #Delete a user

这是一个用户:

{
login : "admin"
email : "admin@admin.com"
pass : "hashedpassword"
...
}

我的用户可以属于

GET   /api/users/:id/groups   #Return the groups of a user

他们也可以有 constraints 或者可以从他们的组中继承 constraints

GET   /api/users/:id/constraints   #Return the constraints of a user
GET /api/groups/:id/constraints #Return the constraints of a group

问题:

我正在制作一个管理页面,显示所有用户、他们的组、他们的约束。

我应该:

  1. 在 javascript (Angular) 前端的 for 循环中发出许多请求

类似:

$http.get(/api/users).then(function(result) {
result.data.forEach(function(user) {
$http.get('/api/users/'+user.data.id+'/groups).then(function(groups) {
groups.forEach(function(group) {
$http.get('/api/groups/'+group.data.id+'/constraints)
})
})
})
})
  1. 创建路径/api/users/withConstraintsAndGroups

这将返回一个包含所有用户及其组和约束的大列表。


我发现解决方案 1 非常好、可维护、简单且通用,但我担心性能很差

我发现解决方案 2 丑陋、难以维护、难以编码、不通用但性能良好

我应该选择哪种解决方案?

最佳答案

你的问题基本上可以归结为:

Which is better, one big HTTP request, or many small ones?

要记住的一件事是您的客户端和服务器之间的预期网络延迟(ping 时间)。在具有良好带宽的高延迟情况下,许多小请求的性能将明显比一个大请求。

此外,有一个大请求可以提高 compressing the response 的效率。 ,并避免 extra HTTP requests and response headers 的开销.

说了这么多,我仍然建议你选项1开始,仅仅因为你说你很容易编码。然后看看它是否符合你的要求。如果没有,那么尝试选项 2

最后一点,我通常更喜欢一个大请求而不是许多小请求,因为这样可以很容易地将每个请求定义为完全应用或回滚的事务。这样,我的客户就不会遇到这样一种状态:他们的许多小请求中的一些成功,而另一些失败,并且他们现在拥有我的 API 提供的数据的不一致本地副本。

关于javascript - REST : Return complex nested data vs. 多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34655884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com