我有一个使用AJAX从服务器获取JSON数据的Web应用程序。它要求用户首先使用浏览器登录,以便设置cookie。仅使用GET
和POST
谓词,其中GET
用于检索数据,POST
用于修改数据的任何操作。
据我所知,REST与上述方法的不同之处在于,用每个请求发送用户身份验证信息,同时使用PUT
和DELETE
动词
我的问题是,如果终点只是用户的浏览器,那么REST Web服务对类似RPC的方法有什么好处?我可以理解当客户端未知时REST是如何有益的,但是当我只使用jQuery ajax调用时,与类似RPC的方法相比,它的好处还是值得吗?
答案 0 :(得分:33)
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服务,但这是因为我打算从可能的其他几十种服务中获取该服务,并且将来可能会从其他开发人员那里访问该服务。因此,尽管起初我只将其用于几个项目,但最终目标需要更标准的界面。
答案 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服务是:
答案 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,例如