PHP中的REST与RPC

时间:2009-07-08 14:30:40

标签: php json rest dojo rpc

我正在构建自己的Ajax网站,我正在考虑REST和RPC之间。

如果我的服务器支持Servlet,我只需安装persevere并结束问题,但我的服务器不支持Servlet。

RPC更易于编码(IMO),并且可以轻松地用PHP编写。我只需要一个数据库查询执行器。我正在使用Dojo Toolkit和JSON。

为什么我要选择REST over RPC或RPC over REST?

3 个答案:

答案 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方式(使用POSTGET,PUT访问全局标识符(HTTP中的URI)来解决资源的想法并且在HTTP的情况下删除......好吧,至少这是个想法... ...

RPC是你在不同的机器上调用一个过程,传入一些参数,并获取一个返回值的想法......

There is a nice short comparison on Wikipedia

Persevere创建了一个服务,允许两者(以一种非常优雅的方式,无可否认)......它是RESTful(虽然它不仅使用HTTP功能来实现这一点)公开RPC接口......

最后,你应该看一下你的应用程序需要做什么...作为大多数人,你可能会使用RPC API(基于XMLJSON)或者其他),包括部分RESTful子系统的传输层......这是因为拥有RESTfulnes意味着灵活性......如果客户端可以或多或少地自由遍历服务器上的数据(通过一组简单的CRUD)方法),它不依赖于通过API公开的有限(特定于问题)方法集,并且您可以将逻辑客户端转移...

答案 2 :(得分:6)

有三种不同的服务风格:

  • RPC API - 客户端向服务发送过程和参数,服务负责执行命令并返回结果。
  • 消息API(文档API) - 客户端发送的DOM(元素)通常比RPC API调用更复杂,因为它们往往不直接暗示操作。
  • 资源API - 用于访问资源(数据库元组,文件,图像等)。一般来说,它还应该提供良好的媒体类型谈判。

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