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

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

据我所知,REST与上述方法的不同之处在于, 每次请求都会发送用户认证信息,并且也会使用PUTDELETE动词。

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

REST和RPC之间的一个重大区别是REST完全与资源有关,RPC更多地与动作有关。 例如,使用真正的RESTful服务,您永远不会打电话给http://domain.com/service/User/jason/add或http://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服务,但这是因为我打算从可能的其他几十种服务中获取该服务,并且将来可能会从其他开发人员那里访问该服务。 因此,尽管起初我只将它用于几个项目,但最终目标需要更标准的界面。

可以这样想一想 – 重要的是function,还是正在采取行动的信息?

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

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

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

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

最好描述REST以使用资源,而RPC则更多地涉及操作。

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

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

REST / RPC:

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

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

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

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

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

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

其他流行的RPC可能包括SOAP