我有一些想要调用的网络服务。$resource或$http,我应该使用哪个?

美元的资源:https://docs.angularjs.org/api/ngResource/service/美元的资源

美元美元http: https://docs.angularjs.org/api/ng/service/ http

在我读了上面的两个API页面后,我迷失了。

你能用通俗易懂的英语给我解释一下它们的区别,以及在什么情况下使用它们?我如何构造这些调用,并将结果正确地读入js对象?


当前回答

我觉得其他答案虽然正确,但并不能很好地解释问题的根源: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)。

其他回答

$http用于通用AJAX。在大多数情况下,这是您将使用的。使用$http,您将手动进行GET, POST, DELETE类型调用,并自行处理它们返回的对象。

$resource包装了$http,用于RESTful web API场景。


一般来说:一个基于rest的web服务将是一个数据类型的服务端点,该服务基于HTTP方法(如GET、POST、PUT、DELETE等)对该数据类型执行不同的操作。因此,对于$资源,您可以调用GET以JavaScript对象的形式获取资源,然后更改它并使用POST将其发送回来,甚至使用delete删除它。

... 如果有道理的话。

当涉及到$http或$resource之间的选择时,从技术上讲,没有正确或错误的答案,本质上两者都会做同样的事情。

$resource的目的是允许您传入一个模板字符串(包含占位符的字符串)以及参数值。$resource将模板字符串中的占位符替换为作为对象传递的参数值。这在与RESTFul数据源交互时非常有用,因为它们使用类似的原则来定义url。

$http所做的是执行异步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)。

我能理解的是,如果要管理RESTFUL资源,使用$resource将允许您在代码中定义一次资源,并在资源上使用该资源进行多次操作。这增加了代码的可读性和可维护性。

如果你只是想有通用的调用,而不是像post, delete, update这样管理它,你可以使用$http或$resource(随你喜欢)。

我认为重要的是要强调$resource期望对象或数组作为服务器的响应,而不是原始字符串。所以如果你有一个原始字符串(或任何除了对象和数组)作为响应,你必须使用$http