我有一些我想打电话的网络服务 . $resource
或 $http
,我应该使用哪一个?
$resource
:https://docs.angularjs.org/api/ngResource/service/$resource
$http
:https://docs.angularjs.org/api/ng/service/$http
在我阅读上面两个API页面后,我迷失了 .
能否请您用简单的英语向我解释有什么区别,我应该在什么情况下使用它们?如何构造这些调用并将结果正确读入js对象?
9 回答
我觉得其他答案虽然正确,但并不能解释问题的根源:
REST
是HTTP
的一个子集 . 这意味着可以通过REST
完成的所有操作都可以通过HTTP
完成,但不能通过HTTP
完成的所有工作都可以通过REST
来完成 . 这就是为什么$resource
在内部使用$http
.So, when to use each other?
如果您只需要
REST
,也就是说,您正在尝试访问RESTful
webservice,那么$resource
将使得与该Web服务进行交互变得非常容易 .相反,如果您正在尝试访问不是
RESTful
webservice的ANYTHING,那么您将不得不使用$http
. 请记住,您也可以通过$http
访问RESTful
网络服务,这比使用$resource
要麻烦得多 . 这是大多数人在AngularJS之外进行的方式,使用jQuery.ajax
(相当于Angular的$http
) .$http
用于通用AJAX . 在大多数情况下,这就是你将要使用的 . 使用$http
,您将手动进行GET
,POST
,DELETE
类型调用并处理它们自己返回的对象 .$resource
包装$http
以用于RESTful Web API方案 .非常一般地讲:RESTful Web服务将是一个服务,其中一个 endpoints 用于基于HTTP方法(例如
GET
,POST
,PUT
,DELETE
等)对该数据类型执行不同操作的数据类型 . 因此,使用$resource
,您可以调用aGET
将资源作为JavaScript对象获取,然后更改它并使用POST
将其发回,或者甚至用DELETE
删除它 .......如果这是有道理的 .
$http
进行通用AJAX调用,其中 general 表示它可以包含RESTful api和非RESTful api .和
$resource
专门用于RESTful部分 .Restful Api 近年来流行,因为网址更好,而不是由程序员组成的随机网址 .
如果我使用RESTful API来构建url,那就像
/api/cars/:carId
.$resource
获取数据的方式这将给你一个resource object,它自动伴随
get
,save
,query
,remove
,delete
方法 .$http
获取数据的方式了解我们如何在RESTFul API上定义每个常见操作 . 另外一个区别是
$http
返回promise
而$resource
返回一个对象 . 还有第三方插件可以帮助Angular处理RESTFul API,如restangular如果API类似于
/api/getcarsinfo
. 我们剩下的就是使用$http
.我认为答案更多地取决于您编写代码时的身份 . Use $http if you're new to Angular, until you know why you need $resource. 除非您具体了解
$http
如何阻止您,并且您了解在代码中使用$resource
的含义,请坚持使用$http
.这是我的经验:我开始了我的第一个Angular项目,我需要向RESTful接口发出HTTP请求,所以我做了你现在正在做的同样的研究 . 根据我在这样的问题中所读到的讨论,我选择了
$resource
. This was a mistake I wish I could undo. 原因如下:$http
示例丰富,有用,通常只是您需要的 . 清楚的$resource
例子是稀缺的,并且(根据我的经验)很少你需要的一切 . 对于Angular新手,你赢得了令人费解的文档,并且生气地说你找不到有用的帮助你的例子.2591230_例子来帮助你 .$http
可能是一对一的思维导图,你需要学习一个新的概念,以了解你得到的东西$http
.$resource
带来了很多细微差别,你还没有心理 Map .哎呀,我说你不必学习新概念吗?作为一名Angular新手,你必须了解承诺 .
$http
返回一个承诺并且.then
能够,所以它适合你正在学习的关于Angular和promises的新东西 .$resource
,它不直接返回一个承诺,使你对Angular基本原理的初步把握变得复杂化 .$resource
功能强大,因为它会压缩RESTful CRUD调用的代码以及输入和输出的转换 . 那个's great if you'厌倦了反复编写代码来自己处理$http
的结果 . 对于其他任何人来说,$resource
添加了一个神秘的语法和参数传递层,令人困惑 .我希望我在3个月前认识我,并且我会强调告诉自己:“坚持使用
$http
孩子 . 这很好 . ”我认为重要的是要强调$ resource期望对象或数组作为服务器的响应,而不是原始字符串 . 因此,如果您将原始字符串(或除对象和数组之外的任何内容)作为响应,则必须使用$ http
当谈到
$http
或$resource
之间选择从技术上讲,没有正确或错误的答案本质上都会做同样的事情 .$resource
的目的是允许您传入模板字符串(包含占位符的字符串)以及参数值 .$resource
将使用作为对象传递的参数值替换模板字符串中的占位符 . 这在与RESTFul数据源交互时非常有用,因为它们使用类似的原则来定义URL .$http
的作用是执行异步HTTP请求 .资源服务只是使用REST APSI的有用服务 . 当你使用它时,你不会编写你的CRUD方法(创建,读取,更新和删除)
据我所知,资源服务只是一个捷径,你可以用http服务做任何事情 .
如果你在.net中使用Web API,我注意到使用$ resource超过$ http的一件事
$ resource绑定到一个执行单一目的的控制器 .
$ resource('/ user /:userId',{userId:'@ id'});
虽然$ http可以是任何东西 . 只需指定网址即可 .
$ http.get - “api / authenticate”
这只是我的意见 .
$ resource服务目前不支持promises,因此与$ http服务的接口明显不同 .