- 浏览: 7937068 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
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 文档,其中用 <img src=”……” /> 来显示实际的照片。
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,而不是通过浏览器操作的应用程序。
发表评论
-
git学习小结
2017-01-23 20:14 599http://www.liaoxuefeng.com/wiki ... -
国内IT技术大会小结
2012-06-15 12:47 3429搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
国内IT技术大会小结束
2012-06-15 12:44 0搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
国内IT技术大会小结束
2012-06-15 12:42 0搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
神奇的“触觉振动”:谈W3C的震动API
2012-02-17 12:28 2118说起“触觉反馈”,大家可能从字面上并不能理解它是如何工作的。触 ... -
Chrome赶超IE:谷歌为何再度联手火狐
2011-12-27 20:16 2430http://tech.it168.com/a2011/122 ... -
(转10款难看但好用的SEO工具
2011-09-07 06:53 1391人不可貌相,SEO工具也不例外。 SEO专业网站SEOmoz ... -
一个很好的开源CRM项目
2005-01-15 19:56 1629http://www.sugarcrm.com,还有简体中文包 ... -
PHP中得到指定的时间段
2005-01-15 19:59 1946最近在项目中,遇到个比较特殊的要求,比如,MYSQL中,比如今 ... -
给大家推荐一个SQL好的站点
2005-01-15 20:20 1122,给大家推荐一个SQL好的站点 http://sqlteam. ... -
记得打补丁
2005-04-14 19:33 1041之前遇到个很怪的问题: 买了个新硬盘,160G,重新装了VS. ... -
express beta 2版本出来了
2005-04-18 11:30 1047在没下到VS。NET 2005之前,也可以用轻量级的EXPRE ... -
SQL SEVER 2005 CTP APRIL出来了
2005-04-20 20:02 1077http://lab.msdn.microsoft.com/e ... -
ms reporting service sp2 出来了
2005-04-24 08:27 1201SQL Server 2000 Reporting Servi ... -
php5 读书心得(1)
2005-04-25 19:48 1154由于工作中要用到PHP,最近下了本《PHP5 POWER PR ... -
PHP5 心得(2)
2005-04-28 19:41 1182在OOP中,构造函数和析构函数是很重要的,在PHP4中,可 ... -
vs.net 2005 beta 2安装问题
2005-04-28 22:50 1196我之前已经卸载了BETA 1了,但可惜安装后,在新建工程后,还 ... -
PHP5心得3
2005-04-29 20:47 1131今天讲的是parent::和self::两个新的关键字。se ... -
PHP5心得4
2005-05-01 17:11 11561 instanceof操作 该操作中,判断某个类是 ... -
vs 2005中的 Visualizer debugger
2005-05-05 21:01 1144在vs.net 2005 中,增加了可视化的调试器,甚至可以自 ...
相关推荐
本进阶学习资料将带你深入理解Django REST的高级特性,帮助你从初级用户晋升为熟练开发者。 首先,了解REST(Representational State Transfer)的核心概念至关重要。REST是一种网络应用程序的设计风格和开发方式,...
**标题:“Rest服务学习”** 在当今的软件开发领域,REST(Representational State Transfer)服务已经成为构建分布式系统和Web服务的主流方式。RESTful服务基于HTTP协议,它以简洁、可扩展的方式实现了客户端与...
在"spring mvc rest基础学习demo"中,我们将深入探讨如何使用Spring MVC构建RESTful API。 REST(Representational State Transfer,表现层状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以...
【标题】"soap_to_rest_node:将SOAP转换为REST请求的项目"是一个旨在帮助开发者将传统的SOAP...同时,项目中的源代码和测试案例可以作为学习REST和SOAP转换的实例,对于提升开发者在API设计和实现方面的技能大有裨益。
Django-REST-framework教程中文版是一份...此外,教程是基于翻译和作者个人阅读文档的产物,因此在理解上可能存在偏差,读者在学习时应当与官方文档相互印证,并且积极寻找社区资源和讨论来弥补教程可能存在的不足。
学习和理解REST Web Service的基本概念和实践,以及如何使用JAX-RS进行开发,对于构建可扩展、易于维护的Web服务至关重要。通过实际动手编写和运行提供的示例,你可以更好地理解和掌握这些知识。
ArcGIS Server REST API离线文档是开发者的重要参考资料,尤其在没有网络连接的情况下,可以方便地查阅和学习API的详细信息,提高开发效率。 总结,ArcGIS Server REST API是GIS开发的核心工具之一,理解并熟练...
在本项目中,"django3.0+rest framework + Vue 生鲜学习素材.zip" 提供了一个结合了 Django 3.0、Django REST Framework 和 Vue.js 的生鲜电商项目的前端学习资源。这个项目旨在帮助开发者了解如何构建一个完整的...
在IT领域,Kettle是一款强大的数据...通过学习和实践这个例子,你不仅可以掌握Kettle的基本操作,还能深入理解如何在数据集成中利用RESTful API处理地理位置信息,这对于现代数据分析和数据集成工作是非常有价值的。
Spring Data REST Angular 示例项目是一个整合了Java ...通过学习和实践这个Spring Data REST Angular示例项目,开发者可以掌握前后端分离的开发模式,理解如何利用Spring Boot和Angular构建高性能的现代Web应用。
这些示例通常包含了完整的HTTP请求构造、认证过程、错误处理等细节,是学习和实践Artifactory REST API的宝贵资源。 总的来说,“Artifactory REST Examples”是掌握Artifactory操作的关键,通过实际的代码示例,...
通过以上知识点的学习和实践,你将能够使用C#和ASP.NET Core构建出高效、可靠的RESTful Web服务。在实际项目中,还需要考虑性能优化、负载均衡、日志记录等其他方面,以确保服务的稳定性和扩展性。
【标题】:MyEclipse REST Web Service 简单实现案例 在当今互联网技术日新月异的时代,REST(Representational State Transfer)架构风格已成为构建Web服务的重要方式,...读者可以结合这两个文件进一步学习和实践。
Django REST Framework(简称DRF)是用于...通过深入学习和实践其官方文档,开发者可以掌握构建Web API的全部流程,从而提升开发效率和API质量。在实际工作中,不断交流和分享经验,可以更好地利用DRF解决具体问题。
Django REST Framework(DRF)是基于Python的Django Web框架的一个强大扩展,专为构建Web API而设计。本讲义全面涵盖了这个框架的核心概念、功能以及最佳实践,旨在帮助开发者快速掌握如何利用DRF创建高效、可维护的...
REST接口测试是软件开发中的...通过学习和理解这部分代码,开发者可以更好地理解和测试RESTful服务,确保它们按照预期工作并返回正确的JSON数据。同时,这也是一种提升测试自动化水平的方式,提高开发效率和代码质量。
这个压缩包文件“Java_学习如何使用Spring Data REST使用基于REST的超媒体数据持久化.zip”包含了关于如何利用Spring Data REST来实现基于REST的服务以及数据持久化的教程资料。以下是关于这个主题的详细知识讲解。 ...
通过分析这个源代码,你可以学习到如何在实际项目中构建RESTful API,包括控制器设计、数据绑定、异常处理以及测试方法。这将有助于你理解SpringMVC如何与RESTful架构结合,提升Web服务的开发能力。
Spring MVC 是一个强大的Java Web开发框架,用于构建RESTful(Representational State Transfer)服务。REST是一种软件架构风格,常用于创建高效...通过学习和实践这个例子,你可以更好地理解和掌握RESTful服务的开发。
REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,主要用于Web服务的设计和开发。...REST开发框架是实现RESTful API...通过学习和实践这些知识点,开发者能够构建高效、可维护的RESTful服务。