资源预览内容
第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
第9页 / 共58页
第10页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
REST式架构及实践研发中心-集市技术部吕昊REST究竟何物?REST(RepresentationalStateTransfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年RoyThomasFielding的博士论文。一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。基于使用HTTP、URI等现有的广泛流行的协议和标准,并由几个核心抽象概念支撑。对Web的本质回归:一种真实描述Web的方式,不被特定时期的特定应用程序概念歪曲。提供区分良好实践和糟糕实践的途径:判断特定实践是否与Web架构一致。2论文中文摘要堪称Web架构设计领域的“圣经”中文版下载3回顾WebWeb1.0核心组件HTTP(HypertextTransferProtocol):超文本传输协议。一种基于文档的轻量级网络协议,建立在可靠性和扩展性高的TCP/IP协议基础之上。URL(UniformResourceLocator):通用资源定位符,一种文档地址的表示方案,是Web1.0的关键。例:http:/ example.net /user/doc.html 指定协议 定位符,对应域名系统对应大部分文件系统层次结构HTML(HypertextMarkupLanguage):超文本标识语言,一种基于标签的简单文档格式,主要显示静态网页内容。5Web1.0-Web2.0的转变Web1.0的误区:对大多数用户而言,Web不过是一个只读文件仓库!Web2.0颠覆用户错误观念:Web不再是简单的文档仓库!Web是双向的!重新审视Web作为全球信息空间的概念, Web2.0更加丰富的含义:“Web数据”和“平台化的Web”。底层基础设施未变化,真正的区别:使用基础设施的方式。网站就是Web服务,Web作为分布式编程平台具备极大的潜力。6细看HTTP与URIHTTP:信封里的文档HTTP协议的形象理解:信封格式有严格标准,不关心里面内容。客户端服务器响应请求HTTP请求方法方法(method):表示客户端希望服务器如何处理该信封。有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八个方法。路径路径(path):请求链接里主机名后面部分,即信封上的地址。请求报头请求报头(requestheaders):一组起元数据作用的键值对,类似信封上贴的标签信息。HTTP除定义了一套标准报头外,程序也可以自己定义报头。实体主体实体主体(entity-body):也称作文档或表示,即信封里的文档。一般情况下,请求实体主体可为空。9HTTP响应响应代码响应代码(responsecode):通知客户端请求成功或失败,以及如何处理信封里的内容。响应报头响应报头(responseheader):类似请求报头。实体主体实体主体(entity-body):同样是放在信封里的文档,但绝大多数情况它不会为空。10HTTP报头标准报头标准报头Host、 User-Agent、Accept、Allow、Accept-Charset、Accept-Encoding、Accept-Language、Range、If-Modified-Since、If-None-Match、AuthorizationContent-Type、Content-Length、Content-Range、Location、Content-MD5、Content-Location、 Content-Encoding、Content-Language、Accept-Ranges、Expires、Last-Modified、ETag、WWW-AuthenticateDate、Cache-Control非标准报头非标准报头Cookie、Set-Cookie、X-WSSE自定义报头自定义报头不重新发明已存在的报头不将应该放在实体主体里的信息放进报头命名遵循惯例,名称以“X-”开头11HTTP响应代码状态码(3位数字)分类1xx:通知通知仅在与HTTP服务器沟通时使用2xx:成功成功成功收到、理解和接受动作200(“OK”)、201(“Created”)、204(“No Content”)3xx:重定向重定向为完成请求,必须进一步采取措施301(“Moved Permanently”)、303(“See Other”)、304(“Not Modified”)、307(“Temporary Redirect”)4xx:客户端错误客户端错误请求包含错误的语法或不能完成400(“Bad Request”)、401(“Unauthorized”)、403(“Forbidden”)、404(“Not Found”)、405(“Method Not Allowed”)、406(“Not Acceptable”) 、409(“Conflict”)、410(“Gone”)5xx:服务器端错误服务器端错误服务器不能完成明显合理的请求500(“Internal Server Error”)、503(“Service Unavailable”)12HTTP示例13URI=URL+URNURI(UniformResourceIdentifier):通用资源标识符,它被设计充当可用位置和持久名称。URL提供资源定位方法,依赖于命名和位置机制。URN(UniformResourceName)需要是全球惟一的,并且在资源不存在或不再可用时依然保持不变。URI可为定位器、名称,或两者兼具,取决于标识符分配中的持久性和命名机构对其关注程度。不论在哪里都可以对URI作出一致的解释,通常没有必要刻意区分它们。14解析URI语法规则:大致指向一个层次空间,协议是树根,从左往右每部分是前部分的分支。例:http:/ example.net /site/page ? name=张三 # photo方案 域名 路径 查询 片段路径:并非一定要采用层次结构,可根据应用程序模型定制路径结构。例:某标记系统 http:/del.icio.us / john / owl 用户名 标记查询:URI中非层次部分,通常后台数据库应用程序要使用它。片段:用于标示下一级资源,只在客户端有效。浏览器HTML中常对应页面锚点。15URI空间的实现及维护“优秀的URI不会改变”TimBerners-Lee最大限度地延长URI生命周期的保障:1.独立于技术2.层次结构和集合3.末尾的斜杠和位置无关最大限度降低修改URI造成的负面影响:1.永久性重定向资源2.暂时重定向资源3.不应该使用的重定向方法4.服务器端重定向16REST抽象概念与设计原则资源URI规范(RFC 2396)指出:“资源可以是任何有标示的东西”;“并非所有的资源都是通过网络能够获取的”。任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个实物,也可以是一个抽象的概念。通常一个资源是某个可以存放在计算机上并体现为比特流的事物。在Web中,可以这样认为资源是URI标示的东西。18表示资源和表示不是一码事。Web上获取的不是资源,而是资源的表示。对于给定的资源,可以有很多不同的表示。19表示表示表示表示表示表示HTMLXML Flash Text 资源表示表示标识符(URI)状态在客户-服务端模式下,让客户端维护应用状态,并确保服务端向服务器发出的请求都包含理解请求所需的全部信息,而服务器不应该维护该状态。REST式解决方案是使用URI。每个概念上独立的资源都可使用单个URI,不希望通过Cookie或隐藏在有效负载的参数来提供额外信息。例:查看john在某网站2008-10-10的所有文档资料http:/example.net/user/john/2008-10-10/stuff20REST设计准则网络上的所有事物都被抽象为资源每个资源对应一个唯一的资源标识URI通过HTTP协议方法作连接器对资源进行操作对资源的任何操作不改变资源标识URI所有的服务器操作都是无状态的21违背REST的恶果服务端必须维持状态难以对URI进行缓存应用部署难以水平扩展存在安全隐患数据与表象混杂无法准确表达与理解请求含义对不同客户端要分代码处理URI难以持久化暴露技术实现且易变更URI代码方法入侵URI不利于搜索引擎22Web架构的现状相互竞争的Web服务架构REST式面向资源的架构具备Web特征的服务:静态网站、许多未采用SOAP的只读Web服务、许多只读型Web应用等PRC式架构所有采用XML-RPC遗留协议的服务,几乎所有的SOAP服务REST-RPC混合架构大部分Web应用,大量采用MVC模式的Web应用24XML-RPC例子POST /rpc HTTP/1.1.getApp21325SOAP-RPC例子POST search/beta2 HTTP/1.1Host:api.google.comContent-Type:application/soap+xmlSOAPAction: urn:GoogleSearchActionREST26REST-RPC例子GET services/rest?api_key=xxx&method=flickr.photos.search&tags=penguin HTTP/1.1Host:www.flickr.comGET member/corporation/crpHome!ListByUserId.jspa HTTP/1.1Host:member.alisoft.com27差别的形成尽管HTTP是共用的,但在两个问题上的做法不同Q1:客户端如何传递自己的意图到服务端,让它知道请求到底是获取、创建、修改或是删除数据?Q2:服务端如何知晓具体操作那些数据?根源:对Web的理解的不同,实际应当与Web的理念保持一致28方法信息(MethodInfomation)方式一:使用HTTP方法方式二:放到请求URI路径里方式三:放入实体主体或HTTP报头29作用域信息(ScopingInfomation)方式一:放到请求URI路径里方式二:放入实体主体30REST式架构面向资源的架构ROA定义面向资源的架构(Resource-OrientedArchitecture,ROA)一个具体的REST式架构一种把实际问题转换成REST式Web服务的方法32ROA四个概念资源资源的名称(URI)资源的表示资源间的链接33资源举例某软件的1.0.3版某软件的最新版本某天发布到taobao上的第一件商品一张杭州旅游地图QC中某个项目的Bug列表某某公司04季度的营业额大于1024的最小素数某批三鹿奶粉的三聚氰胺含量检验结果陈冠希与张柏芝两人间的关系34URI与资源的关系URI既是资源的名称,也是资源的地址。一个资源必须至少有一个URI,而一个URI只能指示一个资源。任何两个资源不可能是同一个。两个不同的资源在某一时期可能指向同样的数据。同一资源具有多个URIs的虽然能让引用变得更加容易,但坏处是将产生“稀释效应”,客户端无法自动验证它们是指向同一个资源。35资源的表示对于一个本身就是一些数据项的资源,最容易想到的一个表示就是这些数据本身。如HTML格式的网页新闻对于代表实物或其他难以归结为信息的事物,其表示就是关于资源的状态的任何有用信息。如“连上Web的自动饮料机”提供关于实物饮料的数据即使在一个对象的诸多表示中,已经有一个表示包含实际数据了,它也还可以有其他包含元数据的表示。如在线书店为每本书提供该书电子版与评论两种表示表示的选择信息可以放在HTTP报头或URI中。36资源间的链接大多数表示是超媒体(hypermedia)的,它不仅包含数据,还包含指向其它资源的链接。Roy Fielding博士论文中指出:“将超媒体作为应用状态的引擎”。即客户端应用状态在服务器提供的“超媒体”的指引下发生变迁。37ROA四个属性(特征标志)可寻址性(addressability)无状态性(statelessness)连通性(connectedness)统一接口(uniforminterface)38可寻址性资源是通过URI暴露的,URI是可以寻址的。http:/www.google.com/search?q=jellyfish =“浏览器打开google网站,搜索框输入jellyfish,点击搜索”服务器所能提供的每一则有价值的信息都应该作为资源来发布。区别资源的可寻址与应用的可寻址:许多Web应用不是像Web一样可寻址的,尤其是Ajax应用。如Gmail Web服务是可寻址的,不过调用该服务的Gmail Web应用不是可寻址的。39无状态性状态分两种:应用状态(applicationstate)和资源状态(resourcestate)。前者保存在客户端,后者保存在服务端。每个HTTP请求是完全孤立。请求包含服务器实现该请求的全部信息,不依赖于之前某个请求。无状态性意味着服务端不应保存应用状态,客户端应当管理自己的应用状态。40连通性资源的表示“具有链接”的特性即连通性,它要求资源应当通过它们的表示彼此链接起来。HTTP会话的当前状态不是作为资源状态保存在服务器上的,而是被客户端作为应用状态来跟踪的。41统一接口四个常见操作接口:获取资源的一个表示:HTTP GET创建一个新资源:向一个新URI发送HTTP PUT,或向一个已有的URI发送HTTP POST修改已有资源:向已有URI发送HTTP PUT删除已有资源:HTTP DELETE两个辅助操作接口:获取的一个只包含元数据的表示:HTTP HEAD查看一个资源支持那些HTTP方法:HTTP OPTIONS安全性与幂等性:GET和HEAD请求是安全的GET、HEAD、PUT和DELETE请求是幂等的42PUT与POST创建资源创建资源时,PUT与POST的区别:若客户端决定新资源的URI用PUT若服务器决定新资源的URI用POST在一个博客系统中使用PUT与POST的比较:整个博客资源(/weblogs/myweblog)博客里一片文章资源(/weblogs/myweblog/entries/1)43使用PUT与POST比较44向新资源发送PUT请求向已有资源发送PUT请求POST/weblogsN/A(资源已存在)N/A(无效果)创建一个新博客/weblogs/myweblog创建该博客修改该博客的设置往博客里添加一篇文章/weblogs/myweblog/entries/1N/A(客户端不可能预知URI)编辑该博客文章为该博客文章添加评论POST附加资源状态问:一个事件日志服务,只暴露一个日志资源,其URI为/log,那么如何向其中追加日志信息?答:将日志条目看做独立资源,采用POST方法,向其父资源表示添加新数据,达到向已有日志资源添加从属信息的目的。45ROA设计步骤1.规划数据集2.将数据集划分为资源对于每个资源:3.设计URI为资源命名4.暴露一个统一接口的子集5.设计来自客户端的表示6.设计发给客户端的表示7.用超链接和表单把资源与已有资源联系起来8.考虑有哪些典型的事件经过9.考虑可能出现的错误情况46REST式服务框架Restlet轻量级框架RestletREST系统的轻量级解决方案,建立REST概念与Java类之间的映射。不区分客户端与服务端的差异,统用一套APIs。包括Restlet API和Noelios Restlet Engine(NRE)两部分,NRE是对API的一种参考实现。提供Servlet适配器,Restlet应用可部署到Servlet容器,并分发URI请求。隐藏低层信息(原始HTTP报头),简化请求映射。引入Component、Applications和VirtualHosts等概念,便利系统整合、应用部署与测试。48Restlet的层次结构49Restlet系统设计依据ROA(面向资源的架构)设计原则,对资源类和URIs的设计举例社会性书签应用的Restlet架构50部署应用到Servlet容器(1)正常创建Servlet应用,修改Web.xml,用Restlet的适配器接受请求51部署应用到Servlet容器(2)Application的createRoot方法中建立路由,将资源类与URI模板之间建立起清晰而直观的映射关系52部署应用到Servlet容器(3)实现继承自Resource的资源类,在构造方法中依据URI参数决定表示形式,并在表示方法中显示相应的内容53部署应用到Servlet容器(3)54部署应用到Servlet容器(4)默认情况资源只允许获取,如需要修改资源,复写allowPut方法返回true,并实现具体Put方法55作为单独的Java应用运行创建一个主类,建立一个新的HTTP服务器监听端口,并委托所有的请求给指定Restlet应用56Restlet Demo参考PC Server(10.2.224.218)下lab/REST下Eclipse项目57谢谢58
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号