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 条评论
登录 后参与评论

相关文章

来自专栏腾讯移动品质中心TMQ的专栏

腾讯TMQ在线沙龙回顾|Appium:轻松玩转混合自动化测试

活动介绍 TMQ在线沙龙第三十九期分享活动圆满结束啦! 本次分享的主题:Appium-轻松玩转混合自动化测试。 共有184位测试小伙伴报名参加活动。 想知道活动...

2368
来自专栏腾讯Bugly的专栏

《广研Android卡顿监控系统》

实现背景 应用的使用流畅度,是衡量用户体验的重要标准之一。Android 由于机型配置和系统的不同,项目复杂App场景丰富,代码多人参与迭代历史较久,代码可能会...

7234
来自专栏花叔的专栏

解读小程序最新开发能力,官方只说了部分

微信7月11日发布了一大堆小程序新特性,而官方发文只提了其中几个点,今天为大家详细解读一下,主要涵盖以下内容:(注.这不是热更新,这是需要更新微信到1.4.0版...

3337
来自专栏企鹅号快讯

Python爬虫知识点梳理

学任何一门技术,都应该带着目标去学习,目标就像一座灯塔,指引你前进,很多人学着学着就学放弃了,很大部分原因是没有明确目标,所以,在你准备学爬虫前,先问问自己为什...

2207
来自专栏phodal

我的职业是前端工程师【十】客户端存储艺术:数据存储与模型

Web或者移动应用的重心,由后台往前台挪动的两个标志是:客户端存储,客户端模型维护。在可见的未来,我们将会见证后端将不存储数据、由前端负责存储数据的应用。 写过...

17510
来自专栏haifeiWu与他朋友们的专栏

浅谈程序设计

快要毕业了,这里为同学们分享一下我学习编程的过程以及我的一些关于程序设计的理解,希望会对你们今后的学习有所帮助。如果有不同的观点,欢迎评论留言~

772
来自专栏何俊林

斗鱼直播项目(已开源)

推荐一个项目,仿斗鱼直播的,功能强大,可以借鉴学习。 目录结构 开发环境 更新日志 应用截图 下载地址 接口文档说明 项目中使用到的三方库说明 项目反馈 参...

4189
来自专栏Python中文社区

Python 3.6实现单博主微博文本、图片及热评爬取

文章简介 经常刷微博的同学肯定会关注一些有比较意思的博主,看看他们发的文字、图片、视频和底下评论,但时间一长,可能因为各种各样的原因,等你想去翻看某个博主的某...

4606
来自专栏假装我会写代码

基于 Laravel 的用户动态模块开发

1073
来自专栏无原型不设计

你所不知道的快速原型设计技巧

快速原型设计工具,怎么选?当然是要快,要简单,这样回答很正确,但太笼统。具体来讲,交互设置要简单方便,组件的交互和样式要复用高效,方便重复使用,才能算真正的更快...

1146

扫码关注云+社区