1 / 42

REST与面向资源的Web开发

REST与面向资源的Web开发. 第一讲. 深入理解Web的架构风格. 主讲人: 李锟. 讲座内容. 什么是 Web ? 什么是架构 风格 ? 什么是 REST ? REST 的架构 约束. REST 的五个关键词 REST 风格架构的主要特征 关于 HTTP 的一些误解 关于 REST 的一些误解. 什么是 Web?. 全称World Wide Web(万维网),简称WWW或Web 浏览器?HTML?Ajax?Flash ? iOS ? Android ? 淘宝?支付宝?微博?微信?. 什么是 Web?. Web的四大 技术基石

zona
Download Presentation

REST与面向资源的Web开发

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. REST与面向资源的Web开发 第一讲 深入理解Web的架构风格 主讲人:李锟

  2. 讲座内容 什么是Web? 什么是架构风格? 什么是REST? REST的架构约束 • REST的五个关键词 • REST风格架构的主要特征 • 关于HTTP的一些误解 • 关于REST的一些误解

  3. 什么是Web? 全称World Wide Web(万维网),简称WWW或Web 浏览器?HTML?Ajax?Flash?iOS?Android? 淘宝?支付宝?微博?微信?

  4. 什么是Web? Web的四大技术基石 URI:用来标识资源和访问资源的协议 HTTP:用来对资源执行各种操作 Hypertext:用来描述资源的状态 HTML 带有超链接的XML/JSON MIME:用来区分不同的内容格式

  5. 什么是Web? 定义“Web应用” 使用了上述四大技术 运行在Internet环境中 与“企业应用”相对应 广义的Web应用 包括所有使用了上述四大技术的应用 狭义的Web应用 仅包括运行于浏览器中的应用 与“桌面应用”相对应

  6. 什么是架构风格? Architectural Style(架构风格) 概念来自于建筑学,比架构更为抽象 类比:接口-实现 或 类-实例 是一种研究和评价软件架构设计的方法 软件架构设计必须考虑其运行环境 软件架构不单纯是纸面上绘制的源代码结构 软件架构更重要的是代码在运行时的结构 脱离开运行环境的上下文,无法评价架构的优劣 不存在包治百病的“银弹”式架构

  7. 什么是架构风格? 一种架构风格,是由一组相互协作的架构约束来定义的 架构约束:运行环境施加在架构设计之上的约束

  8. 建筑中的架构风格 拜占庭风格

  9. 建筑中的架构风格 罗曼风格

  10. 建筑中的架构风格 哥特风格

  11. 建筑中的架构风格 巴洛克风格

  12. 建筑中的架构风格 老北京四合院

  13. 建筑中的架构风格 江南民居

  14. 常见的分布式应用架构风格 分布式对象(Distributed Objects,DO) CORBA/RMI/EJB/DCOM/.NET Remoting 远程过程调用(Remote ProcedureCall,RPC) SOAP/XML-RPC/Hessian/Burlap/FlashAMF/DWR 表述性状态转移(Representational State Transfer,REST) HTTP

  15. 什么是REST? Representational State Transfer(表述性状态转移),简称REST 来自Roy Fielding的博士论文:Architectural Styles and the Design of Network-based Software Architectures(《架构风格与基于网络的软件架构设计》) Roy Fielding是何许人 Apache软件基金会的合作创始人、前主席 HTTP、URI等Web基础架构规范的主要设计者 在美国加洲大学欧文分校获得博士学位 Adobe Systems公司首席科学家

  16. 什么是REST? Web自身的架构风格 Web之所以取得成功的技术架构因素总结 REST是世界上最成功的分布式应用架构风格 成功案例:Web 为 运行在Internet环境 的 分布式超媒体系统量身定制 Internet环境的主要特点 可伸缩性无法控制 安全性无法控制

  17. 什么是REST? HTTP/1.1协议等Web规范设计的指导原理 HTTP/1.1协议就是为实现REST风格的架构而设计的 新的Web规范,其设计必须符合REST的要求,否则整个Web体系架构会因为引入严重矛盾而崩溃 所有Web应用都应该遵守的架构设计原理 不是必须遵守的法律条文,是诱导,而非强迫

  18. REST的架构约束 客户-服务器(Client-Server) 通信只能由客户端单方面发起,表现为请求/响应的形式 无状态(Stateless) 通信的会话状态(Session State)全部由客户端负责维护 服务器端负责维护会话状态之外的其他状态,例如资源状态 缓存(Cache) 响应内容可以在通信链的某处被缓存,以改善网络效率

  19. REST的架构约束 统一接口(Uniform Interface) 组件之间通过统一的接口相互通信,以提高交互的可见性 分层系统(Layered System) 通过限制组件的行为(即,每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层 按需代码(Code-On-Demand,可选) 通过下载并执行一些代码(例如Applet、Flash或JavaScript),对客户端的功能进行扩展

  20. REST的五个关键词 资源(Resource) 资源的表述(Representation) 状态转移(State Transfer) 统一接口(Uniform Interface) 超文本驱动(Hypertext Driven) 又名“将超媒体作为应用状态的引擎”(Hypermedia As The Engine Of Application State,HATEOAS) 超媒体 = 超文本 + 媒体内容

  21. 什么是资源? 一种看待服务器的方式,将服务器看作是由很多离散的资源组成 与DO和RPC两种架构风格有明显区别 服务器上一个可命名的抽象概念 资源是抽象的概念 不仅仅能代表服务器上的一个文件、数据库中的一张表等等具体东西 要多抽象有多抽象,只要想象力允许 以名词为核心来组织,首先关注的是名词

  22. 什么是资源? 由一个或多个URI来标识 URI是资源的名称,也是资源在Web上的地址 允许使用多个URI来标识同一资源 对某个资源感兴趣的客户端应用,可通过资源的URI与其交互

  23. 什么是资源的表述? 一段对于资源在某个特定时刻的状态的描述 可以在客户端-服务器端之间转移(交换) 资源的表述可以有多种格式 HTML/XML/JSON/纯文本/图片/声音/视频 资源的表述格式可以通过协商机制来确定 请求-响应方向的表述通常使用不同的格式

  24. 什么是状态转移? 与状态机中的状态迁移(statetransition)含义不同 在客户端和服务器端之间转移(transfer)代表资源状态的表述 通过转移和操作资源的表述,来间接实现操作资源的目的

  25. 什么是统一接口? 通过统一的接口来对资源执行各种操作 对于每个资源只能执行一组有限的操作 HTTP定义了操作资源的统一接口 7个方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS HTTP头信息(可自定义) HTTP响应状态代码(可自定义) 操作的语义必须由HTTP消息体之前的部分完全表达

  26. 什么是超文本驱动? 将Web应用看作是一个由很多状态(应用状态)组成的有限状态机 资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行的状态迁移 超媒体不仅仅包含数据,还包含了状态迁移的语义 可执行哪些状态迁移、状态迁移的语义是什么 与SOAP响应内容中只包含数据不同 以超媒体作为引擎,驱动Web应用的状态迁移

  27. 什么是超文本驱动? 通过超媒体暴露出服务器所提供的资源 服务器提供哪些资源是通过解析超媒体发现的,而不是事先定义的 从面向服务的角度看,超媒体定义了服务器所提供服务的协议 客户端应该依赖的是超媒体的状态迁移语义,而不应该对于是否存在某个URI或URI的某种特殊构造方式作出假设 一切都有可能变化,只有超媒体的状态迁移语义能够长期保持稳定

  28. REST风格架构的主要特征 可寻址(Addressability) 无状态(Statelessness) 连通性(Connectedness) 面向资源(Resource Oriented) 统一接口(Uniform Interface) 超文本驱动(Hypertext Driven)

  29. REST风格架构可带来的利益 简单性 开发、测试 可伸缩性 松耦合

  30. 关于HTTP的一些误解 浏览器只支持GET/POST方法 HTML表单仅支持GET/POST方法,但是可以通过附加参数(例如_method)的方式模拟PUT/DELETE请求 XMLHttpRequest对象可支持GET/POST/PUT/DELETE 4种方法 误用HTTP方法 GET方法:安全的、幂等的 POST方法:不安全的、不幂等的 PUT/DELETE方法:不安全的、幂等的

  31. 关于HTTP的一些误解 过度使用GET方法 敏感信息位于URL中,不够安全 容易受到爬虫的伤害 过度使用POST方法 例子:SOAP等RPC风格的调用协议 一个方法承担了过多的职责 没有充分利用HTTP的优势

  32. 关于HTTP的一些误解 HTTP是一种RPC风格的协议 事实:HTTP其实是一种REST风格的协议 统一接口是REST风格与RPC风格协议的主要区别 REST风格的架构更容易实现大粒度的交互 HTTP是一种“传输”协议(transport protocol) 被错误翻译为“超文本传输协议” 事实:HTTP其实是一种“转移”协议(transfer protocol)。TCP才是传输协议,对传输这件工作已经做的很好了 传输协议和转移协议的区别 传输协议做的是底层搬运比特之类的苦力活,不包含操作的语义 转移协议做的事情比传输协议更高级,包含了操作的语义

  33. 关于HTTP的一些误解 HTTP不具备互操作性 因此需要设计SOAP这种“简单”的复杂协议 事实:充分利用好HTTP,已经能够得到足够好的互操作性,在某些场合甚至比SOAP更好

  34. 关于REST的一些误解 REST只适用于面向机器的Web应用(即,Web服务),不适用于面向人类的Web应用 事实:REST在Web上是普遍适用的 直接使用HTTP的API就是RESTful API 事实:在SOAP与真正的RESTful API之间有广大的中间地带 REST只不过是更漂亮的URI设计 事实:这仅仅是REST的一个外在特征而已

  35. 关于REST的一些误解 统一接口并不重要 超文本驱动并不重要 事实:这两个方面都是REST架构风格的核心特征,没有这两个特征,可以确定肯定是伪装的RESTful API 统一接口只能使用HTTP实现 事实:HTTP仅仅是实现REST架构风格的一种方式 其他符合REST统一接口的例子:扩展了HTTP协议的WebDAV协议

  36. 应用了REST的网站

  37. REST相关图书 《REST实战》 《RESTful Web Services Cookbook》中文版 《RESTful Web Services》中文版 《HTTP权威指南》

  38. REST相关资料 Fielding的博士论文 英文版:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 中文版:http://www.redsaga.com/opendoc/REST_cn.pdf RFC 2616(HTTP/1.1) RFC 2617(HTTP Authentication) RFC 5023(AtomPub) RFC 6749(OAuth2.0)

  39. REST相关资料 WADL http://www.w3.org/Submission/wadl/ JAX-RS 2.0(JSR 339) http://jcp.org/en/jsr/detail?id=339

  40. REST相关资料 深入浅出REST http://www.infoq.com/cn/articles/rest-introduction 解答关于REST的10点疑惑 http://www.infoq.com/cn/articles/tilkov-rest-doubts 面向资源的架构:REST的另一面 http://www.infoq.com/cn/articles/roa-rest-of-rest From SOA to REST http://dret.net/netdret/docs/soa-rest-www2009/ SOA with REST http://www.systems.ethz.ch/education/past-courses/fs09/web-services-and-service-oriented-architectures/slides/SOAwithREST.pdf

  41. 联系方式 REST实战讨论组QQ群:81207617 微博:http://weibo.com/u/2067882737 Email:dlee.cn@gmail.com

  42. Q & A

More Related