您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

REST&PHP study Note

2024/4/2 16:49:19发布123次查看
有几篇不错的文章收藏一下: php rest example getting started with the research advanced getpriceresearch api how to: making a php rest client to call rest resources create a rest api with php rest 风的应用程序实现 rest 百度百科 [soa]解答有关
有几篇不错的文章收藏一下:
php rest example
getting started with the research advanced getpriceresearch api
how to: making a php rest client to call rest resourcescreate a rest api with php
rest 风格的应用程序实现
rest 百度百科   
[soa]解答有关 rest的十点疑惑 
rest 及其在php中的现状(包含某些 资源抽象方法)
rest 的php初探
rest php 实现
simple php rest client and rest server example
实战webservice iii: rest篇(基于php)
php rest初接触 (一)
introduction to writing a rest server in php
rest与面向资源的web开发
rest 学习  
rest 是由 roy fielding 在他的论文《architectural styles and the design of network-based software architectures》中提出的一个术语。
rest 是英文 representational state transfer 的缩写,有中文翻译为“具象状态传输”(参考:《sip/ims网络中的representational state transfer (rest)和数据分布》)。
前面的内容比较枯燥,我说说我自己的理解。
但是 rest 到底是什么呢?论文我看不懂,不过找到一篇更简单易懂的东西:《building web services the rest way》。
根据这篇文章,我整理了一下我自己对 rest 的理解:
rest 首先只是一种架构样式,不是一种标准。这点和 ajax 类似,两者都是利用现有的成熟技术。
在 rest 的定义中,一个 web 应用总是使用固定的 uri 向外部世界呈现(或者说暴露)一个资源。
uri 是英文 uniform resource identifier 的缩写,中文翻译“通用资源标志符”。
“通用资源标志符”是指唯一标识一个资源(xhtml 文件、图片、css 样式表)的字符串。当然了,rfc 中定义的 uri 复杂得多,不过我们此处将 uri 想象成一个人的身份证号码就行了(你不能有两个同时有效的身份证号码,一个号码也不可能同时对应两个人)。而我们天天挂在嘴边的 url 地址就是 uri 的一种表现形式(个人理解,有错请纠正)。
知道什么是 uri 后,我们来看一个实际例子:
http://www.example.com/photo/logo 指向 example.com 网站(可以视为一个 web 应用)中类型为 photo,名字为 logo 的资源。我们用浏览器访问这个 uri,看到的将可能是一个 xhtml 文档,其中用 来显示实际的照片。
http://www.example.com/photo/logo 很容易让你想到 url 重写。事实上,这个地址很可能会在服务器内部处理为 http://www.example.com/photo.php?name=logo 这样的地址。photo.php 是服务器端的一个动态脚本文件,根据 name 参数生成 xhtml 文档返回给浏览器。
现在假设我们要获取这张照片的 xml 文档。xml 文档中包含照片的文件名、文件大小、拍摄日期等等信息。也就是说我们要获取“同 一个资源的不同表现形式的数据”。对于这个要求,我们可以很容易的用另一个 url 地址达到:http://www.example.com/xml/logo。
但是,这就违背了“uri 唯一标识一个资源”的定义。如果我们要获取同一个资源的多种表现形式,那么就要使用 更多的 url,从而给一个资源指定了多个不同的 uri。
而在 rest 中,不管是获取照片的 xhtml 文档还是 xml 文档,或者照片文件本身,都是用同一个 uri,就是 http://www.example.com/photo/logo。
那这是怎么办到的呢?ruby on rails 中是通过分辨 http request header 信息来分辨客户端是想要取得资源的哪一种表现形式的数据。
当我们用浏览器访问一个网址时,浏览器会构造一个 http 请求。这个请求有一个头信息,其中包括了本次请求接受何种类型的数据。通常浏览器发送的 http 请求头中,accept 的值都是 */*,也就说接受服务器返回的任何类型的数据。
看到这里,聪明的家伙应该知道了。只要我们指定一个特定的 accept 参数,那么服务器就可以通过判断该参数来决定返回什么类型的数据。所以在一个采用 rest 架构的应用中,要获取同一个资源的不同表现形式的数据,只需要使用不同的 http 请求头信息就行了。
如果考虑为 web 应用增加 web services,这种技术的价值就体现出来了。比如我写了一个 delphi 程序,现在只需要构造一个包含 accept: text/xml 的 http 请求头,然后将请求发送到 http://www.example.com/photo/logo 就可以了。返回的结果就是一个 xml 文档,而不是 xhtml 文档。
因为我们的 http 请求头信息有不同的状态,从而可以获得不同的数据,所以叫做“具象状态传输” :)
—————————————
除了上面的用法,rest 还有进一步的扩展。
我们在 web 应用中处理来自客户端的请求时,通常只考虑 get 和 post 这两种 http 请求方法。实际上,http 还有 head、put、delete 等请求方法。而在 rest 架构中,用不同的 http 请求方法来处理对资源的 crud(创建、读取、更新和删除)操作:
post: 创建get: 读取put: 更新delete: 删除经过这样的一番扩展,我们对一个资源的 crud 操作就可以通过同一个 uri 完成了:
http://www.example.com/photo/logo(读取)
仍然保持为 [get] http://www.example.com/photo/logo
http://www.example.com/photo/logo/create(创建)
改为 [post] http://www.example.com/photo/logo
http://www.example.com/photo/logo/update(更新)
改为 [put] http://www.example.com/photo/logo
http://www.example.com/photo/logo/delete(删除)
改为 [delete] http://www.example.com/photo/logo
从而进一步规范了资源标识的使用。
通过 rest 架构,web 应用程序可以用一致的接口(uri)暴露资源给外部世界,并提供对资源的操作服务。这对于以资源为中心的 web 应用来说非常重要。例如照片共享网站、用户社区等。
—————————————
ruby on rails 1.2 版对 rest 有很好的支持,但要在 php 中应用 rest 还需要解决不少问题:
如何在服务端判断 put、delete 请求方法;如何获取用 put、delete 请求方法中传递的数据;如何获取 http 请求头信息中的 accept 参数值;如何在浏览器端发起 put 和 delete 请求。不过我仔细看了 php 文档,我觉得上面几个问题都是可以解决的。
服务端综合使用 $_server[’http_accept’]、$_server[’request_uri’]、$_server[’request_method’]、$_server[’query_string’] 这些变量应该可以搞定前面三个问题。而第四个问题则可以用 javascript 的 xmlhttprequest 对象来实现。
不过我想 rest 的真正价值在于 web services,而不是通过浏览器操作的应用程序。
—————————————
参考:
面向资源与面向活动的 web 服务跨越边界: rest on railsajax 和 rest,第 1 部分building web services the rest wayarchitectural styles and the design of network-based software architecturessip/ims网络中的representational state transfer (rest)和数据分布
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product