Rest 实战读书笔记 第一章 :讲web作为建造分布式系统的平台

web取得了非凡的成就,考虑将web架构的基础原理应用到其他的同类分布式系统当中。

web如何能够成为这样成功的应用平台?他的指导原理是什么?建造分布式系统的时候,我们应该如何应用这些原理?我们能够使用哪些技术?为何感到web的设计模型很熟悉,到那时任然与以前的平台有很大的不同?企业开发者面对的挑战,web总是适当的解决方案吗?

全书的目标就是描述如何基于web的架构来建造分布式系统。而HTTP协议则利用了REST的架构原则。

1.WEB的架构


web现在是一个混合了商业,研究,政府,社会以及个人兴趣的混合体,这导致web有多种多样的用户群体。而且,人们更加趋向于使用web来满足自己各种各样的需求。与之相应地,越来越多的网站接入到web当中。

今天的web架构,就是无数的简单的,小规模的交互共同作用造成的。这些交互使用了HTTP和URL技术,在代理和资源之间通信。在这样的架构中,资源URL扮演了主要的角色,并得到了web缓存的支持以获得可伸缩性

可伸缩性:http://www.infoq.com/cn/news/2007/10/whatisscalability  什么是可伸缩性,使用更大的规模以处理更多的用户数量)

    缓存:http://www.infoq.com/cn/caching/

    缓存对可伸缩性的影响为:缓存可以减轻服务器的压力,资源可以在HTTP的中间件比如CDN进行缓存,而不必进入到最终的服务器。这样相当于服务器可以承担更多的并发访问量。


而服务边界可以是这些服务能够使服务隔离的进化,而不会相互影响,因此提供了松耦合。

web中间件是一组广泛部署的就像是日用品一样的服务器。从明显的中间件——包含了资源的web服务器(数据计算等),到隐含的中间件——HTTP代理,缓存,内容分发网络,他们管理者传输流量。这些元素在一起,共同支持行星规模的网路系统的部署,却没有求助于错综复杂的对象模型,或负责的中间件解决方案。

  中间件技术:http://soft.zdnet.com.cn/software_zone/2007/1003/534425.shtml

在这种中间件技术下面,web将重点放在了使用超媒体来移动信息和分享文档。超媒体的本质是提供了一个URL,因此就存在了404的错误。

超媒体:http://course.cug.edu.cn/21cn/%E4%BF%A1%E6%81%AF%E8%B5%84%E6%BA%90%E7%9A%84%E6%A3%80%E7%B4%A2%E4%B8%8E%E5%88%A9%E7%94%A8/chap4/pages/4_2_2_4.htm

总结:web的架构的关键词:资源,URL,缓存,web中间件,超媒体。

一句话,就是,在广泛存在的web中间件基础上,以URL来定位资源,使用超媒体驱动资源跳转的一种架构。并利用了web中间件的缓存能力提供了可伸缩性,利用服务边界来提供松耦合性。


2从资源的角度思考


资源是基于web的系统的基础建造模块,一个资源可以是任何东西,文档,视频,业务过程设置一个设备。从消费者观点看,资源是可以与消费之交互提供服务的任何东西。我们可以通过抽象,讲一些看似不可能的东西放到web上作为一个资源。

2.1资源与标识符

一个URL标识了一个资源,但是一个资源可以有多个URL。


2.2资源表述

一个表示,指的的是某个资源在某个特定时刻的状态的转化形式或者视图。这个试图被编码为一种或多种可转移的格式,例如XHMTL,Atom,XML,JSON,甚至纯文本,都好分割的值(CSV ),MP3或者JPEG。

一句话:资源的表述就是资源的形式。是个网页还是json。

对于真实世界的资源,我们通过抽象将它转化为一个信息资源。

    也许有一天,我们利用3D打印直接打印出来自己想要的东西,那么这个也是个表述吧。

对一个资源的访问,我们其实是得到了资源的一个表述。也就是说URI讲表述和资源分离开来,实现了分离。这种分离,促进了后端系统和消费者应用程序之间的松耦合。它对可伸缩行性也有帮组,因为表述是可以被缓存和复制的。一个资源可以有多种表述,这些表述可以满足不同的需求,不同的表述可以通过web的内容协商(content negotiation)机制在运行时进行转换格式的协商。

