我有一个由NodeJS服务的Ang api到AngularJS前端.
我与用户合作:
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
它们也可以有约束或可以从组中继承约束
GET /api/users/:id/constraints #Return the constraints of a user GET /api/groups/:id/constraints #Return the constraints of a group
问题 :
我正在创建一个管理页面,显示所有用户,他们的组,他们的约束.
我是不是该 :
>在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) }) }) }) })
>创建路径/ api / users / withConstraintsAndGroups
这将返回包含其组和约束的所有用户的大列表.
我发现解决方案1非常好,可维护,简单,通用,但我担心性能非常糟糕
我应该选择哪种解决方案?
解决方法
你的问题基本归结为:
Which is better,one big HTTP request,or many small ones?
要记住的一件事是客户端和服务器之间的预期网络延迟(ping时间).在具有良好带宽的高延迟情况下,许多小请求将比一个大请求表现得差得多.
此外,有一个大的请求可以为compressing the response提供更好的效率,并避免extra HTTP requests and response headers的开销.
说了这么多,我仍然建议你从选项1开始,完全是因为你声明你很容易编码.然后看看它是否符合您的要求.如果没有,那么尝试选项2.
作为最后一点,我通常更喜欢对很多小请求提出一个大请求,因为这样可以很容易地将每个请求定义为完全应用或回滚的事务.这样我的客户端就不会遇到一些状态,其中一些小的请求成功而另一些则失败,并且他们现在的API提供的数据本地副本不一致.