什么时候使用REST处理请求与使用AJAX处理请求[关闭]


12

在我的网页上,如果希望显示动态下拉列表(例如,基于所选国家/地区的城市名称),则可以使用AJAX进行。但是我也可以使用REST调用来做到这一点。那我应该使用哪个呢?

我的问题是我真的没有得到REST和任何其他HTTP浏览器请求(也就是表单提交)之间的区别。我查看了REST的正式定义,它似乎与HTTP请求相同。那么REST与AJAX本质上有何不同?


6
您猜到了,它们根本不是互斥的。
塞斯·巴丁

2
当您的应用程序被另一个应用程序访问时,您通常会使用REST API
Gian Acuna

我看不到两者之间的比较。AJAX是多种技术的应用程序,用于实现动态Web内容,而REST是一种体系结构样式。
jramoyo

2
@downvoter ---为什么讨厌?
Kaushik

Answers:


26

我可以使用AJAX来完成。但是我也可以使用REST调用来做到这一点。

不。那两个是完全正交的。如果你想与你有从服务器获取数据来更新你的页面,你使用AJAX做到这一点。没有别的办法了。而且该AJAX调用可以使用REST或其他方式。

我的问题是我真的没有得到REST和HTTP浏览器请求之间的区别。(aka表单提交)。我看过REST的正式定义,它看起来像一个HTTP请求。

REST呼叫一个HTTP请求,总是。尽管它可以用于处理常规的浏览器调用(如表单提交)并返回完整的HTML页面,但通常用于处理仅返回数据的API调用(通常为JSON格式)。

那么为什么有一个单独的名字呢?

因为REST是使用HTTP的一种特定样式,所以可以说它原本是要使用的,但是大多数人没有“理解”它,因此近二十年来很少使用。

具体地说,REST意味着对要在URL本身中检索或操作的实体进行编码(通常通过ID),并对要使用的HTTP方法(对GET进行检索,对POST进行更改,对PUT进行创建)要对它执行什么操作进行编码。 ,DELETE(删除)。


6
REST不必始终通过HTTP。如果适合该方法集,则任何协议都可以是REST。但是,在Web应用程序上下文中,当然是HTTP。
Jan Hudec

10
@Jan Hudec:是否有现实世界中其他协议使用REST的示例?
Michael Borgwardt

6

好吧,我认为您首先需要了解AJAX和REST并不是您的用例的替代品。AJAX代表异步javascript和XML,因此,如果您在浏览器请求完成后使用javascript加载数据,则您正在执行AJAX。

另一方面,REST代表表示状态传输,正如Stefan Billet指出的那样,REST使用HTTP请求来传输数据。因此,REST实际上是使用AJAX的一种方法。SOAP将是另一种,但是这对于您的问题来说是不可能的。因此,您的问题应该是:“哪种技术最适合我的用例?”

在这种情况下,我建议考虑下拉菜单中使用的数据量。如果只有很少的元素,则可以将它们全部包含在页面中,而只需使用javascript即可显示适当的元素。第二种选择可能是使用REST调用并以JSON作为表示形式,因为它很容易与javascript一起使用并且非常轻巧,这当然也意味着要进行AJAX。


当我使用Ajax加载网页的一部分时,该AJAX请求是对服务器的http调用。可以肯定地说在这种情况下AJAX使用的是REST吗?
Kaushik

好吧,这取决于您要调用的方法。如果该方法例如满足RESTful WebService的约束(en.wikipedia.org/wiki/Representational_state_transfer),则可以说是。
莱斯斯塔

4

REST使用HTTP动词GET,POST,PUT,DELETE分别获取,插入,更新,删除服务器上的资源。例如使用url的GET:controller / customer / {id}
替代方法是向控制器添加方法,例如GetCustomerById(id),InsertCustomer(客户),UpdateCustomer(客户),DeleteCustomer(客户)。这就是所谓的RPC方法。例如,带有url的GET:controller / GetCustomerById?id = {id}
其中之一是,REST api是可预测的。如果您了解REST并且知道所需资源的名称(例如,客户),那么您可以立即加入并使用带有标准动词的REST控制器。
使用RPC方法时,您需要知道控制器上使用的方法,它们采用的参数的种类等。这些签名可能因控制器而异,因应用程序而异。
另一方面,AJAX只是放置上述请求的异步方式,无论是作为REST调用还是RPC调用。


替代方案仍然是REST。其余部分由操作集定义,而不是所使用的协议。
Jan Hudec
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.