- 浏览: 409391 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
转自:http://www.nowamagic.net/librarys/veda/detail/1247
当HTTP被发明出来的时候,其实REST就已经存在了。可惜这么多年来,WEB开发模式却越来越背离HTTP的本质,舍本逐末的追求起RPC之类的东西。此时REST重新回到人们的视线里,无疑让大家开始反思过去走过的弯路。
本文并不想从头介绍REST,只是想举例说明一下需要注意的问题:
先来看看人们对REST的困惑:
REST什么样子?
最一般的REST例子,类似下面的样子:
1 |
POST /articles 创建 |
2 |
DELETE /articles/123 删除
|
3 |
PUT /articles/123 更新或创建 |
4 |
GET /articles/123 查看 |
顺便说说几个知识点:
GET操作是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变。比如我用GET浏览文章,不管浏览多少次,那篇文章还在那,没有变化。当然,你可能说每浏览一次文章,文章的浏览数就加一,这不也改变了资源的状态么?这并不矛盾,因为这个改变不是GET操作引起的,而是用户自己设定的服务端逻辑造成的。
PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。顺便说一句,因为GET操作是安全的,所以它自然也是幂等的。
POST操作既不是安全的,也不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。
安全和幂等的意义在于:当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。从这个意义上说,POST操作往往是有害的,但很多时候我们还是不得不使用它。
还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上的(/articles),而PUT操作是作用在一个具体资源之上的(/articles/123),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。
浏览器不支持PUT/DELETE方法怎么办?
大部分浏览器只支持GET/POST方法,这使得我们无法完美的实现REST。对于这样的情况,大致有几种解决方法,一种是在表单里加入一个_method之类名字的隐藏字段,用于表示真正的方法,另一种是使用X-HTTP-METHOD-OVERRIDE头信息来重载POST。
HTTP方法够用么?
从上面的例子,我们可以看到,通过使用已有的HTTP方法:POST,DELETE,PUT,GET就可以完成资源的增删改查,但在实际情况中,我们需要做的操作往往并不仅仅局限在简单的增删改查操作中,比如说我们要把一篇文章“置顶”,但是HTTP方法里没有一个和“置顶”操作相对应的方法,这时候该怎么办呢?REST对类似问题的解决方案是:创建一个新的资源!在上面的例子里,我们可以这样:
1 |
PUT /toparticles/123 |
通过创建出一个新的资源(toparticles),我们就可以使用简单的HTTP方法通吃一切操作了。
REST反对使用Session么?
牢记一点,REST拒绝Session!这是因为REST强调无状态性。这里的状态指的的应用状态,也可以称之为会话状态。一旦在服务端保持了这样的状态,那么架构的可扩展性将大打折扣。在REST看来,任何类似的状态本身都应该是一个独立的资源。
Cookie对REST有害么?
一分为二的看,如果Cookie里保存的是应用状态的话,就没有问题。因为应用状态本来就属于客户端。但如果使用Cookie保存类似PHPSESSIONID之类的东西就不对了,因为这样的数据并不属于客户端状态,它只不过是使用Session的借口而已。
再来看看REST在PHP中的现状:
PHP里的REST实现案例不多,有点影响都就是CakePHP和Zend,下面分别看看他们的实现:
CakePHP:
设定路由:
1 |
Router::parseExtensions( 'xml' );
|
2 |
Router::mapResources( 'articles' );
|
编写控制器:
1 |
class ArticlesController extends AppController {
|
2 |
var $components = array ( 'RequestHandler' );
|
3 |
function view( $id = null) {
|
4 |
$article = $this ->Article->findById( $id );
|
5 |
$this ->set(compact( 'article' ));
|
6 |
}
|
7 |
// ...
|
8 |
} |
视图:
1 |
<articles> |
2 |
<?php echo $xml ->serialize( $article ); ?>
|
3 |
</articles> |
差不多就这样了,相应的,还可以实现其他的功能,于是,如下REST操作便成为可能:
1 |
POST /articles |
2 |
DELETE /articles/123.xml
|
3 |
PUT /articles/123.xml |
4 |
GET /articles/123.xml |
总体看,CakePHP的REST实现基本上是按Rails风格来实现的,大体还过得去。
ZendFramework:
ZendFramework通过Zend_Rest组件来实现Rest功能:
服务端:
1 |
require_once 'Zend/Rest/Server.php' ;
|
2 |
function sayHello( $who , $when )
|
3 |
{ |
4 |
return "Hello $who, Good $when" ;
|
5 |
} |
6 |
$server = new Zend_Rest_Server();
|
7 |
$server ->addFunction( 'sayHello' );
|
8 |
$server ->handle();
|
客户端:
1 |
require_once 'Zend/Rest/Client.php' ;
|
2 |
$client = new Zend_Rest_Client( 'http://path/to/server/script' );
|
3 |
$client ->sayHello( 'Davey' , 'Day' );
|
4 |
|
5 |
echo $client ->get();
|
这时候,我们看一下Web服务器的日志,会发现生成了一条如下的记录:
1 |
GET /path/to/servier/script?method=sayHello&arg0=Davey&arg1=Day&rest=1 HTTP/1.1 |
我们发现,实际操作方法是由URL中的method=sayHello指定的,而HTTP固有方法(GET/POST等)则成为了摆设,这是典型的RPC风格,如果大家对比Zend_Rest和Zend_XmlRpc文档的话,会明显发现它们根本就是一个东西,所以说,Zend_Rest是一个REST伪实现。
发表评论
-
【转】那些年使用过MapReduce的论文
2014-03-09 15:20 1055MapReduce is a programmi ... -
单点登录SSO的实现原理
2013-08-26 10:09 684转自:http://blog.csdn.net ... -
73本免费的、语言无关的优秀的编程书籍
2013-03-24 21:43 724这些书籍中有HTML格式的,也有PDF格式的,当 ... -
Hadoop集群实践
2012-11-11 17:01 781(0) 完整架构设计 [ Hadoop(HDFS) , ... -
【转】大流量、高并发的网站的底层系统架构
2012-09-29 22:08 748转自: http://hi.baidu.com/liyi ... -
【转】建设一个靠谱的火车票网上订购系统
2012-09-29 21:59 1108转自:http://www.ifanr.com/68019 ... -
可扩展性数据库的架构设计
2012-07-17 19:59 822参考:http://www.51testing.c ... -
高并发高流量网站架构设计(参考)
2012-06-04 16:34 669参考:http://carywu.blog.51c ... -
BlazeDS的架构和工作原理简介
2012-06-02 14:09 890参考:http://hi.baidu.com/whlxj ... -
OpenMP,MPI,MapReduce 比较
2012-05-20 12:08 2177参考: http://blog.csdn.net/z ... -
大型高性能网站的十项规则
2011-11-21 15:48 668参考:http://kb.cnblogs.com/page/6 ... -
微博的短url如何实现
2011-11-03 18:38 2405参考:http://hi.baidu.com/icyd ... -
分布式哈希表和一致性哈希
2011-10-26 14:47 1288参考: http://apps.hi.b ... -
NoSQL架构实践(一)——以NoSQL为辅
2011-10-25 23:36 714参考:http://www.infoq.com/cn/n ... -
浅谈领域驱动设计
2011-01-05 01:08 792需求背景 现在的 样子 如PoEAA中提到 ... -
各种架构图汇总!
2010-12-29 22:26 15591.Spring架构图 2.Hiber ... -
Facebook 架构学习
2010-12-23 23:31 879参考:http://www.dbanotes.net/ ... -
Access、SQLite、HSQLDB、Sybase、MySQL、DB4O比较
2010-07-17 16:13 2170本文转自:http://blog.sin ...
相关推荐
在Web 2.0应用中,REST允许客户端和服务器之间轻量级通信,提高性能和可扩展性。开发者可以使用PHP创建RESTful服务,通过URL定位资源,使用HTTP动词表示操作,使得接口更加清晰且易于理解。 Dojo是一个强大的...
- **RESTAPI**:理解RESTful概念和如何在WordPress中使用REST API是非常重要的,包括了解其结构、端点和数据格式。 通过创建这样一个插件,我们能够使REST API更好地服务于现代Web开发的需求,为那些依赖API获取...
环信是一款广泛应用于即时通讯领域的服务提供商,提供API和SDK,使得开发者能够轻松地在自己的应用中集成聊天、群聊、语音通话等多种功能。而PHP作为广泛应用的后端开发语言,与环信的REST API结合,可以实现高效、...
描述中的".zip"表明这是一个压缩文件,包含了一个名为"Shodan-PHP-REST-API-master"的项目,很可能是一个GitHub仓库的克隆或下载版本,内容可能包括源代码、文档和其他资源,用于帮助开发者理解和使用这个PHP5 REST ...
标题中的"Drest"是一个专门为PHP开发设计的库,它的主要功能是将 Doctrine 实体...在实际项目中,开发者可以利用 Drest 的特性,轻松地实现数据的 CRUD 操作,并通过 API 与客户端进行通信,使得前后端分离更加便捷。
1、使用Rest SDK及Demo需要先获得帐号及应用信息,并使用这些信息完成SDK初始化操作, 主帐号可以从开发者控制台获取,应用ID和子...4、本rest sdk源码在sdk目录中提供,客户对于官方未提供demo的rest可自行修改添加。
在本文中,我们将深入探讨如何在uniapp项目中利用unipush和个推SDK服务端实现推送功能,并结合Thinkphp + RestAPI V2构建后端系统。uniapp是一款跨平台的移动应用开发框架,它允许开发者用一套代码库来创建iOS、...
在本文中,我们将深入探讨“Laravel开发-php-rest-models”这一主题,这是一个独立于框架的PHP REST模型,它提供了模式验证以及对多种数据库引擎的支持。REST(Representational State Transfer)是一种广泛应用于...
Paypal Rest API应用-支付,退款(包括信用卡支付),C#代码,使用前请先自己去paypal官网注册拿到 密钥,配置到web.config中,源码中仅在sandbox环境下测试过,该资源设计重在功能实现,UI方便没有过多设计,仅限于...
这个PHP示例项目为开发者提供了一个实践平台,帮助他们学习如何将Camunda的流程自动化能力融入到PHP应用中,从而提升业务流程的效率和可维护性。通过研究这些文件,开发者可以逐步掌握如何利用Camunda的强大功能来...
综上所述,"rest for php"涵盖了从理解REST架构的基本原理,到使用PHP实现RESTful API的详细步骤,以及在实际项目中的应用和最佳实践。通过学习这些知识,开发者可以构建出高效、可扩展的Web服务。
REST(Representational State Transfer)架构风格是Web服务设计的一种流行方式,尤其在互联网大公司如MySpace、Google、Yahoo、Facebook、淘宝和人人网等构建开放平台时被广泛应用。REST的核心理念是通过HTTP协议对...
在"REST开发框架及示例"这个主题中,我们可以讨论以下几个重要的知识点: 1. RESTful API设计原则: - 资源(Resources):每个URL代表一个资源,如/users/1表示用户ID为1的用户资源。 - 动词(Methods):使用...
在这个项目中,PHP被用来编写后端逻辑,处理来自Nginx的请求,与MySQL进行数据交互,生成符合REST API规范的响应。PHP可以轻松地连接到MySQL数据库,执行SQL查询,并将结果转化为JSON格式,这是REST API常用的返回...
REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 所有的数据,不过是通过网络获取的还是操作(增删改查)...
在IT行业中,Laravel是一个非常受欢迎的开源PHP框架,它为开发者提供了优雅的方式来构建Web应用程序。本项目聚焦于使用Laravel来开发一个针对YouTrack的REST API PHP客户端。YouTrack是一款强大的bug跟踪和项目管理...
在实际应用中,`mevdschee-php-crud-api-8e6d7cb` 这个文件可能包含了项目的源代码,包括PHP-CRUD-API v2脚本的最新版本。使用此脚本时,首先需要将其部署到服务器,并确保PHP环境已经安装并配置好。接着,配置...
二、REST API在主题开发中的应用 1. 动态内容渲染:传统WordPress主题通常依赖PHP模板引擎来展示内容。引入REST API后,主题可以获取JSON格式的数据,然后使用JavaScript进行前端渲染,实现更快速、更灵活的用户...
#### REST API在OpenDaylight中的应用案例 - **网络拓扑管理**: 可以通过REST API查询和管理网络设备之间的连接关系。 - **流量控制**: 实现对网络流量的监控和调整,优化网络性能。 - **安全策略配置**: 设置访问...
文档的描述部分强调了该教程的实践性,即“practical tutorial”,意味着读者通过阅读本教程,能够实际动手操作和应用WordPress REST API,从而快速掌握并运用它。该教程的目标是让读者能够“get you up and running...