《Rest架构与案例PPT课件》由会员分享,可在线阅读,更多相关《Rest架构与案例PPT课件(45页珍藏版)》请在金锄头文库上搜索。
1、恒生电子股份有限公司 |REST架构与案例分析架构与案例分析恒生电子股份有限公司 |大纲大纲回顾Web的发展HTTP主流Web服务介绍REST抽象概念REST式架构 - ROAREST案例分析REST式服务框架- Restlet恒生电子股份有限公司 |回顾回顾Web的发展的发展HTTP(HypertextTransferProtocol) 超文本传输协议?NO,超文本转移协议!URI/URLWeb1.0静态(只读)仓库Web2.0双向,交互 Web3.0 数据化,服务化,平台化HTMLJavaScript 富客户端(Flex Silverlight) SOAP恒生电子股份有限公司 |HTTP
2、把文档装入信封把文档装入信封客户端服务器响应请求恒生电子股份有限公司 |HTTP请求请求方法方法(method):表示客户端希望服务器如何处理该信封。有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八个方法。路径路径(path):请求链接里主机名后面部分,即信封上的地址。请求报头请求报头(requestheaders):一组起元数据作用的键值对,类似信封上贴的标签信息。HTTP除定义了一套标准报头外,程序也可以自己定义报头。实体主体实体主体(entity-body):也称作文档或表示,即信封里的文档。一般情况下,请求实体主体可为空。恒生电子股份有限公
3、司 |HTTP响应响应响应代码响应代码(responsecode):通知客户端请求成功或失败,以及如何处理信封里的内容。响应报头响应报头(responseheader):类似请求报头。实体主体实体主体(entity-body):同样是放在信封里的文档,但绝大多数情况它不会为空。恒生电子股份有限公司 |HTTP报头报头标准报头标准报头Host User-Agent Accept-Charset Accept-Encoding Accept-Language If-Modified-Since Content-Type Content-Length Content-Encoding Content
4、-Language Accept-Ranges Expires Last-Modified Etag Data WWW-Authenticate Date Cache-Control非标准报头非标准报头Cookie Set-Cookie X-WSSE自定义报头自定义报头不重新发明已存在的报头不将应该放在实体主体里的信息放进报头命名遵循惯例,名称以“X-”开头恒生电子股份有限公司 |HTTP响应代码响应代码状态码(3位数字)分类 1xx:通知通知仅在与HTTP服务器沟通时使用 2xx:成功成功成功收到、理解和接受动作200(“OK”)、201(“Created”)、204(“No Content
5、”) 3xx:重定向重定向为完成请求,必须进一步采取措施301(“Moved Permanently”)、303(“See Other”) 4xx:客户端错误客户端错误请求包含错误的语法或不能完成400(“Bad Request”)、401(“Unauthorized”)、403(“Forbidden”) 404(“Not Found”)、405(“Method Not Allowed”) 5xx:服务器端错误服务器端错误服务器不能完成明显合理的请求 500(“Internal Server Error”)、503(“Service Unavailable”) 恒生电子股份有限公司 |HTTP
6、图示图示恒生电子股份有限公司 |主流主流WEB服务架构服务架构REST式面向资源的架构具备Web特征的服务:静态网站、许多未采用SOAP的只读Web服务、许多只读型Web应用等PRC式架构所有采用XML-RPC遗留协议的服务,几乎所有的SOAP服务REST-RPC混合架构大部分Web应用,大量采用MVC模式的Web应用恒生电子股份有限公司 |REST简介简介REST(Representational State Transfer) 表述性状态转移,一种架构风格不是一个具体的标准或者架构,只是一套设计原则和一种架构风格HTTP是这种架构风格的实现一种真实描述Web的方式,不被特定时期的特定应用程
7、序概念歪曲,是对Web的本质回归提供区分良好实践和糟糕实践的途径:判断特定实践是否与Web架构一致恒生电子股份有限公司 |REST抽象概念抽象概念 资源资源URI规范(RFC 2396):“资源可以是任何有标示的东西”“并非所有的资源都是通过网络能够获取的”任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个实物,也可以是一个抽象的概念。通常一个资源是某个可以存放在计算机上并体现为比特流的事物。在Web中,可以这样认为资源是URI标示的东西。恒生电子股份有限公司 |REST抽象概念抽象概念 表示表示资源和表示不是一码事。Web上获取的不是资源,而是资源的表示。对于给定的
8、资源,可以有很多不同的表示。 资源表示表示HTML表示表示XML 表示表示Text Flash 表示表示标识符(URI)恒生电子股份有限公司 |REST抽象概念抽象概念 状态状态在客户-服务端模式下,让客户端维护应用状态,并确保服务端向服务器发出的请求都包含理解请求所需的全部信息,而服务器不应该维护该状态。REST式解决方案是使用URI。每个概念上独立的资源都可使用单个URI,不希望通过Cookie或隐藏在有效负载的参数来提供额外信息。例:查看john在某网站2008-10-10的所有文档资料http:/恒生电子股份有限公司 |REST架构架构恒生电子股份有限公司 |REST设计准则设计准则网
9、络上的所有事物都被抽象为资源每个资源对应一个唯一的资源标识URI通过HTTP协议方法作连接器对资源进行操作对资源的任何操作不改变资源标识URI所有的服务器操作都是无状态的恒生电子股份有限公司 |违背违背REST的恶果的恶果服务端必须维持状态 难以对URI进行缓存 应用部署难以水平扩展 存在安全隐患数据与表象混杂 无法准确表达与理解请求含义 对不同客户端要分代码处理URI难以持久化 暴露技术实现且易变更URI 代码方法入侵URI恒生电子股份有限公司 |REST式架构式架构 - ROA面向资源的架构(Resource-OrientedArchitecture,ROA)一个具体的REST式架构一种把
10、实际问题转换成REST式Web服务的方法恒生电子股份有限公司 |ROA的四个概念的四个概念资源资源的名称(URI)资源的表示资源间的链接恒生电子股份有限公司 |一些资源的例子一些资源的例子某软件的版一张杭州旅游地图QC中某个项目的Bug列表某某公司04季度的营业额一个风险点或一个风险模型某张报表某个单元格的内容一个流程中的一个节点任务陈老师与女明星的关系等等恒生电子股份有限公司 |URI与资源的关系与资源的关系URI既是资源的名称,也是资源的地址。一个资源必须至少有一个URI,而一个URI只能指示一个资源。任何两个资源不可能是同一个。两个不同的资源在某一时期可能指向同样的数据。同一资源具有多个
11、URIs的虽然能让引用变得更加容易,但坏处是将产生“稀释效应”,客户端无法自动验证它们是指向同一个资源。恒生电子股份有限公司 |资源的表示资源的表示对于一个本身就是一些数据项的资源,最容易想到的一个表示就是这些数据本身。如HTML格式的网页新闻对于代表实物或其他难以归结为信息的事物,其表示就是关于资源的状态的任何有用信息。如“连上Web的自动饮料机”提供关于实物饮料的数据即使在一个对象的诸多表示中,已经有一个表示包含实际数据了,它也还可以有其他包含元数据的表示。如在线书店为每本书提供该书电子版与评论两种表示表示的选择信息可以放在HTTP报头或URI中。恒生电子股份有限公司 |资源间的链接资源间
12、的链接大多数表示是超媒体(hypermedia)的,它不仅包含数据,还包含指向其它资源的链接。Roy Fielding博士论文中指出:“将超媒体作为应用状态的引擎”。即客户端应用状态在服务器提供的“超媒体”的指引下发生变迁。恒生电子股份有限公司 |ROA四个属性(特征标志)四个属性(特征标志)可寻址性(addressability)无状态性(statelessness)连通性(connectedness)统一接口(uniforminterface)恒生电子股份有限公司 |可寻址性可寻址性资源是通过URI暴露的,URI是可以寻址的。http:/=陈老师 “浏览器打开google网站,搜索框输入”
13、陈老师”,点击搜索。服务器所能提供的每一则有价值的信息都应该作为资源来发布。区别资源的可寻址与应用的可寻址:许多Web应用不是像Web一样可寻址的,尤其是Ajax应用。如Gmail Web服务是可寻址的,不过调用该服务的Gmail Web应用不是可寻址的。恒生电子股份有限公司 |无状态性无状态性状态分两种:应用状态(applicationstate)和资源状态(resourcestate)。前者保存在客户端,后者保存在服务端。每个HTTP请求是完全孤立。请求包含服务器实现该请求的全部信息,不依赖于之前某个请求。无状态性意味着服务端不应保存应用状态,客户端应当管理自己的应用状态。恒生电子股份有限
14、公司 |连通性连通性资源的表示“具有链接”的特性即连通性,它要求资源应当通过它们的表示彼此链接起来。HTTP会话的当前状态不是作为资源状态保存在服务器上的,而是被客户端作为应用状态来跟踪的。恒生电子股份有限公司 |统一接口统一接口四个常见操作接口:获取资源的一个表示:HTTP GET创建一个新资源:向一个新URI发送HTTP PUT,或向一个已有的URI发送HTTP POST修改已有资源:向已有URI发送HTTP PUT删除已有资源:HTTP DELETE两个辅助操作接口:获取的一个只包含元数据的表示:HTTP HEAD查看一个资源支持那些HTTP方法:HTTP OPTIONS安全性与幂等性:
15、GET和HEAD请求是安全的GET、HEAD、PUT和DELETE请求是幂等的恒生电子股份有限公司 |PUT与与POST创建资源创建资源创建资源时,PUT与POST的区别:若客户端决定新资源的URI用PUT若服务器决定新资源的URI用POST在一个博客系统中使用PUT与POST的比较:整个博客资源(/weblogs/myweblog)博客里一片文章资源(/weblogs/myweblog/entries/1)恒生电子股份有限公司 |使用使用PUT与与POST比较比较恒生电子股份有限公司 |ROA设计步骤设计步骤1.规划数据集2.将数据集划分为资源 3.设计URI为资源命名 4.暴露一个统一接口
16、的子集 5.设计来自客户端的表示 6.设计发给客户端的表示 7.用超链接和表单把资源与已有资源联系起来 8.考虑有哪些典型的事件经过 9.考虑可能出现的错误情况恒生电子股份有限公司 |肯德基肯德基REST案例案例案例描述 顾客 与 服务员: 光临KFC,排队等候,查看食品列表,点餐,生成订单,付款,在旁等候,下一位。 服务员 与 食品加工师: 接受订单,制作食品,完成后递交食品,下一个订单。 服务员 与 顾客: 交付食品,顾客去享用食物。 恒生电子股份有限公司 |状态机状态机顾客状态机 食品加工师状态机订餐订餐OK支付支付OK食物食物OK选定订单选定订单食物食物OK恒生电子股份有限公司 |看看
17、有哪些食物看看有哪些食物 资源 URI 食物清单(food list) http:/ 请求 Host: Accept:application/xmll 响应 200 OK Content-Type:application/xml 恒生电子股份有限公司 |下订单吧下订单吧 资源 URI 订单(order) http:/ 请求 cocol 响应 201 Created Location: http:/ Content-Type:application/xml coco5.00 恒生电子股份有限公司 |还想要点什么还想要点什么 资源 URI 订单(order/123) http:/ 可选请求 OPT
18、IONS /order/123 HTTP l 可选响应 200 OK Allow: GET, PUTl 请求 PUT /order/123 HTTP 1.1 Expect: 100-Continuel 响应 200 OK 。 409 Conflict 。 使用OPTIONS 也未必能避免竞争 为可选请求 恒生电子股份有限公司 |OK 付款吧付款吧 资源 URI 付款(payment/order/123) http:/ 请求 PUT / payment/order/123 l 响应 201 Created Location: http:/l 意外 400 无法理解 401 认证失败 PUT 幂等
19、性 恒生电子股份有限公司 |食品加工师的工作食品加工师的工作食品加工师轮询获取订单,然后选定一个订单,制作完成,再次轮询。轮询的可伸缩性差,Web的轮询机制如何解决?资源 URL 所有订单(orders) http:/请求 响应 200 OK .l缓存机制 代理 本地 缓存时间恒生电子股份有限公司 |制作食品制作食品 资源 URI 订单(order/123) http:/ 请求 更该状态为处理中 dealingl 响应 201 Createdl 影响 无法提交除GET外的请求 恒生电子股份有限公司 |食品完成食品完成 资源 URI 订单(order/123) http:/ 请求l 响应 200
20、 OK 恒生电子股份有限公司 |结论结论我们可以用Web来描述所有必需的交互。我们可以利用现有的Web模型处理一些简单的意外的事(例如无法修改处理中或已处理完毕的订单),而不必自己发明新的异常或错误处理机制我们所需的一切都是HTTP现成提供的。而且,即便发生了那些不愉快的事,客户端仍然可以向它们的目标迈进。HTTP提供的特性起初看来是无关紧要的。但这个协议现在已经取得广泛的一致、并得到广泛的部署了,而且所有的软件与硬件都能一定程度上理解它。当 我们看到其他分布式计算技术(如WS-*)处于割据状态的格局时,我们意识到了HTTP享有的巨大成功,以及它在系统间集成方面的潜力。恒生电子股份有限公司 |
21、结论结论(续续)甚至在非功能性方面,Web也是有益的。在我们碰到临时故障时,HTTP操作(GET、PUT和DELETE)的幂等性质令我们可以进行安全的重试;内在的缓存机制既屏蔽了故障,又有助于灾难恢复(通过增强的可用率);HTTPS和HTTP认证有助于基本的安全需求。尽管我们的问题域是人为制造的,但我们所强调的技术同样可以应用于分布式计算环境。我们不会伪称Web很简单(除非你是天才),Web可以解决一切问题 (除非你是超级乐观的人,或受到REST信仰的感染),但事实上,在局部、企业级和Internet级进行系统集成,Web是个健壮的框架。恒生电子股份有限公司 |RestletREST系统的轻量级解决方案,建立REST概念与Java类之间的映射。不区分客户端与服务端的差异,统用一套APIs。包括Restlet API和Noelios Restlet Engine(NRE)两部分,NRE是对API的一种参考实现。提供Servlet适配器,Restlet应用可部署到Servlet容器,并分发URI请求。隐藏低层信息(原始HTTP报头),简化请求映射。引入Component、Applications和VirtualHosts等概念,便利系统整合、应用部署与测试。恒生电子股份有限公司 |Restlet层次结构层次结构恒生电子股份有限公司 |Thank you !