Rest Notes-架构上的教训(论文部分完结)

摘要: 从现代Web架构和由REST识别出的问题中,可以总结出很多通用的架构上的教训

正文:

架构上的教训

基于网络的API的优势

将现代Web与其他中间件相区分的是它使用HTTP作为一个基于网络的API,其实并非一向如此,早期的Web设计利用了一个程序库(CERN的libwww)作为所有的客户端和服务器端软件所使用的的单个协议实现库。CERN libwww提供了一个基于库的API来建造可互操作的Web组件

HTTP不是RPC

人们常常错误地将HTTP称为一种远程调用(RPC)机制,仅仅是因为它也包括了请求和响应。

RPC是调用远程机器上的一个过程,在RPC协议中,调用方识别出过程并且传递一组固定的参数,然后等待在使用相同接口返回的一个消息中提供的回答。Java的RMI(远程方法调用)就很类似,差异仅仅是将过程标识为一个对象、方法的组合,而不是一个简单的服务过程。

当然,将HTTP与RPC区分开的并不是上面的语法和特性,其重要的区别是:HTTP是请求被定向到使用一个有标准语义的通用接口的资源,中间组件几乎完全相同的方式来解释这些语义,结果就是使得一个应用能够支持转换的分层和独立于信息来源的间接层,这对于一个满足互联网规模、多个组织、无法控制的可伸缩性需求的信息系统来说是非常有用的;RPC的机制是根据语言的API来定义的,而不是根据基于网络应用的需求来定义的

HTTP不是一种传输协议

HTTP并非被设计为一种传输协议,它是一种移交协议

Web各组件都能理解HTTP语义,从而可以独自的完成HTTP的响应,而不必一定到达最终的源服务器,这也是为什么它是移交不是传输协议的原因

媒体类型的设计

REST有一个对架构风格来说不同寻常的方面,那就是它对于Web架构中数据元素的定义影响程度

  • 应用状态 应用的开发者经常违背的就是应用状态和无状态交互架构约束。将应用状态放错地方而造成架构不匹配并不仅限于上篇文章提到的Cookie,还有HTML中引入的frame,在一个子窗口中选择链接而导致的状态迁移与正常的状态迁移是无法区分的 作者认为frame和cookie的失败之处在于,用户代理无法管理或解释它们所提供的间接应用状态。替代的设计是将这些信息放到一个主要的表述中,并且告知用户代理如何去管理这个存放了指定的资源领域的工作区
  • Java VS JavaScript 通过使用REST,我们能够知道为何一些媒体类型与其他类型相比在Web架构中得到了更加广泛的接受,甚至这些类型并未取得开发者偏爱的情况下(例如Java Applet对抗JavaScript) 作者认为JavaScript在Web上比Java更成功体现在可见的交互性影响较少、复杂性比较小、用户感知的延迟

总结

REST论文的阅读到此结束了,可以看出来REST主要是提供了一套指导原则,可以根据这些原则来识别架构中的缺陷,现代Web是REST架构风格的一个架构实例。在一个理想的世界里,软件系统的实现与它的设计有着精确的匹配,现代Web架构的一些功能确实完全符合它们在REST中的设计标准,例如通过URI标识资源,使用MediaTypes标识数据格式等

REST既贡献了现代Web软件架构背后的基础理论,也为我们上了重要的一课,展示了软件工程原则如何能够被系统地应用在一个真实的软件系统的设计与评估之中

接下来会去阅读网络协议与RestFul API最佳的设计等

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蘑菇先生的技术笔记

给公司部门设计的SOA架构

2196
来自专栏用户2442861的专栏

分布式统一框架的设计与实现(数据库)

我们设计并开发了内容中心统一的分布式开发框架。我们把它取名为albian, albian是基于java的(故以下简称albianj)。他主要是面向海量数据处理...

3151
来自专栏华仔的技术笔记

ios开发小结之重构及随想

2807
来自专栏IMWeb前端团队

测试用例的那一回事

前言 最近,团队对测试用例十分的注重,因此,下面是我对测试用例的一些解析。 首先,我们需要知道:为什么需要测试用例? 理由很简单,就是为了在测试用例的辅助下,编...

21910
来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

1673
来自专栏一个番茄说

移动开发流水线建立以及自动化测试

工业时代流水线的发明将生产任务的效率大大提升。同样,在软件开发过程中流水线的建立也能帮助我们更好的产出、提升效率。

1262
来自专栏Java社区

如何自学Python爬虫技术(文末有福利)

2065
来自专栏互联网高可用架构

如何设计一款多场景分布式发号器(Vesta)

4173
来自专栏CSDN技术头条

高性能智能日志实践

本文作者是 Archanaa Panda ,从 2000 以来一直在软件开发(构架、设计和编程)团队担任 Java / JavaEE 构架师,目前立志于做一个与...

25910
来自专栏北京马哥教育

15个NoSql数据库

随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是...

4138

扫码关注云+社区

领取腾讯云代金券