《Rest架构与案例分析》由会员分享,可在线阅读,更多相关《Rest架构与案例分析(45页珍藏版)》请在金锄头文库上搜索。
1、REST架构与案例 分析谢俊恒生电子股份有限公司 |大纲 回顾Web的发展 HTTP 主流Web服务介绍 REST抽象概念 REST式架构 - ROA REST案例分析 REST式服务框架- Restlet恒生电子股份有限公司 |回顾Web的发展 HTTP(Hypertext Transfer Protocol) 超文本传输协议?NO,超文本转移协议! URI / URL Web1.0 静态(只读)仓库Web2.0 双向,交互Web3.0 数据化,服务化,平台化 HTMLJavaScript富客户端(Flex Silverlight)SOAP恒生电子股份有限公司 |HTTP 把文档装入信封客户
2、端服务器响应请求恒生电子股份有限公司 |HTTP请求 方法(method):表示客户端希望服务器如何处理该信 封。有GET、POST、PUT、DELETE、HEAD、 OPTION、TRACE和CONNECT八个方法。 路径(path):请求链接里主机名后面部分,即信封上的 地址。 请求报头(request headers):一组起元数据作用的键值 对,类似信封上贴的标签信息。HTTP除定义了一套 标准报头外,程序也可以自己定义报头。 实体主体(entity-body):也称作文档或表示,即信封里 的文档。一般情况下,请求实体主体可为空。恒生电子股份有限公司 |HTTP响应 响应代码(resp
3、onse code):通知客户端请求成功或失 败,以及如何处理信封里的内容。 响应报头(response header):类似请求报头。 实体主体(entity-body):同样是放在信封里的文档,但 绝大多数情况它不会为空。恒生电子股份有限公司 |HTTP报头 标准报头Host User-Agent Accept-Charset Accept-Encoding Accept -Language If-Modified-Since Content-Type Content- Length Content-Encoding Content-Language Accept- Ranges Expi
4、res 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”)3xx:重定向为完成请求,必须进一步采取措施301(“Moved Permanent
5、ly”)、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图示恒生电子股份有限公司 |主流WEB服务架构 REST式面向资源的架构具备Web特征的服务:静态网站、许多未采用SOAP
6、 的只读Web服务、许多只读型Web应用等 PRC式架构所有采用XML-RPC遗留协议的服务,几乎所有的 SOAP服务 REST-RPC混合架构大部分Web应用,大量采用MVC模式的Web应用恒生电子股份有限公司 |REST简介 REST(Representational State Transfer) 表述性状 态转移,一种架构风格 不是一个具体的标准或者架构,只是一套设计原则和 一种架构风格 HTTP是这种架构风格的实现 一种真实描述Web的方式,不被特定时期的特定应用 程序概念歪曲,是对Web的本质回归 提供区分良好实践和糟糕实践的途径:判断特定实践 是否与Web架构一致恒生电子股份有限
7、公司 |REST抽象概念 资源 URI规范(RFC 2396):“资源可以是任何有标示的东西”“并非所有的资源都是通过网络能够获取的” 任何事物,只要有被引用的必要,就是一个资源 (resource)。它可以是一个实物,也可以是一个抽象 的概念。 通常一个资源是某个可以存放在计算机上并体现为比 特流的事物。在Web中,可以这样认为资源是 URI标示的东西。恒生电子股份有限公司 |REST抽象概念 表示 资源和表示不是一码事。Web上获取的不是资源,而 是资源的表示。 对于给定的资源,可以有很多不同的表示。资源表示HTML表示XML 表示Text Flash 表示标识符(URI)恒生电子股份有限
8、公司 |REST抽象概念 状态 在客户-服务端模式下,让客户端维护应用状态,并 确保服务端向服务器发出的请求都包含理解请求所需 的全部信息,而服务器不应该维护该状态。 REST式解决方案是使用URI。每个概念上独立的资 源都可使用单个URI,不希望通过Cookie或隐藏在有 效负载的参数来提供额外信息。例:查看john在某网站2008-10-10的所有文档资料 http:/ |REST架构恒生电子股份有限公司 |REST设计准则 网络上的所有事物都被抽象为资源 每个资源对应一个唯一的资源标识URI 通过HTTP协议方法作连接器对资源进行操作 对资源的任何操作不改变资源标识URI 所有的服务器操
9、作都是无状态的恒生电子股份有限公司 |违背REST的恶果 服务端必须维持状态难以对URI进行缓存应用部署难以水平扩展存在安全隐患 数据与表象混杂无法准确表达与理解请求含义对不同客户端要分代码处理 URI难以持久化暴露技术实现且易变更URI代码方法入侵URI恒生电子股份有限公司 |REST式架构 - ROA 面向资源的架构(Resource-Oriented Architecture, ROA) 一个具体的REST式架构 一种把实际问题转换成REST式Web服务的方法恒生电子股份有限公司 |ROA的四个概念 资源 资源的名称(URI) 资源的表示 资源间的链接恒生电子股份有限公司 |一些资源的例
10、子 某软件的1.0.3版 一张杭州旅游地图 QC中某个项目的Bug列表 某某公司04季度的营业额 一个风险点或一个风险模型 某张报表某个单元格的内容 一个流程中的一个节点任务 陈老师与女明星的关系 等等恒生电子股份有限公司 |URI与资源的关系 URI既是资源的名称,也是资源的地址。 一个资源必须至少有一个URI,而一个URI只能指示 一个资源。 任何两个资源不可能是同一个。 两个不同的资源在某一时期可能指向同样的数据。 同一资源具有多个URIs的虽然能让引用变得更加容 易,但坏处是将产生“稀释效应”,客户端无法自动验 证它们是指向同一个资源。恒生电子股份有限公司 |资源的表示 对于一个本身就
11、是一些数据项的资源,最容易想到的 一个表示就是这些数据本身。 如HTML格式的网页新闻 对于代表实物或其他难以归结为信息的事物,其表示 就是关于资源的状态的任何有用信息。 如“连上Web的自动饮料机”提供关于实物饮料的数据 即使在一个对象的诸多表示中,已经有一个表示包含 实际数据了,它也还可以有其他包含元数据的表示。 如在线书店为每本书提供该书电子版与评论两种表示 表示的选择信息可以放在HTTP报头或URI中。恒生电子股份有限公司 |资源间的链接 大多数表示是超媒体(hypermedia)的,它不仅包含数 据,还包含指向其它资源的链接。 Roy Fielding博士论文中指出:“将超媒体作为应
12、用状 态的引擎”。即客户端应用状态在服务器提供的“超媒 体”的指引下发生变迁。恒生电子股份有限公司 |ROA四个属性(特征标志) 可寻址性(addressability) 无状态性(statelessness) 连通性(connectedness) 统一接口(uniform interface)恒生电子股份有限公司 |可寻址性 资源是通过URI暴露的,URI是可以寻址的。http:/ “浏览器打开google网站,搜索框输入”陈老师”,点击搜索。 服务器所能提供的每一则有价值的信息都应该作为资 源来发布。 区别资源的可寻址与应用的可寻址:许多Web应用不 是像Web一样可寻址的,尤其是Ajax
13、应用。如Gmail Web服务是可寻址的,不过调用该服务的Gmail Web 应用不是可寻址的。恒生电子股份有限公司 |无状态性 状态分两种:应用状态(application state)和资源状态 (resource state)。前者保存在客户端,后者保存在服 务端。 每个HTTP请求是完全孤立。请求包含服务器实现该 请求的全部信息,不依赖于之前某个请求。 无状态性意味着服务端不应保存应用状态,客户端应 当管理自己的应用状态。恒生电子股份有限公司 |连通性 资源的表示“具有链接”的特性即连通性,它要求资源 应当通过它们的表示彼此链接起来。 HTTP会话的当前状态不是作为资源状态保存在服务
14、器上的,而是被客户端作为应用状态来跟踪的。恒生电子股份有限公司 |统一接口 四个常见操作接口: 获取资源的一个表示:HTTP GET 创建一个新资源:向一个新URI发送HTTP PUT,或向一个已有的 URI发送HTTP POST 修改已有资源:向已有URI发送HTTP PUT 删除已有资源:HTTP DELETE 两个辅助操作接口: 获取的一个只包含元数据的表示:HTTP HEAD 查看一个资源支持那些HTTP方法:HTTP OPTIONS 安全性与幂等性: GET和HEAD请求是安全的 GET、HEAD、PUT和DELETE请求是幂等的恒生电子股份有限公司 |PUT与POST创建资源 创建
15、资源时,PUT与POST的区别: 若客户端决定新资源的URI用PUT 若服务器决定新资源的URI用POST 在一个博客系统中使用PUT与POST的比较:整个博客资源(/weblogs/myweblog)博客里一片文章资源(/weblogs/myweblog/entries/1)恒生电子股份有限公司 |使用PUT与POST比较恒生电子股份有限公司 |ROA设计步骤1.规划数据集2.将数据集划分为资源3.设计URI为资源命名4.暴露一个统一接口的子集5.设计来自客户端的表示6.设计发给客户端的表示7.用超链接和表单把资源与已有资源联系起来8.考虑有哪些典型的事件经过9.考虑可能出现的错误情况恒生电子股份有限公司 |肯德基REST案例 案例描述顾客 与 服务员:光临KFC,排队等候,查看食品列表,点餐,生成 订单,付款,在旁等候,下一位。服务员 与 食品加工师:接受订单,制作食品,完成后递交食品,下一个订 单。服务员 与 顾客:交付食品,顾客去享用食物。恒生电子股份有限公司 |状态机 顾客状态机 食品加工师状态机订餐OK支付OK食物OK选定订单食物OK恒生电子股份有限公司 |看看有哪些食物 资源