AngularJS $ http和$资源
我刚接触AngularJS,所以请原谅我的无知。
我有一些我想要调用的Web服务。 $resource
或$http
,我应该使用哪一个?
$resource
:https://docs.angularjs.org/api/ngResource/service/$resource
$http
:https://docs.angularjs.org/api/ng/service/$http
在阅读上述两个API页面之后,我迷失了方向。
你能用简单的英语向我解释什么是不同的,我应该在什么情况下使用它们? 我如何构造这些调用并将结果正确读入js对象?
$http
是用于通用AJAX的。 在大多数情况下,这是你将要使用的。 使用$http
您将手动进行GET
, POST
, DELETE
类型的调用并处理它们自己返回的对象。
$resource
包装$http
以用于RESTful Web API场景。
非常普遍地说:一个RESTful Web服务将是一个端点的数据类型的服务,它根据HTTP方法(如GET
, POST
, PUT
, DELETE
等)执行与该数据类型不同的事情。因此,使用$resource
,您可以调用一个GET
来获取作为JavaScript对象的资源,然后修改它并用POST
发回它,甚至用DELETE
删除它。
......如果这是有道理的。
我认为其他答案虽然正确,但并不能完全解释问题的根源: REST
是HTTP
一个子集。 这意味着所有可以通过REST
完成的事情都可以通过HTTP
完成,但并非所有可以通过HTTP
完成的事情都可以通过REST
完成。 这就是$resource
内部使用$http
原因。
那么,什么时候用对方?
如果你所需要的只是REST
,也就是说你试图访问一个RESTful
web服务,那么$resource
将使它与该web服务交互变得非常容易。
相反,如果您尝试访问任何不是RESTful
Web服务的任何内容,那么您将不得不使用$http
。 请记住,您还可以通过$http
访问RESTful
web服务,但这比使用$resource
更麻烦。 这是大多数人通过使用jQuery.ajax
(相当于Angular的$http
)在AngularJS之外完成的方式。
$http
进行通用AJAX调用,其中通用意味着它可以包含RESTful API和非RESTful API。
而$resource
专门用于该RESTful部分。
Restful Api最近几年流行起来,因为url更好地组织起来,而不是由程序员组成的随机url。
如果我使用RESTful API来构建url,那么它就像/api/cars/:carId
。
$resource
获取数据的方式
angular.module('myApp', ['ngResource'])
// Service
.factory('FooService', ['$resource', function($resource) {
return $resource('/api/cars/:carId')
}]);
// Controller
.controller('MainController', ['FooService', function(FooService){
var self = this;
self.cars = FooService.query();
self.myCar = FooService.get('123');
}]);
这会给你一个资源对象,这是伴随着自动get
, save
, query
, remove
和delete
方法。
$http
方式获取数据
angular.module('myApp', [])
// Service
.factory('FooService', ['$http', function($http){
return {
query: function(){
return $http.get('/api/cars');
},
get: function(){
return $http.get('/api/cars/123');
}
// etc...
}
了解我们需要如何定义RESTFul API上的每个常用操作。 另一个区别是$http
返回promise
而$resource
返回一个对象。 还有第三方插件可以帮助Angular处理RESTFul API,如restangular
如果API类似于/api/getcarsinfo
。 所有留给我们的是使用$http
。