当前位置:  开发笔记 > 编程语言 > 正文

PHP中的REST与RPC

如何解决《PHP中的REST与RPC》经验,为你挑选了3个好方法。

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

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

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

为什么我应该选择REST over RPC或RPC over REST?



1> aehlke..:

理解它的最好方法是阅读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可能不合适,或者它可能只适合您应用程序的某些部分,这很好.


想要指出你所谓的"流行RPC的一个大问题"也可能是一个很大的优势,取决于你的目标是什么.如果您依赖HTTP的动作谓词,那么您现在可以使用HTTP.在许多系统体系结构中,可能需要通过各种不同的传输机制(HTTP,套接字,消息队列等)进行RPC调用.我们选择的HTTP通常与它的普遍性有关,而不是它实际上是理想的传输协议(参见通过HTTP隧道传输的无数浏览器解决方案,例如BOSH).需要考虑很多权衡因素.
REST与RPC实际上是一种错误的二分法,人们在提出这个问题时通常的意思是,是否使用vanilla HTTP以RESTful方式公开服务,或者是否使用RPC来构建更加自定义的界面.我经常看到这个问题; 你可能会发现这篇文章有用:http://www.etherealbits.com/2012/12/debunking-the-myths-of-rpc-rest/.

2> back2dos..:

嗯......简单来说,两者都是非常抽象的模型......如此抽象,它们自然会出现在各处......

REST是使用CRUD方式访问全局标识符(HTTP中的URI)来解决资源的想法(在HTTP的情况下使用POST,GET,PUT和DELETE ......好吧,至少这是这个想法)......

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

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

Persevere创建了一个服务,允许两者(以一种非常优雅的方式,诚然)...它是RESTful(尽管它不仅使用HTTP功能来实现这一点)暴露了RPC接口......

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


CRUD直接映射到REST,并且有实际的实现.见CouchDB.说REST是CRUD并不是一个误区,因为REST基本上就是网络的CRUD.REST也比CRUD更多的事实无关紧要.这就像是说宇航员不是一个人,因为他是一名宇航员.
REST与CRUD无关.
在CRUD方面考虑REST可能是可以原谅的.这是一个常见的误解.以下是解释:"......通过从GPPD(GET,POST,PUT,DELETE)中删除CRUD(创建,检索,更新,删除)映射,您可以按照应该使用的方式使用REST.没有错使用POST删除,更新或创建资源,只要您正在POST到适当的资源." - 来自http://blog.jonnay.net/archives/642-REST-!-CRUD!.html
@wizlb,我很困惑,这最终是一种误解,还是不是?
如果你正确地做REST,一切都会"看起来"像CRUD,因为你本质上是CRUDing状态.

3> 小智..:

有三种不同的服务风格:

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签名书之一 - 服务设计模式

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有