SD2.0 REST与面向资源的Web开发 李琨

来源:互联网 发布:python for遍历字符串 编辑:程序博客网 时间:2024/05/01 06:25

SD2.0 REST与面向资源的Web开发 李琨
什么是WEB?
从技术的角度讲,第一是URI,标识资源;第二是HTTP协议,操作资源;第三是HyperText超文本,描述资源状态。
什么是WEB应用?
首先用到上述三大技术,其次运行在internet环境中,而不是局域网、内网环境。
广义的Web应用包含了所有使用上述三大技术的应用;狭义的则单指在浏览器中的应用,与桌面程序对应。
什么是架构风格?
一种架构风格代表了一组运行环境对于架构设计所造成的约束,它就好比是一个类或者一个接口,而具体的架构呢,则是某种架构风格的一个实例。
两个关键字:架构设计,运行环境。这跟设计模式很类似,各个模式都有它适用的场景。

常见的分布式应用架构风格
第一类是分布式对象,包括CORBA、DCOM,REMOTING等
第二类是远程过程调用,简称RPC,比如SOAP、JSON等。
第三类是表述性状态转移,简称REST

什么是REST?
REST是一个缩写,Representitional State Transfer, 中文翻译成为表述性状态转移。REST是一种架构风格,它来自于Roy Fielding博士论文《架构风格与基于网络的软件架构设计》。REST是世界上最成功的架构风格,主要的成功案例就是Web。
可以查看维基粗略了解一下:http://zh.wikipedia.org/zh/REST

REST架构风格有哪些架构约束?
第一个架构约束是客户服务器,通信只能由客户端单方面发起,表现为请求响应的形式。
第二个架构约束是无状态,通信的会话状态全部由客户端负责维护,服务器端负责维护会话状态之外的其他状态。
第三个架构约束缓存,响应内容可以在通信链条某处被缓冲,以改善效率。
第四个统一接口,通信组件之间要有统一接口,以提高交互的可见性,这样的话中间组件对请求语义非常清楚,很方便做一些缓存或者实施安全策略。
第五个架构约束是分层系统,通过限制组件行为,将架构分解为若干等级的层,每一个组件看到与其交互的相邻层。
最后一个架构约束是按需代码,通过下载并执行APPLET或者脚本形式的代码,允许对客户端功能进行扩展。

REST五个关键词
资源
资源的表述
状态转移
统一接口
超文本驱动

什么是资源?
资源是一种看待服务器的方式,将服务器看作由很多的离散的资源组成,这种看待服务器的方式和分布式对象有很明显的分别,分布式对象看作一个对象,每个对象里面有调用的方法,REST看作是很多离散的资源,资源是服务器一个可以命名的抽象的概念,资源是一个抽象的概念,大家可能原来理解的资源仅仅是服务器的文件或者仅仅是一张表,但是资源是抽象的,资源以名词为核心的特征,首先关注的是名词,资源面向对象编程中的接口,暴露给外界的接口,资源由一个或者多个URI标识,URI是资源的名词,也是资源在Web上的地址,允许使用多个URI标识同一资源,对资源感兴趣的客户通过URI与资源交互。

什么是资源表述?
它是一段对于资源在某一个特定时刻的状态描述,资源表述可以在客户和服务器之间转移,资源表述有多种格式,最常见的是HTML/XML/JSON纯文本,资源表述格式可以通过协商机制来确定。通常来说不同方向表述使用的是不同的格式,服务器到客户端,客户端到服务器端表述不一样。

什么是状态转移?
状态转移是讲在客户端和服务器之间转移代表资源状态的表述,通过转移和操作资源的表述来间接实现操作资源的目的,在REST架构风格里面操作资源是一种间接方式进行,是通过操作资源表述间接实现操作资源的目的,但是在分布式对象和IPC里面对于服务器里面暴露出来的对象或者方法是直接的操作。

什么是统一接口?
统一接口是对资源执行各种操作,对每一个资源只能执行一组有限的操作,这个和分布式对象不一样,HTTP定义了操作资源统一接口,包括以下内容,首先是8个标准方法,GET、POST、PUT、DELETE五、HEAD等,后面的四个方法很少用到,基本用前面四个方法。HTTP头信息里面做开发的时候可以自定义新的信息。还有一部分HTTP响应状态代码,在协议里面有很多代码,在开发当中也可以自定义新的代码。统一接口操作的语义必须由HTTP消息体之前的部分完全表达,如果做操作或者消息体之内,不符合统一接口要求,统一要求必须在HTTP消息体之前的部分完全表达。

什么是超文本驱动?(还没搞懂。。。)
超文本驱动首先是将Web应用看作是一个由很多状态所组成的有限状态机,这些状态既包括客户端负责维护,也包括资源状态,整个状态合在一起应用状态,资源之间通过超链接相互关联,超链接既代表资源之间的相互关系,也代表可执行的状态迁移。超媒体不仅仅包含数据,还包含了状态迁移语义。以超媒体作为引擎驱动Web应用的状态迁移,超媒体通过超媒体暴露出服务器所提供的资源,服务器提供哪些资源是客户端通过解析超媒体发现的,而不是实现定义的。

REST架构有哪些主要特征?
1. 可寻址性
REST有很多资源组成,每个资源至少有一个URI,代表了一个地址,所以RESTWeb应用架构可寻址的
2. 无状态性
状态完全由客户端维护
3. 连通性
REST风格的架构必须要保证资源之间连通性,通过超链接相互连接,设计REST架构,其中存在大量孤立资源,彼此之间完全不连通,这种架构设计是非常失败,一定要通过超链接连接起来。
4. 统一接口
统一接口
5. 面向资源
REST架构风格以资源为核心进行设计,首先重要的是如何实现这些资源
6. 超文本驱动
通过超文本来驱动Web应用的迁移

以上的特征合在一起最后达到效果,就是松耦合,REST架构风格总松的,分布式架构是紧的。

关于HTTP的一些误解
1. 认为浏览器只支持GET/POST方法,HTML表单仅仅支持GET/POST方法
可以通过附加参数的方式模拟PUT请求,发送到服务器之后,把这个请求理解为PUT的请求,对于XMLHttpRequest对象支持POST等4种方法。
2. 过度使用GET方法,在后面加上问号,把任何操作都使用GET方法发送
主要有两个缺点,第一个缺点敏感信息位于URL里面不够安全。第二个缺点很容易受到爬虫的伤害,做一个网站爬虫来网站做一个链接。比如做得事情删除服务器端,数据库里面一个用户的数据,这个时候你的网站被爬虫爬过之后,会发现你的数据库里面有很多用户数据没有了。
3. 过度使用POST方法
最典型的是SOAP等RPC风格的调用协议,没有用到其他方法,承担了过多职责,没有充分利用HTTP的优点,没有使用HTTP状态代码,根本没有充分利用HTTP的优点。
4. 误解认为HTTP是RPC风格

原创粉丝点击