我正在构建自己的Ajax网站,我正在考虑REST和RPC之间。
如果我的服务器支持Servlet,我只需安装persevere并结束问题,但我的服务器不支持Servlet。
RPC更易于编码(IMO),并且可以轻松地用PHP编写。我只需要一个数据库查询执行器。我正在使用Dojo Toolkit和JSON。
为什么我要选择REST over RPC或RPC over REST?
答案 0 :(得分:56)
了解它的最好方法是阅读Roy T. Fielding关于它的论文,或关于他blog的相关文章,他讨论了纯REST和简单RPC架构之间的差异。
另一件需要注意的事情是,关于REST的维基百科文章处于惨淡状态,而自己(REST的“发明者”)自己表示文章不准确。
人们错过REST最大的问题是可发现性 - 资源应包括其超文本中其他相关资源的URI,而不是依赖于带外和非标准化的URI命名约定。 流行的RPC实现(如SOAP或XML-RPC)的一个大问题是它们在自己的专有体系结构下使用HTTP,而不是利用HTTP的所有不同属性,如PUT,GET,DELETE等。所以这不是'也适合传统的Web堆栈 - 中间的缓存服务器不起作用,例如,不知道RPC调用内容的含义。这是对REST和RPC的不完整介绍,但我想我已经强调了一些经常遗漏的重点。要小心,因为REST上有很多错误的信息。
那就是说,REST不适用于所有事情。它是一种架构,因此您可以非常灵活地实现它。但是如果主要以资源的形式访问它是没有意义的,那么REST可能不合适,或者它可能只适合您应用程序的某些部分,这很好。
答案 1 :(得分:24)
REST是使用CRUD方式(使用POST,GET,PUT访问全局标识符(HTTP中的URI)来解决资源的想法并且在HTTP的情况下删除......好吧,至少这是个想法... ...
RPC是你在不同的机器上调用一个过程,传入一些参数,并获取一个返回值的想法......
There is a nice short comparison on Wikipedia
Persevere创建了一个服务,允许两者(以一种非常优雅的方式,无可否认)......它是RESTful(虽然它不仅使用HTTP功能来实现这一点)和公开RPC接口......
最后,你应该看一下你的应用程序需要做什么...作为大多数人,你可能会使用RPC API(基于XML或JSON)或者其他),包括部分RESTful子系统的传输层......这是因为拥有RESTfulnes意味着灵活性......如果客户端可以或多或少地自由遍历服务器上的数据(通过一组简单的CRUD)方法),它不依赖于通过API公开的有限(特定于问题)方法集,并且您可以将逻辑客户端转移...
答案 2 :(得分:6)
有三种不同的服务风格:
SOAP和REST是来自W3C的标准汇编,主要区别在于SOAP使用HTTP,SMTP等作为传输协议,REST使用它作为应用程序协议,它应支持AKA(GET,PUT) ,PUSH,DELETE和POST)。 SOAP还意味着使用XML和REST可以使用任何数据类型(JSON,XML,HTTP等)。此外,SOAP的一个主要优点是服务描述符(WSDL文件),它可以自动生成服务连接器(代理)到客户端。
没有silver bullet; Web服务的类型和体系结构取决于实际的客户端和技术要求。
有关此主题的一般概念,请参阅Martin Fowler签名书之一 - Service Design Patterns