web 并没有为资源的表述格式规定任何特定的结构或者格式。这样的话,一台计算机可以理解的格式,也许在另外一天计算机上无法理解。因此可以通过选取一组适当的表述格式,达到在计算机之间交互的目的。(没错是计算机和计算机之间交互,不是人和计算机的交互

资源表述的格式支持了服务消费者的需求。然而,这种消费者的友好型并没有无限延伸至允许消费者来控制资源如何标识,演化,修改以及管理。与之相反,是由服务自身来控制他们的资源,以及资源的状态如何展现给外部世界。这种封装是web的松耦合的一个关键方面。

一句话:资源的表述需要有服务自身来提供和实现,消费者是不能够参与其中的。这种对服务的封装实现服务和需求的解耦。

2.3 表述格式和URI 

资源的表述未必需要通过不同的后缀扩展名(.htm,.xml,.json)来区分,也就是说表述不需要专有的URI。Http本身可以通过Accept请求头来协商内容格式,但是这个不强制,需要资源的服务或者拥有者来决定采用社么格式回复。

2.4 通信的艺术

我们现在有资源,有URI,有表述,我们还需要有所行动,让这一切动起来。这就HTTP method。

统一接口 :少量动词如何与定义良好的且被广泛接受的语义相互结合,来满足大多数分布式应用的需要。动词的结合用来在系统之间进行通信。

HTTP 动词集合: GET POST PUT DELETE OPTIONS HEAD TRACE CONNECT PATCH

这些动词足够组成一个通用的解决方案。

除了动词之外,HTTP还定义了一个响应码集合(200,500,301,302,404,400),来协调有动词的使用所引起的交互。整体来说,动词和状态代码为在网络之上操作资源提供了一个通用的框架。举个例子,重定向(http://blog.csdn.net/newjueqi/article/details/4782602 )。

资源,URL,HTTP动词,就是我们需要与在web之上的资源交互的东西。

3.从web架构到REST架构风格

Roy Fielding在他的博士研究工作中,概括了Web的架构原理,将这些原理表现为一个架构约束的框架,或者称作一种“架构风格”。通过这个框架,Fielding描述了分布式信息系统是如何建造和运作的。他描述了资源之间的相互影响,以及在此类系统中唯一标识符的角色。他也讨论到了使用有限的一组操作和统一的语义来假造一种到处存在的基础架构,能够支持任何类型的应用。Filding将这种架构风格称作“表述性状态转移(REpresssentational stat Transfer ,REST)”。REST 描述了web作为一个分布式超媒体的应用,相互连接的资源通过交换代表资源状态的表述进行通信。

状态或者资源的状态:某一刻的资源 ,从理论上我们访问的资源只是资源当时的一个状态,因为时间在变化。

  注意:web 用户不只是人,也可能是机器,软件 。然后,参考博士论文中的状态论述:http://www.cnblogs.com/timhua/articles/2725942.html 

3.1 超媒体

将超媒体作为应用状态的引擎:

超媒体可以理解为含有超链接的文本,语音,视频,图片等。引擎就是驱动,使变化。那么这句话可以简单的理解为:通过超链接在应用状态之间切换。那么问题来了,啥是应用状态?应用状态是和请求有关的信息数据,或者应用状态就是请求。这句话最终可以解释为:通过超链接跳转页面。

所以这样看起来,web的能力除了存取资源外,还可以在不同的资源之间通过超链接进行跳转。也就是说,一个资源的表述中可以插入另一个资源的URI,进而可以从一个资源导航到另一个资源,好像个寻宝的过程。这也是为啥一上网根本停不下来的原因了,因为该死的链接,根本没有尽头,完全停不下来。

   总结:web的原理:

web 构建的基础是资源,web的交互是通过 资源,URI,资源表述,HTTP动词完成的。

web 资源表述的协商能力,使的可以差别化的提供服务。而服务对此的封装解耦了需求与实现。而公共的表述形式的普及,加速了web的应用普及。

web服务之间的边界使服务之间隔离可以独立演进,web中间件的cacache能力提高了系统的可伸缩性,web的超媒体提供了资源之间的连接导航能力。

  REST 就是充分利用web的这些基础能力进行分布式架构的一种风格。他的核心思想是超媒体驱动。


4.Web作为一个应用平台


尽管web一开始只是信息发布平台,不过它现在已经进化成为了链接分布式应用的手段。web作为一个平台具有这些特点:架构简单,广泛实现和认同的HTTP协议,无所不在的公共表述格式。web不仅仅是一个成功的大规模信息系统,而且可以作为一个平台来支持服务的生态系统。(大平台,小服务

REST 设计Demo:

http://www.easemob.com/docs/rest/  这里环信对自己的资源设计做了介绍,很具有参考价值。

参考:

http://www.infoq.com/cn/articles/understanding-restful-style

http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api

时间: 2025-01-21 18:01:22

Rest 实战读书笔记 第一章 :讲web作为建造分布式系统的平台的相关文章

《Java并发变成实践》读书笔记---第一章 简介

<Java并发编程实战>深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册.书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险.构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁.原子变量.非阻塞算法以及

《深入理解Java虚拟机》读书笔记---第一章 走进Java

一.为什么要读此书 <深入理解Java虚拟机>这本书读了很多次,每次读都会有不一样的感受.首先说一下为什么要读这本书,如果把Java比喻成乾坤大挪移,那了解虚拟机的工作原理就是练习九阳神功,java语言是招式,对虚拟机的认识是内功心法,只有内功心法强大,所使的招式才强大,这就是为什么阳顶天只能把乾坤大挪移练到第四层,而张无忌能练到第七层.由于java虚拟机的强大,把很多功能都隐藏了,例如内容管理,垃圾回收机制等,使得很多java程序猿对这一块的知识所有缺失,编码的时候也是似懂非懂的,以至于遇到

Apache Tomcat 7 读书笔记 - 第一章

Apache Tomcat 简介: 开源框架,下载地址:http://tomcat.apache.org/.可以嵌入独立的web应用,也可作为多个web应用的服务器. 基于Java的web应用服务器容器,能托管Servlet和Java Server Pages(JSP)的web应用.我们常用的J2EE框架,Spring MVC, Structs等,部署到Tomcat上去后,Tomcat会将其自动解析成Serlvet与JSP.在前后端开发完全分离的情况下(后台只提供接口,前端调用),不推荐使用原有

iOS 读书笔记 第一章

1.确定某个实例或类方法是否可用. 1)使用NSObject的类方法instancesRespondToSelector:来确定是否在该类的一个实例中存在一个特定的选择器. NSArray *array = @[@"1",@"2"]; if ([NSArray instancesRespondToSelector:@selector(sortUsingComparator:)]) { //do something use sortUsingComparator: }

[读书笔记]白帽子讲WEB安全-第二章

声明:     读书笔记是我在阅读过程中做的一些笔记,并在其中添加自己的思考.文章中会涉及到部分书籍原文内容,如有侵权,请联系告知并删除.     原文一切版权归本书作者所有,其他思考痕迹保留所有权. ======================================== 第2章 浏览器安全 2.1 同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能. 浏览器的同源策略,限制了来之不同源的"document"或脚本,对当

In-memory Computing with SAP HANA读书笔记 - 第一章:Basic concepts of in-memory

本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第一章Basic concepts of in-memory computing的读书笔记. 作为基础概念,本章非常重要.此Redbook讲得浅显易懂,配图也容易理解.唯一需要深读是DL ACM的那篇论文,后续我会再补充. "卑之,毋甚高论,令今可行也", 本章正符合汉文帝对于张释之的要求. Basic concepts of in-memory computing In-

读书笔记 第一章

通过第一章的学习,我了解到了Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序以及移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Android采用WebKit浏览器引擎,具备触摸屏.高级图形显示和上网功能,用户能够在手机上查看电子邮件.搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台. android的系统架构和其操作系统一样,采用了分层的

《淘宝技术这十年》读书笔记——第一章 第二章

引言 ? ? 这本书的作者是子柳先生,子柳本名赵超,2004年加入淘宝网.历任开发工程师.项目经理.产品经理.测试经理,2009年随着淘宝系统的大规模重构和人才的迅速扩张,创办了"淘宝技术大学",因培养内外部工程师众多,人称"校长". ? ? 之所以读这本书,主要想了解淘宝的技术/业务发展过程中遇到过哪些问题,以及他们怎么解决的.在阅读的过程中有很多不懂的地方,主要是知识面确实涵盖的太广,就当拓展视野吧. ? ? 第一章 ? ? 淘宝架构初版 ? ? 淘宝的第一版源

《算法导论》读书笔记--第一章

第一章 算法在计算中的作用 一.什么是算法?为什么算法值得研究?相对于计算机中使用的其他技术来说算法的作用是什么? 算法就是任何良定义的计算过程,该过程取某个值或者值的集合作为输入并产生某个值或者值的集合作为输出.这样算法就是把输入转换成输出的计算步骤的一个序列. 若对每个输入实例算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题.注意:不正确的算法只要其错误率可控时可能是有用的,但是我们通常只关心正确的算法. 数据结构是一种存储和组织数据的方式,旨在便于访问和修改.