我有一些想要调用的网络服务。$resource或$http,我应该使用哪个?
美元的资源:https://docs.angularjs.org/api/ngResource/service/美元的资源
美元美元http: https://docs.angularjs.org/api/ng/service/ http
在我读了上面的两个API页面后,我迷失了。
你能用通俗易懂的英语给我解释一下它们的区别,以及在什么情况下使用它们?我如何构造这些调用,并将结果正确地读入js对象?
我有一些想要调用的网络服务。$resource或$http,我应该使用哪个?
美元的资源:https://docs.angularjs.org/api/ngResource/service/美元的资源
美元美元http: https://docs.angularjs.org/api/ng/service/ http
在我读了上面的两个API页面后,我迷失了。
你能用通俗易懂的英语给我解释一下它们的区别,以及在什么情况下使用它们?我如何构造这些调用,并将结果正确地读入js对象?
当前回答
$http是一个通用的AJAX调用,这意味着它可以包含RESTful api和非RESTful api。
$resource是专门用于该RESTful部分的。
Restful Api是近年来流行起来的,因为url是更好的组织,而不是由程序员随意创建的url。
如果我使用RESTful API来构造url,它将类似于/ API /cars/:carId。
获取数据的方式
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方法。
获取数据的方式
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。
其他回答
$http是一个通用的AJAX调用,这意味着它可以包含RESTful api和非RESTful api。
$resource是专门用于该RESTful部分的。
Restful Api是近年来流行起来的,因为url是更好的组织,而不是由程序员随意创建的url。
如果我使用RESTful API来构造url,它将类似于/ API /cars/:carId。
获取数据的方式
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方法。
获取数据的方式
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。
我注意到一件事,当使用$resource超过$http是 如果你在。net中使用Web API
$resource被绑定到一个执行单一目的的控制器中。
美元资源(/ user /: userId,{标识:“@ id”});
[HttpGet]
public bool Get(int id)
{
return "value"
}
public void Post([FromBody]string value)
{
}
public void Put(int id, [FromBody]string value)
{
}
public void Delete(int id)
{
}
而$http可以是任何东西。只需指定url。
http美元。“真火”
[HttpGet]
public bool Authenticate(string email, string password)
{
return _authenticationService.LogIn(email, password, false);
}
这只是我的个人观点。
资源服务只是用于使用REST apsi的有用服务。 当你使用它时,你不需要编写CRUD方法(创建,读取,更新和删除)
在我看来,资源服务只是一条捷径, 您可以使用HTTP服务做任何事情。
我认为重要的是要强调$resource期望对象或数组作为服务器的响应,而不是原始字符串。所以如果你有一个原始字符串(或任何除了对象和数组)作为响应,你必须使用$http
我觉得其他答案虽然正确,但并不能很好地解释问题的根源:REST是HTTP的一个子集。这意味着所有可以通过REST完成的事情都可以通过HTTP完成,但并不是所有可以通过HTTP完成的事情都可以通过REST完成。这就是$resource在内部使用$http的原因。
那么,什么时候互相利用呢?
如果你所需要的只是REST,也就是说,你正在尝试访问一个REST式的web服务,$resource将使与该web服务的交互变得超级简单。
相反,如果你试图访问任何不是RESTful webservice的东西,你将不得不使用$http。请记住,你也可以通过$http访问一个RESTful webservice,只是它比$resource要麻烦得多。这是大多数人在AngularJS之外使用jQuery的方式。ajax(相当于Angular的$http)。