我正在构建自己的Ajax网站,我正在考虑REST和RPC.
如果我的服务器支持Servlets我只是安装persevere并结束问题,但我的服务器不支持Servlets.
RPC更易于编码(IMO),并且可以轻松地用PHP编写.我只需要一个数据库查询执行器.我正在使用Dojo Toolkit和JSON.
为什么我应该选择REST over RPC或RPC over REST?
理解它的最好方法是阅读Roy T. Fielding关于它的论文,或者他博客上的相关文章,他讨论了纯REST和简单RPC架构之间的差异.
需要注意的另一件事是,关于REST的维基百科文章处于惨淡状态,而自己(REST的"发明者")自己表示这篇文章是不准确的.
人们错过REST最大的问题是可发现性 - 资源应该包括其超文本中其他相关资源的URI,而不是依赖于URI命名约定,这些约束是带外和非标准化的.
流行的RPC实现(如SOAP或XML-RPC)的一个大问题是它们在自己的专有体系结构下使用HTTP,而不是利用HTTP的所有不同属性,如PUT,GET,DELETE等.所以这不适合传统的Web堆栈 - 中间的缓存服务器不起作用,例如,在不知道RPC调用内容的含义的情况下.
这是对REST和RPC的不完整介绍,但我想我已经强调了一些经常被忽略的重点.要小心,因为REST上有很多错误的信息.
也就是说,REST不适用于所有事情.它是一种架构,因此您可以非常灵活地实现它.但是如果主要以资源的形式访问它是没有意义的,那么REST可能不合适,或者它可能只适合您应用程序的某些部分,这很好.
嗯......简单来说,两者都是非常抽象的模型......如此抽象,它们自然会出现在各处......
REST是使用CRUD方式访问全局标识符(HTTP中的URI)来解决资源的想法(在HTTP的情况下使用POST,GET,PUT和DELETE ......好吧,至少这是这个想法)......
RPC是你在不同的机器上调用一个过程,传入一些参数,并获取一个返回值的想法......
维基百科上有一个很好的简短比较
Persevere创建了一个服务,允许两者(以一种非常优雅的方式,诚然)...它是RESTful(尽管它不仅使用HTTP功能来实现这一点)并暴露了RPC接口......
最后,你应该看一下你的应用程序需要做什么...作为大多数人,你可能最终会使用RPC API(基于XML或JSON或其他),包括一个传输层部分RESTful子系统...这是因为拥有RESTfulnes意味着灵活性......如果客户端可以或多或少地自由遍历服务器上的数据(通过一组简单的CRUD方法),它不依赖于有限的(特定于问题的)通过API公开的一组方法,你可以转换逻辑客户端......
有三种不同的服务风格:
RPC API - 客户端向服务发送过程和参数,服务负责执行命令并返回结果.
Message API(Document 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文件),它可以自动生成服务连接器(代理)到客户端.
没有银弹 ; Web服务的类型和体系结构取决于实际的客户端和技术要求.
有关该主题的一般概念,请参阅Martin Fowler签名书之一 - 服务设计模式