与ngResource相比,使用Restangular有什么优势?


133

ngResource用...实现事情似乎已经很简单了...

ngResource 相比,使用Restangular有哪些优点/缺点?

1.1.3 $resource将返回承诺,并且可以使用最新的PR commit来实现。将来会提供支持$resource来支持Restangular所做的其他动词吗?如果发生这种情况,Restangular似乎将消失并变得不耐烦。


41
为什么关了?这是一个有效的问题,应该有明确的答案。尤其是在游戏初期,当您尝试确定用于服务呼叫的内容时。三个月后,这个家伙放弃了对Restangular的支持,结果发生了什么,因为Google的ngResource掌握了它缺少的所有功能。然后,如果$http对angularjs进行了重大发行更改---您将无法升级,因为Restangualr的服务呼叫将期待“其他”,并且您最终将破坏该“决定使用的框架”。
Dan Kanze 2013年


@DanKanze:中级SO用户对这样的问题非常满意。确实令人沮丧,因为您绝对不会问“哪个更好”……我唯一的建议是,在将来谨慎地表达问题,以免诱使“主观的盖世太保”全力以赴。
rinogo

Answers:


232

我是Restangular的创建者。

我已经在自述文件中创建了一个与$ resource不同的部分。您可以在这里查看它们https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

总之,总而言之,除了其他功能和基于promise的方法外,想法是Restangular还可以处理您的所有URL,因此您不必了解它们。

假设您对汽车有这样的东西:/ users / 123 / cars / 456

在$ resource中,您必须手动构造该URL,并且还必须为此手动构造$ resource对象。Restangular通过“记住” URL来帮助您。

所以如果你在某个地方

Restangular.one("users", 123).get().then(function(user) {
  $scope.user = user;
});

// Some other code

//Automatically does the request to /users/123/cars as it remembers in which object you're asking it.
$scope.user.getList('cars')

希望这可以帮助!


45
+1即可参加。谁能更好地解释一下自己建造的家伙,哈哈!
Dan Kanze 2013年

27
相对而言,您如何 .one('users', 123)或多或少地“知道”您的URL '/users/123'?(只是扮演Devil的拥护者)似乎'/foo/123/bar/123'比容易得多.one('foo', 123).one('bar', 123)
Ben Lesh

5
这个想法是,在某个时候,您只知道实体名称和ID。所以你首先要撒谎var user = Restangular.one('users', 123).getList()。稍后在代码或其他控制器中执行user.getList('buildings')。在这里,您只知道下一个建筑物类型,但它会查询/users/123/buildings/,因此您不必一直知道完整的URL
mgonto 2013年

3
不错,但是一面。考虑到最近的增强,在此主题中建议了Restangular可能的“不相关” $resource-我并不暗示它已经被提到,无论如何都将不相关。我们应注意的任何事实劣势或陷阱?
youi 2013年

3
自述文件中包含的最新版本的ngresource不是很多吗?(即/使用诺言,通过transformResponse装饰响应对象)
surtyaar 2014年

8

我发现Restangular的RequestInterceptor非常方便,可以在发出请求之前从对象中删除一些字段。我目前正在使用的大多数REST Web服务都不希望在PUT请求中的对象数据中出现id,例如,仅在url中。通常,他们不希望PUT无法更新额外的数据字段(例如id或通过设置标题等生成的段)。我发现使用Restangular可以很容易地做到这一点,但是我还没有弄清楚如何使用$ resource进行干净的处理,但是我确信它可能会以某种方式出现。

显然,也可以将Web服务更改为忽略那些额外的字段,但这并不总是可能的。


3

ngResource在最新的稳定版本(当前为1.0.6)中不返回承诺。此外,看起来Restangular比ngResource暴露了更多的动词(它暴露了PUT,OPTIONS,PATCH等)。

如果您不需要其他动词,并且位于AngularJS的不稳定分支(包括对ngResource的承诺)上,那么我认为没有主要理由在ngResource上使用Restangular。

使用任何您认为合适的东西。


2
1.1.3 $resource将返回承诺,并且可以使用最新的PR承诺隐含。stackoverflow.com/questions/16429832/…是否会提供将来的支持$resource以支持其他动词?如果发生这种情况,Restangular似乎将消失并变得不耐烦。
Dan Kanze 2013年

@DanKanze我不确定将来是否会支持其他动词。对于大多数用例来说,不需要额外的动词,因此我不希望很快就能构建该动词,但这并不意味着它不会发生。
rtcherry

2
@DanKanze-我怀疑它会变得无关紧要。Restangular为嵌套资源提供了更好的支持,这对某些开发人员是必需的。Ng资源不能很好地支持。此外,ng-resource也未遵循RESTful约定,这是我在博客中谈到的。
Oddman

@Oddman关于嵌套资源配合的要点,对Rails后端特别有用。
ardochhigh 2014年

1

作为上述答案的后续活动,对于像我这样对这些想法感兴趣的读者:

“如果发生这种情况,Restangular似乎将消失并变得不耐烦。”

“这家伙在三个月后放弃了对Restangular的支持会发生什么,因为Google的ngResource掌握了它所缺少的所有功能。”

  • [ 2年前问 ]

在我看来,开源库生存的唯一保证是围绕它建立的社区。最好的例子是mariaDBWebScaleSQL,它们两者都源于强大的关系数据库管理系统MySQL的发展。

在撰写本文时,Restangular having 6699 stars and 727 forks现在正朝着Restangular 2.0前进,后者旨在支持angularJs 2.0和ES6。


0

对于您想要在最小的支持下永远运行的快速简单网站,无论我在从事自己喜欢的项目并且在享受并尝试使用所有出色技术的情况下,我都会使用内置的有角度的http HttpClient我将使用Ngx-Restangular

另外,您应该知道ngx-restangular仅与名称提示一起使用RESTful服务。因此,对于提供SOAP的服务,您将无法使用Ngx-Restangular

https://ngx-restangular.com/

话虽这么说,但我经常会使用ngx-restangular,因为我总是会尝试从事自己认为很不错的项目,并尝试实现自己认为最好的项目。

祝你好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.