论文部分内容阅读
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2009)1010105-01
万维网(World Wide Web)已经改变我们的生活方式,它不仅仅是一个超大的分布式应用它更是一个用于分布式计算的平台。Web服务、mashup(注1)及Aj锨应用都把web作为平台使用,而如今的Web服务却忽视了Web赖以成功的重要性——简单。本文通过用REST思想对已有的Web服务进行重构,thWeb服务回归“Web”理念。
一、REST和面向资源架构
REST(REpresentational State Transfer)表示性状态转移,并不是—种架构,它更像—种评判架构的方法。Roy Fielding(注2)的博士论文很好的诠释了这一点;面向资源架构(Resource-Oriented Architecture)(注3)正是把REST的最佳实践提炼出来,成为一种高层REST式架构。让我们轻易地构建优雅的、符合设计用途的、融/kWeb的分布式应用,而不是仅仅构筑在Web之上的。
二、Web和Web服务
Web的基础技术——HTTP应用协议,是一种基于文档的协议,被用来设计传输记录的。客户端请求GFr/hello.txt,服务器端相应Hello,world!就这么简单。你连接到服务器,把文档路径给它,然后服务器把文档内容返回给你。它被设计的那么简单,简单性转化成强大的能力。
Web服务之间差别的形成,正是它们在两个问题上做法有所不同。第一个问题:客户端如何把自己的意图表达给服务器,称之为方法信息(met hod information)。第二个问题:客户端告诉服务器对哪些数据进行操作,称之为作用域信息(scoping information)。
三、RPC式架构
RPC式Web服务从客户端收到充满数据的信封,然后返回一个充满数据的信封。方法信息和作用域信息都放在信封或者报头里。
XML-RPC是最典型的RPC架构,它只暴露一个URI(端点),并且该URI只支持一种HTTP方法-POST方法。而采用SOAP的web服务也属于RPC式架构,它只不过多了一层信封,这样的大Web服务,使得HTTP成为一种用于传输庞大XML负载的协议,而真正描述信息在XML里,最终使服务变得太过复杂。难于调试。
四、REST式面向资源架构
REST式架构意味,方法信息都放在HTTP方法里面,这是统一接口原则。面向资源架构意味,作用域信息都放在URI里面,这是可寻址性原则。两者结合起来是很强大的,通过HTTP请求的第一行就能基本了解客户端打算做什么。
任何事物,只要有被引用的必要,它就是一个资源(Rosourse),比如一个文档,数据库中的一条记录,或者是运行某个算法的结果。面向对象的标准设计方法是把系统分解一个个名词,一个对象(Object)是(is)某个事物。在面向资源设计中,一个资源(Resource)是(is)某个事物。
如果一个web服务将其数据集有价值的东西作为资源发布出来,那么该应用是具有可寻址性的(addressability)。资源必须至少有一个URI的,这就是资源的地址。URI应具有描述性,给人以直觉上的关联,并且还要具有一定的良好结构,以便客户端能够自己构造URI来访闯他们想访问的资源。对于REST式Wob服务来说,他们暴露的URIs有无数个,而对于RPc式Web服务而言,暴露URI很少(往往只有一个)。可寻址性是Web应用最大的优点,使客户端灵活使用网站。
在REST式web服务里,有两种状态:资源状态和应用状态。资源状态是关于资源的信息,保存在服务器端,而且只能以表式(Representation)的形式发给客户端。应用状态,即关于客户端在应用中所处状态的信息,它被保存在客户端。客户端通过PUT或POST请求里附加一个表示来对资源状态进行处理,而服务器通过在响应客户端的GET请求时附上表示来处理应用状态这正是表示性状态——转移(Representational State Transfer,PEST)这个词的由来。
客户端与资源之间的所有交互,都是通过为数不多的几个HTTP方法进行的。一个资源只暴露一个统一的接口(uniform interface),最多支持6种HTTP方法。统一接口的强大之处,并不在于它所暴露的具体方法,而在于它的统一性一大家用同样的方法来处理所有事物。
统一接口意味着,在面向资源设计中也必须设计为资源。资源与资源之间的关系,也必须用资源来表示,如读者(Reader)订阅(subscribe)一个栏目(Column),读者和栏目都是资源,但订阅这个动作不属于统一接口的方法,必须通过一个叫做订阅(Subscription)对象连代表读者和栏目之间的关系。这种关系对象是符合统一接口的,可以被创建,获取,删除。
五、REST式Web服务构建
下面将介绍构建REST式面向资源架构Web服务的一般性步骤(注4);
1 规划数据集
2 把数据集划分为资源,对于其中每种资源
3 用URI为该资源命名
4,暴露一个统一接口的子集
5 设计来自客户端的表示
6 设计发给客户端的表示
7 用超级链接和表单把该资源与已有资源联系起来
8 考虑事件经过和可能出现的错误
六、总结
至此,REST让我们认识到Web简单的强大之处,Web服务领域就处在一条快速成为超级新秀的道路上。不过,它还没完全迷失方向。对HTTP的再度重视正在兴起,而且在REST的旗号下,HTTP显示出了取代那些大公司试图强加在人们头上的技术的相当实力;REST是一套简单的原则,开发者们可以根据这些原则按贴近web的方式来把应用连接起来。
万维网(World Wide Web)已经改变我们的生活方式,它不仅仅是一个超大的分布式应用它更是一个用于分布式计算的平台。Web服务、mashup(注1)及Aj锨应用都把web作为平台使用,而如今的Web服务却忽视了Web赖以成功的重要性——简单。本文通过用REST思想对已有的Web服务进行重构,thWeb服务回归“Web”理念。
一、REST和面向资源架构
REST(REpresentational State Transfer)表示性状态转移,并不是—种架构,它更像—种评判架构的方法。Roy Fielding(注2)的博士论文很好的诠释了这一点;面向资源架构(Resource-Oriented Architecture)(注3)正是把REST的最佳实践提炼出来,成为一种高层REST式架构。让我们轻易地构建优雅的、符合设计用途的、融/kWeb的分布式应用,而不是仅仅构筑在Web之上的。
二、Web和Web服务
Web的基础技术——HTTP应用协议,是一种基于文档的协议,被用来设计传输记录的。客户端请求GFr/hello.txt,服务器端相应Hello,world!就这么简单。你连接到服务器,把文档路径给它,然后服务器把文档内容返回给你。它被设计的那么简单,简单性转化成强大的能力。
Web服务之间差别的形成,正是它们在两个问题上做法有所不同。第一个问题:客户端如何把自己的意图表达给服务器,称之为方法信息(met hod information)。第二个问题:客户端告诉服务器对哪些数据进行操作,称之为作用域信息(scoping information)。
三、RPC式架构
RPC式Web服务从客户端收到充满数据的信封,然后返回一个充满数据的信封。方法信息和作用域信息都放在信封或者报头里。
XML-RPC是最典型的RPC架构,它只暴露一个URI(端点),并且该URI只支持一种HTTP方法-POST方法。而采用SOAP的web服务也属于RPC式架构,它只不过多了一层信封,这样的大Web服务,使得HTTP成为一种用于传输庞大XML负载的协议,而真正描述信息在XML里,最终使服务变得太过复杂。难于调试。
四、REST式面向资源架构
REST式架构意味,方法信息都放在HTTP方法里面,这是统一接口原则。面向资源架构意味,作用域信息都放在URI里面,这是可寻址性原则。两者结合起来是很强大的,通过HTTP请求的第一行就能基本了解客户端打算做什么。
任何事物,只要有被引用的必要,它就是一个资源(Rosourse),比如一个文档,数据库中的一条记录,或者是运行某个算法的结果。面向对象的标准设计方法是把系统分解一个个名词,一个对象(Object)是(is)某个事物。在面向资源设计中,一个资源(Resource)是(is)某个事物。
如果一个web服务将其数据集有价值的东西作为资源发布出来,那么该应用是具有可寻址性的(addressability)。资源必须至少有一个URI的,这就是资源的地址。URI应具有描述性,给人以直觉上的关联,并且还要具有一定的良好结构,以便客户端能够自己构造URI来访闯他们想访问的资源。对于REST式Wob服务来说,他们暴露的URIs有无数个,而对于RPc式Web服务而言,暴露URI很少(往往只有一个)。可寻址性是Web应用最大的优点,使客户端灵活使用网站。
在REST式web服务里,有两种状态:资源状态和应用状态。资源状态是关于资源的信息,保存在服务器端,而且只能以表式(Representation)的形式发给客户端。应用状态,即关于客户端在应用中所处状态的信息,它被保存在客户端。客户端通过PUT或POST请求里附加一个表示来对资源状态进行处理,而服务器通过在响应客户端的GET请求时附上表示来处理应用状态这正是表示性状态——转移(Representational State Transfer,PEST)这个词的由来。
客户端与资源之间的所有交互,都是通过为数不多的几个HTTP方法进行的。一个资源只暴露一个统一的接口(uniform interface),最多支持6种HTTP方法。统一接口的强大之处,并不在于它所暴露的具体方法,而在于它的统一性一大家用同样的方法来处理所有事物。
统一接口意味着,在面向资源设计中也必须设计为资源。资源与资源之间的关系,也必须用资源来表示,如读者(Reader)订阅(subscribe)一个栏目(Column),读者和栏目都是资源,但订阅这个动作不属于统一接口的方法,必须通过一个叫做订阅(Subscription)对象连代表读者和栏目之间的关系。这种关系对象是符合统一接口的,可以被创建,获取,删除。
五、REST式Web服务构建
下面将介绍构建REST式面向资源架构Web服务的一般性步骤(注4);
1 规划数据集
2 把数据集划分为资源,对于其中每种资源
3 用URI为该资源命名
4,暴露一个统一接口的子集
5 设计来自客户端的表示
6 设计发给客户端的表示
7 用超级链接和表单把该资源与已有资源联系起来
8 考虑事件经过和可能出现的错误
六、总结
至此,REST让我们认识到Web简单的强大之处,Web服务领域就处在一条快速成为超级新秀的道路上。不过,它还没完全迷失方向。对HTTP的再度重视正在兴起,而且在REST的旗号下,HTTP显示出了取代那些大公司试图强加在人们头上的技术的相当实力;REST是一套简单的原则,开发者们可以根据这些原则按贴近web的方式来把应用连接起来。