REST与PHP中的RPC

我build立了自己的Ajax网站,并且正在考虑REST和RPC之间的关系。

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

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

为什么要selectREST over RPC或RPC over REST?

嗯…简单一点,都是非常抽象的模型…太抽象了,它们天生就是随处可见的…

REST是使用以CRUD方式访问的全局标识符(在HTTP的情况下是URI)寻址的资源(在HTTP的情况下使用POST , GET ,PUT和DELETE …),至less这个想法)…

RPC是在不同的机器上调用过程,传入一些参数并获取返回值的概念。

维基百科上有一个很好的比较

Persevere创build一个服务,允许(以一种非常优雅的方式,诚然)…它是RESTful (虽然它不仅使用HTTPfunction来实现这一点), 公开了一个RPC接口…

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

理解它的最好方法是阅读Roy T. Fielding关于它的论文,或者在他的博客上讨论纯REST和简单RPC体系结构之间的区别。

另外需要注意的是,关于REST的维基百科条款处于不利的状态,而Fielding本人,REST的“发明人”则认为这篇文章是不准确的。

人们对REST最大的担忧是可发现性 – 资源应该在其超文本中包含其他相关资源的URI,而不是依赖于带外和非标准化的URI命名约定。

stream行的RPC实现(如SOAP或XML-RPC)的一个大问题是,它们在自己的专有架构下使用HTTP,而不是像PUT,GET,DELETE等那样利用HTTP的所有不同属性。所以这不适合传统的Web堆栈 – 中间的caching服务器不起作用,例如,不知道RPC调用内容的含义。

这是对REST和RPC的一个不完整的介绍,但是我想我已经强调了一些经常被忽略的重点。 要小心,因为在REST上有很多错误的信息。

这就是说,REST并不是一切。 这是一个架构,所以你可以很灵活地实现它。 但是,如果主要将资源作为资源访问是没有意义的,那么REST可能不适合,或者它只适用于应用程序的某些部分,这很好。

有三种不同的服务风格:

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

SOAP和REST是W3C编写的标准,主要区别在于SOAP使用HTTP,SMTP等作为传输协议,REST使用它作为应用协议,它应该支持(GET,PUT,PUSH,DELETE和POST )。 SOAP还意味着使用XML,而REST可以使用任何数据types(JSON,XML,HTTP等)。 此外,SOAP的主要优点之一是服务描述符(WSDL文件),它可以为客户端自动生成服务连接器(代理服务器)。

没有银弹 ; Web服务的types和体系结构取决于实际的客户端和技术要求。

关于这个问题的总体思路,请参阅Martin Fowler签名书籍之一 – 服务devise模式