REST Web服务与类似RPC的服务有何区别?

时间:2011-09-14 00:32:39

标签: jquery ajax json rest rpc

我有一个使用AJAX从服务器获取JSON数据的Web应用程序。它要求用户首先使用浏览器登录,以便设置cookie。仅使用GETPOST谓词,其中GET用于检索数据,POST用于修改数据的任何操作。

据我所知,REST与上述方法的不同之处在于,用每个请求发送用户身份验证信息,同时使用PUTDELETE动词

我的问题是,如果终点只是用户的浏览器,那么REST Web服务对类似RPC的方法有什么好处?我可以理解当客户端未知时REST是如何有益的,但是当我只使用jQuery ajax调用时,与类似RPC的方法相比,它的好处还是值得吗?

5 个答案:

答案 0 :(得分:33)

REST和RPC之间的一个重大区别是REST完全与资源有关,RPC更多地与动作有关。例如,使用真正的RESTful服务,您永远不会调用http://domain.com/service/User/jason/addhttp://domain.com/service/User/addUser?username=jason之类的内容。使用RESTful服务,您只需引用URL中的资源,然后使用HTTP谓词和请求正文定义如何处理该资源。因此,对http:/domain.com/service/jason的GET请求应返回有关资源(jason用户)的信息。您可以更具体地说出http://domain.com/service/user/jason,但结果应该相同。如果您要添加名为jason的用户,您将使用完全相同的URL http://domain.com/service/user/jason,但您将使用PUT谓词,并且请求的正文将包含其他数据。要删除jason资源,您将再次使用完全相同的URL(http://domain.com/service/user/jason)并使用DELETE谓词。要更新,您将使用POST动词。

REST非常适合您希望其他开发人员使用的面向公众的API。它们可以做得非常标准,因此它们不需要大量关于使用服务的预先存在的知识。没有WSDL调用等。由于无状态,它还可以使它们在部分网络故障期间更稳定。

根据您的描述,我认为您不需要真正的RESTful服务。但是,如果您需要更标准的API,您可能需要考虑,继续。我为一个仅用于内部使用的项目提供了REST服务,但这是因为我打算从可能的其他几十种服务中获取该服务,并且将来可能会从其他开发人员那里访问该服务。因此,尽管起初我只将其用于几个项目,但最终目标需要更标准的界面。

答案 1 :(得分:6)

以这种方式思考 - 是重要的功能,还是正在采取行动的信息?

当您处理REST时,您处于信息状态 - 您希望查看当前信息(GET),或者您更改该特定文档(POST,DELETE),或者您创建新文件(PUT)。

使用RPC,它是关于过程/函数/方法/操作......无论你用你的语言称它们。这些信息只是在服务上运行或返回的信息......但它可能是众多信息中的一种。我们可能正在搜索并返回项目列表。或者我们可能正在谈判我们需要来回互动的事情。 (REST的大部分协商都是通过HTTP处理的,所以你必须使用Accept和Accept-Language标题来处理)但是这个操作更重要。

然后是第三种类型,即document / literal SOAP ...其中重要的是消息,你必须猜测被调用的函数是基于消息的。如果您只是处理CRUD操作,这可能没问题。在这种情况下,优于REST的优点是您仍然可以拥有WSDL,因此您事先知道要发送的必要元素以及期望的内容。

它们都有效...它主要是关于你如何思考这个问题,以及从你已经拥有的内容转换为API是多么容易。如果你从头开始,你可以做任何你想做的事。我个人喜欢SOAP(文档/ lit或RPC),因为我可以提供一个可以用来引导客户端的WSDL文件。我有过几个小时内人们正在进行严肃查询的案例。 (解释API的一些抽象细微之处,例如发送空字符串与空字符串之间的区别花了一些时间,但我会遇到与REST相同的问题)

答案 2 :(得分:4)

最好使用REST来描述资源,其中RPC更多地是关于操作。

<强> REST: 代表具象国家转移。这是组织独立系统之间交互的简单方法。 RESTful应用程序使用HTTP请求来发布数据(创建和/或更新),读取数据(例如,进行查询)和删除数据。因此,REST对所有四个CRUD(创建/读取/更新/删除)操作使用HTTP。

<强> RPC: RPC主要用于跨不同模块进行通信以满足用户请求。 例如在openstack中,比如nova,glance和neutron在启动虚拟机时如何协同工作。

  

REST / RPC:

作为一种编程方法,REST是Web服务和RPC的轻量级替代方案。 与Web服务非常相似,REST服务是:

  1. 独立于平台(如果服务器是Unix,客户端是Mac或其他任何东西,你不在乎),
  2. 与语言无关(C#可与Java交谈等),
  3. 基于标准(在HTTP之上运行)和
  4. 可以在有防火墙的情况下轻松使用。

答案 3 :(得分:1)

你认为REST与调用对象耦合较少是正确的 - 如果你要比较需要从服务器调用WSDL文件的SOAP Web服务,那么REST Web服务的耦合程度较低(即不需要在调用之前了解Web服务)。大多数情况下,令牌需要与给定“表示”的请求一起传递。

我不认为使用来自ajax的REST有很大的好处,事实上,根据你正在处理的API,你可能需要一个令牌作为URI参数(querystring参数)传入,同时使用基于SOAP的Web服务,这不是必需的。实际上很容易将SOAP Web服务与ajax调用相结合,以JSON格式传递数据并将JSON反序列化为服务器端的对象。最重要的是,jQuery让所有这一切变得非常容易。

答案 4 :(得分:1)

讨厌打破你们所有人。 RPC正在进行本地调用,它抽象了底层远程 行为。你猜怎么着?做REST也是一回事。 关于REST的论点是关于资源是不正确的,实际上 直接调用动作。

我声称REST over HTTP,jsons是RPC的一种形式。

其他流行的RPC可能包含SOAP,例如