有关REST的一点学习笔记
2012-09-10 15:52
363 查看
REST的意思是表征状态转移(Representational State Transfer),它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的服务。其中包括了一下8种方法:
GET: 请求获取指定资源
POST: 向指定资源提交数据
PUT: 请求服务器存储一个资源
HEAD: 获取资源的响应头
DELETE: 请求服务器删除指定资源
TRACE: 回显服务器收到的请求用于诊断调试
CONNECT: 设置连接方式、代理服务器等
OPTIONS: 返回服务器支持的HTTP请求方法
其中常用的几种就是POST/DELETE/PUT/GET,达到增删改查的效果。REST模式的Web应用和服务较SOAP和XML-RPC来说更加简洁明了,但同时也会对安全性提出更高的要求。这里有两个概念:安全,幂等。安全是指没有副作用,连续访问多次所获得的结果不受访问者影响。而幂等指的是重复请求多次与一次请求效果是一样的。在四中常用的操作中,GET是非安全的,其他三个都是安全无副作用的;POST是非幂等的,其他三个都是幂等的。
设计REST的人认为:良好的网络应用表现为一系列的网页,可以看作一个个的虚拟状态机,用户选择这些链接导致下一个网页传输到用户终端呈现给用户,所以REST服务核心思想是状态的改变。
值得提醒的是: REST是设计的风格而不是标准,REST通常基于使用HTTP、URI、XML、HTML这些现有广泛流行的协议和标准。
资源由URI来指定
对资源的操作包括获取、修改、创建和删除
通过操作资源的表现形式来提供服务
资源的表现形式是XML或者HTML取决于读者是机器还是人,是消费Web服务的客户端软件还是浏览器,或者其他什么的
RESTful Web服务也称为RESTful Web API,是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:
URI
Web服务接受与返回的互联网媒体类型,比如Json, XML, YAML等
Web服务在资源上锁支持的一系列请求方法,比如POST, GET, DELETE 和 PUT
说了这么多,到底为什么要用REST这种设计风格呢,好处如下:
可以充分利用缓存cache来提高响应速度
通讯本身的无状态可以让不同的服务器的处理所有类型的请求,提供了服务器的扩展性
浏览器就可以充当客户端,简化软件需求
相对于其他叠加在HTTP协议只上的极致,REST依赖性更小
不需要额外的资源发现机制
在软件技术演进中长期来看具有良好的兼容性
Node JS开发中常用到的一个模块叫Express,它支持REST风格的请求方式。Express对每种HTTP请求都设计了不同的路由绑定函数。包括了:
GET: app.get(path, callback)
POST: app.post(path, callback)
PUT: app.put(path, callback)
DELETE: app.delete(path, callback)
PATCH: app.patch(path, callback) - 新增HTTP方法,功能是定义部分更新某个资源
TRACE: app.trace(path, callback)
CONNECT: app.connect(path, callback)
OPTIONS: app.options(path, callback)
ALL: app.all(path, callback)
笔者觉得REST这种设计风格比较适应当下错综复杂的互联网时代,多样化的用户终端(浏览器、iPad、手机甚至任何软件本身)正好能发挥REST简洁、兼容的巨大优势。同时对于研发团队而言,瞬息万变的需求也非常适用于REST思想,因为它能大大降低研发的复杂性,提高整个系统的伸缩性。“通过URL来设计系统结构”
这句话就是对REST的一种很直白的解释。对研发团队中的测试人员来说,这也是大大提高系统可测性和简化测试门槛的一种手段。试想一下,每一个URL对应一个resource,代表一种表现形式,那么每种表现形式,都可以顺利成章的设计成test case,实施TDD(测试驱动开发)就会变得简单而轻松愉快,因为当系统设计好之后,test case就能很自然地产生,哪怕一个功能都还没有实现。所以笔者认为REST的思想,与TDD其实是不谋而合的,通过抽象URL来设计系统,正如通过test case来设计代码一样!
GET: 请求获取指定资源
POST: 向指定资源提交数据
PUT: 请求服务器存储一个资源
HEAD: 获取资源的响应头
DELETE: 请求服务器删除指定资源
TRACE: 回显服务器收到的请求用于诊断调试
CONNECT: 设置连接方式、代理服务器等
OPTIONS: 返回服务器支持的HTTP请求方法
其中常用的几种就是POST/DELETE/PUT/GET,达到增删改查的效果。REST模式的Web应用和服务较SOAP和XML-RPC来说更加简洁明了,但同时也会对安全性提出更高的要求。这里有两个概念:安全,幂等。安全是指没有副作用,连续访问多次所获得的结果不受访问者影响。而幂等指的是重复请求多次与一次请求效果是一样的。在四中常用的操作中,GET是非安全的,其他三个都是安全无副作用的;POST是非幂等的,其他三个都是幂等的。
设计REST的人认为:良好的网络应用表现为一系列的网页,可以看作一个个的虚拟状态机,用户选择这些链接导致下一个网页传输到用户终端呈现给用户,所以REST服务核心思想是状态的改变。
值得提醒的是: REST是设计的风格而不是标准,REST通常基于使用HTTP、URI、XML、HTML这些现有广泛流行的协议和标准。
资源由URI来指定
对资源的操作包括获取、修改、创建和删除
通过操作资源的表现形式来提供服务
资源的表现形式是XML或者HTML取决于读者是机器还是人,是消费Web服务的客户端软件还是浏览器,或者其他什么的
RESTful Web服务也称为RESTful Web API,是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:
URI
Web服务接受与返回的互联网媒体类型,比如Json, XML, YAML等
Web服务在资源上锁支持的一系列请求方法,比如POST, GET, DELETE 和 PUT
说了这么多,到底为什么要用REST这种设计风格呢,好处如下:
可以充分利用缓存cache来提高响应速度
通讯本身的无状态可以让不同的服务器的处理所有类型的请求,提供了服务器的扩展性
浏览器就可以充当客户端,简化软件需求
相对于其他叠加在HTTP协议只上的极致,REST依赖性更小
不需要额外的资源发现机制
在软件技术演进中长期来看具有良好的兼容性
Node JS开发中常用到的一个模块叫Express,它支持REST风格的请求方式。Express对每种HTTP请求都设计了不同的路由绑定函数。包括了:
GET: app.get(path, callback)
POST: app.post(path, callback)
PUT: app.put(path, callback)
DELETE: app.delete(path, callback)
PATCH: app.patch(path, callback) - 新增HTTP方法,功能是定义部分更新某个资源
TRACE: app.trace(path, callback)
CONNECT: app.connect(path, callback)
OPTIONS: app.options(path, callback)
ALL: app.all(path, callback)
笔者觉得REST这种设计风格比较适应当下错综复杂的互联网时代,多样化的用户终端(浏览器、iPad、手机甚至任何软件本身)正好能发挥REST简洁、兼容的巨大优势。同时对于研发团队而言,瞬息万变的需求也非常适用于REST思想,因为它能大大降低研发的复杂性,提高整个系统的伸缩性。“通过URL来设计系统结构”
这句话就是对REST的一种很直白的解释。对研发团队中的测试人员来说,这也是大大提高系统可测性和简化测试门槛的一种手段。试想一下,每一个URL对应一个resource,代表一种表现形式,那么每种表现形式,都可以顺利成章的设计成test case,实施TDD(测试驱动开发)就会变得简单而轻松愉快,因为当系统设计好之后,test case就能很自然地产生,哪怕一个功能都还没有实现。所以笔者认为REST的思想,与TDD其实是不谋而合的,通过抽象URL来设计系统,正如通过test case来设计代码一样!
相关文章推荐
- 有关REST的一点学习笔记
- 【JavaScript学习笔记】5:有关函数,typeof,参数过多/不足,arguments,rest
- 【爬虫之路】一点有关学习BeautifulSoup的笔记
- 因为工作,暂停away3d的学习。周知。暂时不再更新与away3d有关的学习笔记
- 有关Silverlight GridSplitter组件的研究——Silverlight学习笔记(4)
- Rest API 开发 学习笔记
- 黑马程序员—10—java基础:有关多线程安全的学习笔记和学习心得体会
- .net 有关多态性的学习笔记
- Java Web 学习笔记之九:利用Jetty+restEasy搭建简单的rest web service
- 关于service的一点学习笔记
- PHP学习笔记002——php5.2.6有关fetch_assoc()的bug
- 【ASP.NET MVC 学习笔记】- 19 REST和RESTful Web API
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。
- (转)有关Auto encoder 和Denoising auto encoder分别和PCA之间的关系(学习笔记)
- Rest API 开发 学习笔记
- Python学习笔记:元组(tuple)有关内容
- Rest API 开发 学习笔记
- REST API开发学习笔记
- es6 学习笔记 之 扩展运算符 和 rest运算符
- ArcGIS客户端开发学习笔记(五)——ArcGIS REST API基础