




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
REST、超媒体与WebAPI拥抱Web原生的架构设计原则,主讲人:李锟,什么是REST?,什么是REST?,全称RepresentationalStateTransfer(表述性状态移交)由RoyFielding在其2000年的博士论文ArchitecturalStylesandtheDesignofNetwork-basedSoftwareArchitectures(架构风格与基于网络应用软件的架构设计)中提出有两种理解方式REST是一种抽象的架构风格(architecturalstyle)REST是一种为面向互联网的应用软件量身定制的架构风格REST是Web自身的架构风格,是Web取得巨大成功在技术层面的原因和理论基础REST在Web上是普适的,同时适用于Web应用和WebAPIREST是一种分布式应用的架构设计方法,API的分类,进程内调用API调用本地开发库本地进程间调用APILinuxIPCAndroidIPC远程调用API内网API企业内网中的API外网API面向互联网的API外网应用内部API外网公共API,什么是RESTfulAPI?,符合REST架构风格要求的API通常基于HTTP实现将HTTP作为一种应用协议,而不是作为传输协议来使用Fielding在其博士论文的第6章中,明确指出“HTTP不是一种传输协议”SOAP将HTTP作为传输协议来使用,是一种非常低效的用法将HTTP翻译为“超文本传输协议”是中国技术翻译史上的一大误译RESTAPIsmustbehypertext-driven!又称作“使用超媒体作为应用状态的引擎”(HATEOAS),Richardson成熟度模型,Richardson成熟度模型,第0级:没有明确的资源概念,只有一个URL,只使用单个HTTP方法第1级:有明确的资源概念,存在很多URL,只使用单个HTTP方法第2级:有明确的资源概念,存在很多URL,使用HTTP作为操作资源的统一接口通常将对于资源的CRUD式操作分别映射到4个HTTP方法第3级:在满足第2级标准的基础上,使用超媒体作为应用状态的引擎(HATEOAS),什么是WebAPI?,什么是WebAPI?,一种新式的API类型,通常面向互联网主要用来实现外网公共API&外网应用内部API在一些场合也可以用来实现内网API与传统的WebServices完全不同一种新式的API设计方法最大限度利用HTTP协议将HTTP协议当作应用协议,而不是传输协议来使用使用HTTP协议作为操作资源的统一接口可以透明升级到HTTP/2使用超媒体作为应用状态的引擎(HATEOAS)RESTfulAPI的高级形式,WebAPI是最高等级的RESTfulAPI,完全实现了REST架构风格的四个价值主张可伸缩性安全性松耦合简单性主要是针对客户端应用开发者可以统一不同种类API的设计风格,降低了客户端应用开发者的学习和开发成本拥抱Web原生的架构设计原则拥抱REST拥抱超媒体接受失控,而不是企图控制一切,坦然接受不完美,RESTfulAPI只达到第2级有什么问题?,仍然是紧耦合的依赖固定的URL结构依赖固定的调用方式依赖服务描述文档难以做较大改动交互的粒度仍然很小CRUD式服务仅仅适用于简单的业务建模难以实现复杂的业务操作协议不得不将版本号加入到URL以解决升级问题导致了API数量的膨胀,HATEOAS是否是值得追求的?,优势解决了RESTfulAPI仅仅达到第2级存在的所有问题实现了REST架构风格的所有价值主张劣势对于服务器端应用开发人员而言,设计较为复杂在API设计上多花一些时间,在维护上少花很多时间在API设计上少花一些时间,在维护上多花很多时间是否值得,主要取决于对松耦合、大粒度交互的需求强度,可开展ROI分析,设计良好的WebAPI很像是一个网站,WebAPI与Web应用的类比,都使用HTTP协议来与服务器交互都使用超媒体作为资源表述的格式Web应用使用面向人类的超媒体HTML,资源的表述对应Web页面WebAPI使用面向机器的超媒体AtomPub、Odata、HAL、Collection+JSON、Hydra资源的表述对应HTTP响应的body都需要理解超文本的语义Web应用依靠人类阅读超文本的描述文字来理解其语义WebAPI依靠机器解析超文本的语义标记来理解其语义资源的表述之间都应该通过超文本相互链接起来不应该出现完全孤立的资源表述,WebAPI中两种不同范畴的语义,协议语义:protocolaffordances使用HTTP协议如何与超媒体控件交互应该包括在媒体类型中,例如Hydra无需编写人类可读的文档并非特定于某个业务领域可以开发通用的客户端库和测试工具来处理应用语义:applicationaffordances某个超媒体控件的含义是什么,与其交互可以得到什么结果需要编写人类可读的文档,又名profile特定于某个业务领域,应用语义与词汇表,应用语义是由人类可读的profile文档来描述首先应保证人类可读,机器可读不是必须的应用语义的基本组成元素语义描述符词汇表是语义描述符的汇总常用的词汇表:/GoodRelations:http:/www.heppnetz.de/ontologies/goodrelations/v1应尽量选择使用常用词汇表中定义的通用语义描述符:例如在线购物、在线图片库、微博等等,什么是Hydra?,什么是Hydra?,全名Hypermedia-DrivenWebAPIs一套规范和相关的技术,用来简化设计开发支持HATEOAS的WebAPIHydraCoreVocabulary规范:http:/www.hydra-,SpringHATEOAS介绍,http:/projects.spring.io/spring-hateoas/,可参考的开源项目,hydra-java:,WebAPI设计步骤,Amundsen七步设计法1.罗列语义描述符2.画应用状态图3.调整命名4.选择一种媒体类型5.编写profile6.实现7.发布,WebAPI设计步骤,简化过的五步设计法1.罗列语义描述符2.画应用状态图3.调整命名4.实现(基于Hydra)5.发布,画应用状态图的例子,WebAPI中的可变与不可变,可变可以删除已发布的某个资源可以修改资源的URL可以改变资源上可执行的操作(GET/POST/PUT/DELETE)可以改变资源表述的内容不可变已经发布的应用语义和语义描述符应长期保持不变(向后兼容),WebAPI设计最佳实践,分离协议语义和应用语义认真画好应用状态图方框:资源的表述连接线:一次应用状态迁移(一次HTTP调用)连接线上的文字:语义描述符优先使用通用的语义GoodRelations基于某种超媒体类型(例如Hydra)开发通用的客户端库,WebAPI能解决的问题,松耦合不依赖固定的URL结构不依赖固定的调用方式易于改动和升级统一的设计风格降低了客户端应用开发人员的学习成本易于实现通用的客户端库支持更大粒度的交互开发人员不容易混淆远程调用与本地调用会改善用户可感知的性能,WebAPI能解决的问题,支持数据流和管道易于实现分层的缓存,提高了服务器端应用的可伸缩性最好的互操作性基于HTTP协议,几乎所有编程语言都支持易于跨越组织的边界实现API的集成,WebAPI不能解决的问题,不支持有状态的长连接,无法进行双向通信,实时性较差让服务器端应用开发人员早点下班把轻松留给客户端应用开发人员,把困难留给自己佛祖把困难留给客户端应用开发人员,把轻松留给自己人渣设计开发领域模型DDD是设计开发领域模型的利器DDD与WebAPI是互补的关系,可相互支持,WebAPI服务器端开发人员的利益,可以自由添加新的资源表述(联想到为网站添加新的页面),并且把新增资源表述与已有资源表述链接起来,即:定义新的应用状态迁移(资源链接的语义描述符)。可以改变某个已有资源的URL地址。可以为某个已有应用状态迁移(一次HTTP请求)添加新的请求参数。新增参数不是必需的。可以为某个已有应用状态迁移(一次HTTP请求)删除不是必需的请求参数。可以为某个已有应用状态迁移(一次HTTP请求)添加新的响应参数。新增参数不是必需的。可以为某个已有应用状态迁移(一次HTTP请求)删除不是必需的响应参数。可以充分利用各级别的HTTP缓存,改善可伸缩性。,WebAPI客户端开发人员的利益,只需要理解应用的语义(定义在profile文档中),不需要假设某个资源一定存在,URL一定是某种格式。除了入口URL,不再依赖服务器端的固定URL,不必再自己构造URL。可以开发理解HTTP协议语义的通用库来简化客户端开发。提高了健壮性,当服务器端API升级时,只要已经发布的应用语义和应用状态迁移保持不变,客户端应用就不会崩溃。可以自由探索服务器端新增的功能(应用状态迁移),根据服务器端新增功能加强客户端功能。可以实现更大粒度的交互。可以基于统一的风格来调用服务器端API,降低了学习和开发成本。,未来的展望,HydraCoreVocabulary成为正式的Web标准出现更多针对特定领域的词汇表基于Hydra开发通用的客户端库支持Hydra的自动化测试工具WebAPI与微服务的结合WebAPI与DDD的结合,WebAPI名人堂,TimBerners-Lee,RoyT.Fielding,StefanTilkov,WebAPI名人堂,JimWebber,MikeAmundsen,MarkusLanthaler,参考图书资料,REST实战,JimWebber,SavasParastatidis,IanRobinson合著RESTfulWebServicesCookbook中文版,SubbuAllamaraju著RESTfulWebAPIs中文版,LeonardRichardson,MikeAmundsen合著RESTfulWebClients中文版(今
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 下沉市场消费金融产品迭代与创新驱动发展报告
- 2025年挖掘机行业当前市场规模及未来五到十年发展趋势报告
- 个人养老金制度2025年对科技股投资的影响与机遇分析报告
- 个人养老金制度变革对2025年金融市场投资风险控制报告
- 个性化定制美妆服务行业可持续发展战略报告2025
- 2025年重庆特色小镇行业当前市场规模及未来五到十年发展趋势报告
- 2025年冷藏车行业当前发展趋势与投资机遇洞察报告
- 2025年核电行业当前发展现状及增长策略研究报告
- 2025年应急电源(EPS)行业当前竞争格局与未来发展趋势分析报告
- 2025年美妆新零售行业研究报告及未来发展趋势预测
- TXMSSAL 0092-2023 豆奶规范规程
- 刺五加胶囊在冠心病康复期的应用评价
- 车辆油卡充值、加油使用登记表
- 有理数计算试卷
- 文档管理系统方案
- 运用PDCA降低I类切口感染率模板课件
- 特种设备安全管理课件-电梯安全知识
- 车辆转让合同电子版下载可打印
- 深圳填海工程施工实施方案
- BB/T 0023-2017纸护角
- 建设集团有限公司安全生产管理制度汇编
评论
0/150
提交评论