- 浏览: 912866 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
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,而不是通过浏览器操作的应用程序。
发表评论
-
iPhone5s插件推荐 越狱后必装的50个插件
2014-12-31 16:58 15591. Activator (没有之一的强大手势操作软件)2. ... -
JS automation 环境迁移备注
2014-11-15 11:17 0此次迁移涉及的问题记录如下: 1) Jenkins 直接把 ... -
MacOS 怎么写NFS移动硬盘
2014-11-14 19:13 26971、打开命令行终端。 2、插上移动硬盘,这时候你在Find ... -
How can I resize a partition with Disk Utility (Bottom-up)
2014-10-10 14:30 472Create a new volume in the bla ... -
Outlook 邮件提醒长期显示
2012-08-30 10:38 1348I thought it was one of th ... -
chrome 背景色的设置
2012-07-17 09:56 3019最近换了浏览器,开始喜欢上chrome。 为了保护眼睛 ... -
日常生活中练习右脑
2012-07-12 10:16 1254成年人在日常琐细的生活中,同样可以采取各种方法锻炼右脑。 ... -
大公司面试集锦
2012-06-18 10:23 1364微软十五道面试题 1、有一个整数数组,请求出两两之差绝对值最 ... -
商务英语中的委婉表达
2012-06-18 10:19 12551. 委婉: 1) 动词:think、hope、re ... -
放松颈椎的几个动作
2012-05-29 12:41 1187随时放松颈部肌肉 ... -
drupal简单的体验
2012-05-24 15:41 874第一步: 到 drupal.org下下载最新的Drupal ... -
HtmlParser进行解析原理
2012-05-23 13:48 1167这两天准备做一些网站编程的工作,于是对HtmlParse小研究 ... -
使用HtmlParser提取HTML文本块
2012-05-23 13:46 1460听人介绍说HtmlParser(Java版本)在网页预处理 ... -
[zz] Opencms vs Magnolia
2012-05-22 10:35 2005最近一直在挑选CMS,Opencms和Magnolia是考察的 ... -
面向对象的三个基本特征
2012-04-25 14:56 814面向对象的三个基本特征是:封装、继承、多态。 ... -
Maven vs Ant
2012-04-23 14:35 1191Ant 将提供了很多可以重用的task,例如 copy, mo ... -
zz智力题
2012-03-26 22:50 12631、有两根不均匀分布 ... -
几种开源Portal的简单介绍分析
2012-02-21 22:42 2446主要包括:Pluto,Liferay,eXo,Jetsp ... -
Portal top ten
2012-02-21 22:37 991TOP1 独立网店系统 Sh ... -
英文面试须知
2012-02-16 15:11 978英语面试需要好好准备 ...
相关推荐
3. **接口规范**:设计接口时需遵循一定的规范,如HTTP协议、SOAP协议、REST原则等。RESTful接口通常基于HTTP方法(GET、POST、PUT、DELETE等)进行操作,而SOAP接口则通过XML格式进行数据交换。 4. **接口协议**:...
### Django的概要介绍与分析 #### 一、概述 Django是一个高级的Python Web框架,采用MVC(Model-View-Controller)架构设计模式,致力于简化Web应用程序的开发流程。该框架由Adrian Holovaty和Simon Willison在...
在本课程中,我们将深入探讨"rofile-rest-api",这是一个与概要文件管理相关的RESTful API实现。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以数据资源为中心...
开放平台概要设计说明书是基于REST架构风格的开放服务平台,旨在为不同种类的应用系统提供以标准方式格式化的数据。该平台的设计思路参考了淘宝开放平台(TOP),旨在提供一个统一的开放服务平台。 开放平台的结构...
《profiles-rest-api: 概要文件REST API课程的源代码详解》 在现代Web开发中,REST(Representational State Transfer)API已经成为构建可扩展、高效且易于使用的接口的标准方法。本篇文章将深入探讨一个名为...
在本项目中,"profile-rest-api" 是一个与RESTful API相关的课程源代码库,主要聚焦于使用Python语言实现。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,广泛应用于Web服务,...
"profiles-rest-api:概要文件REST API的源代码"是一个关于构建个人档案管理系统的RESTful API的源码项目。在本项目中,我们将探讨如何使用Python语言和相关框架来设计和实现这样的API。 REST(Representational ...
- 介绍微博开放平台的基本信息。 - 使用开放平台提供的测试工具进行演示。 2. **前置知识** - 必需:Python 2.7、PyCharm IDE - 可选:Linux 命令行基本操作 3. **推荐读物** - `RESTful Best Practices-v1_2...
在本项目中,"profiles_rest_api:概要文件REST API课程的源代码"是一个与Web开发相关的学习资源,主要关注如何使用Python构建RESTful API。REST(Representational State Transfer)是一种设计网络应用程序的方法,...
8. featureManager – 用于指定启用的服务器功能,比如支持REST API、JPA等。 9. jmsActivationSpec – 配置JMS(Java消息服务)激活规范,用于定义如何接收消息。 10. jpa – 指定JPA(Java持久层API)相关的配置...
《深入剖析profiles-rest-api:基于Django REST框架的REST API实现》 在现代Web开发中,RESTful API已经成为数据交互的重要方式,它以其简洁、灵活的特性被广泛应用。本篇文章将详细探讨`profiles-rest-api`项目,...
休息基地 由 链接: (随时寻求支持) 描述: 构建在之上的Ruby Firebase REST API客户端。 特征: 并发请求 流请求 ... 经过MRI(官方CRuby)和JRuby的测试。... 概要: 查看Firebase的REST API文档以获取完整参考。