REST作为一种架构风格,其松耦合性与简洁优雅深深打动了我,2000年出生的互联网Web应用架构REST将会在更长远的日子里大行其道。
-------------------------------------------------------------------------------------------------------------------------------------------------
REST是英文Representational State Transfer的缩写,中文翻译为“表述性状态转移”,他是由Roy Thomas Fielding博士在他的论文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。REST本身只是为分布式超媒体系统设计的一种架构风格,而不是标准。
基于Web的架构,实际上就是各种规范的集合,这些规范共同组成了Web架构。比如Http协议,比如客户端服务器模式,这些都是规范。每当我们在原有规 范的基础上增加新的规范,就会形成新的架构。而REST正是这样一种架构,他结合了一系列的规范,而形成了一种新的基于Web的架构风格。
==========================================================================
主要书籍清单
《RESTful Web Services》(2008),作者Richardson及Ruby
这是一本论述本质性的书籍。这本书籍是属于最早对HTTP API的新增-获取-更新-删除(CRUD)风格进行描述的一批书籍之一,这一风格直到今日依然是在创建“RESTful”风格的API时最常用的方式。本书的编写风格非常优秀、内容也相当出众。尤其令人称道的是,作者Leonard Richardson及出版商O’Reilly Media以Creative Commons许可的方式将本书以多种电子书形式进行免费发布。你绝对应该保留一份以作为参考。
《HTTP开发者参考手册》(HTTP Developer’s Handbook)(2003),作者Chris Shiflet
在我看来,这本书是一本学习HTTP协议、以及使用HTTP进行编程的绝佳的指南及参考。即使在现在,在我遇到一些HTTP的特殊问题及极端情况时,我还是会参考本书的内容。这本书的编写及组织形式都很不错,是我难以割舍的好书。
《RESTful Web Services 参考》(RESTful Web Services Cookbook)(2010),作者Subbu Allamarju
这本书籍中包含了在应对现实世界中所遇到的HTTP API的问题时,一些非常有用且清晰的秘方。书中涵盖了设计URI、加载,以及处理状态码等常见的内容,但我最欣赏的部分是关于支持异步操作、超长查询字符串,以及Allamaraju称为“HTTP控制器”等方面的秘技。我手头上的这本书已经是我所购买的第二本,但现在也已经被我翻得破破烂烂了。
《REST实践》(REST in Practice)(2010),作者Webber、Parastatidis及Robinson
这本书的特色是它对于企业级应用的专注,也是最早介绍如何在商业应用程序中使用超媒体的书籍之一。书中所描述的“REST巴克(RESTBucks)”咖啡店的示例广受好评。书中的示例包含了使用C#及Java进行实现的代码,它不仅对于企业级软件的开发者非常有用,对于有兴趣了解如何从头开始设计一个包含了完整功能的应用的读者来说也具有参考价值。
《使用HTML5及Node创建超媒体API》(Building Hypermedia APIs with HTML5 and Node)(2011),作者Amundsen
我编写此书的目的,是为了探索Fielding定义的REST架构中所提到的某个主题,那就是“超媒体即应用程序状态引擎(HATEOAS)”这部分内容的细节。这本书非常简短,涵盖了一些在XML、JSON及HTML中设计超媒体的示例。读者对我的这本书有许多下面的评价,并且经常会在互联网上、以及客户的内部材料中发现对这本书及其示例的引用。
《REST API设计规则》(REST API Design Rule Book)(2011),作者Mark Masse
这本书在CRUD风格API的设计模式方面是一本很好的书籍。它首先涵盖了一些基础内容,例如对单数、复数及操作进行URI的设计,此外还对HTTP方法、头、状态码等特性的规格说明进行了深入的描述。在我看来,这本书的内容似乎对于Masse自己定义的WRML格式进行了过多的依赖,不过这只是我个人的意见。
《RESTful Web APIs》(2013),作者Richardson及Amundsen
这本书(简称RWA)可以看作同样由Richardson及Ruby所编写的RESTful Web Services (简称RWS)这本著作的“姐妹篇”。只是RWS关注的是HTTP资源,而RWA则更多地关注于超媒体格式。这本书尝试着探索语义化Web这一庞大的主题,包括对一些基于RDF的格式进行了回顾,并且通过对“档案(Profiles)”的介绍,将应用程序级别的意义引入到Web API的范围中。与Leonard Richardson共同编写这本书的经历相当愉快,这本书问世后的反响也非常良好。
次要书籍清单
在我所阅读过的大量书籍中,我发现其中的一部分虽然从技术角度来说“不属于”API、HTTP和REST的范畴,但对于我进行分布式应用的设计及实现依然能够提供很大的帮助。以下这些书籍是我精挑细选过的,希望它们能够将你的视野从一般的API书籍中拓宽到更广阔的世界。
《设计心理学》(The Design of Everyday Things)(1988-2002),作者Donald Norman
这本书最初发布于1988年,它为人机交互(HCI)这一主题打下了基础,即我们所说的可用性。Norman通过大量的示例展现了人类与设备(不仅仅是计算机)进行交互的方式,并且定义了行为生命周期(Action Lifecycle)这一概念,阐明了“可供性(Affordance)”的意义。本书还为读者提供了许多良好的建议,帮助读者进行思考:作为一个设计者,如何基于用户群、设备所使用的环境、以及你所设想的目标,进行用户界面的设计。这本书绝对是你的书架上必不可少的一本。
《寻找确定性》(In Search of Certainty)(2013),作者Mark Burgess
Burgess是CFEngine这项技术的创始人,它能够作为一个第三方的代理对大规模的基础设施进行监控。通过在这项技术上所获得的经验,他为复杂的计算机系统设计了一个免疫模型。这本书记录了他如何从一个简单的想法开始,直到设计出能够成为网络的“代理”的角色的一整套工具。我很喜欢此书的编写风格,以及其中对物理学、脑科学及通用计算科学的大量引用。全书的最后部分对于他自己的产品的描述有些偏多,但这也是可以理解的。毕竟,正是作者在CFEngine上的工作成果,才促成了这本书的出现。这本书能够帮助你思考,如何成功地为网络创建安全的自动化爬虫机器人。
《信息简史》(Information: A History, a Theory, a Flood)(2012),作者James Gleick
Gleick在1987年所出版的著作《混沌》(Chaos)让混沌理论广为人知,而这本书也使信息理论成为大众话题。作者讲故事的本领非常高超,在这本300多页的书中涵盖了大量的内容。无论是远程控制(remote drumming)还是量子计算(quantum computing),Gleick都能够用精彩的故事与实际生活中的见解为你一一讲述。我至今仍然会随手阅读本书的某些章节,仔细体会其中的乐趣。
《信息论简介》(Information : A Very Short Introduction)(2010),作者Luciano Floridi
这本书能够帮助你快速地理解信息论的基础。本书的起始部分为你解释了数据与信息的不同之处,随后介绍了信息论是如何与数学、物理学、生物学、经济学乃至社会伦理学产生联系的。Gleick擅长讲述故事,而Floridi则擅长列举事实,并将各个学科联系在一起。以上这两本书可谓绝配。
《回忆录:超文本的演变》(Memory Machines: The Evolution of Hypertext)(2013),作者Belinda Barnet
如果你希望了解超文本在过去(是的,半个多世纪了)50多年间设计与演变背后的故事,那么就应该读一读这本书。Barnet在本书中收录了她与Ted Nelson、Douglas Englebart、Tim Berners-Lee以及其他多位专家的访谈内容。在本书中,你将大致了解各种相互抵触的思想和市场的力量是如何将超文本/超媒体打造成我们今天所知的模样。同时,你也将了解到关于超文本的使用及实现的许多最初的设想,这些设想直到如今都还没有成为现实。
《复杂》(Complexity: A Guided Tour)(2011),作者Melanie Mitchell
这本书是关于复杂理论方面的书籍中很容易为人接受的一本,Mitchell为读者简单地介绍了一些复杂理论的历史,有关各种设备的遗传编程(genetic programming)理论,以及大型系统的自动机编程(automata programming)概念。书中包含了大量清晰的示例以及可运行的代码。对于任何一位有兴趣深入挖掘这一庞大主题的读者来说,这本书都会成为一本优秀的参考书。
其它资源
这里列举了一些我经常会随手翻阅及参考的论文、博客帖子及其它资源。通常在有人向我索取某些主题的示例、说明及相关背景时,我就会向他们推荐以下链接。
《架构风格与基于网络的软件架构设计》(Architectural Styles and the Design of Network-based Software Architectures)(2000),作者Roy T. Fielding
这是一篇论文的原文,它从面世起就引起了巨大的争论(微笑)。每个进行API相关工作的人都应该认真地读一读这篇文章。文章本身并不长,而且也不难懂,正是这篇文章提出了REST这一术语。通常来说,读过这篇论文的人多数都只读了第五章:“具象状态传输(REST)”。但对我来说,这一章并非论文中最优秀的一部分,我更偏爱第二章:“基于网络的应用程序的架构”,这一章描述了创建分布式系统的理论,以及理想的结果。实际上,我对于阅读这篇论文的建议是:按照二、一、四、三、六的顺序依次读下来,最后才是读第5章。没错,就是要把REST这一章放到最后才读。如果你能按照这种方法来阅读本书,相信你会获得更大的收获。
《REST API必须是由超媒体驱动的》(REST APIs must be hypertext-driven)(2008),作者Roy T. Fielding
这篇著名的博客帖子是与RESTful Web Services一书在同一年间发布的,Fielding在帖子中解释到,在他所定义的REST风格中,超媒体(他在文中使用的名称是超文本)是不可缺少的一环。之后,他又对这篇帖子的内容进行了引申,解释了他对“超媒体即应用程序状态引擎”这一短语的定义。现在人们习惯于将这一短语简称为HATEOAS,而Fielding本人还是倾向于称之为“超媒体的限制”。提示:这篇帖子后的留言,是Fielding在REST这一话题上我所见过最有价值的对话了。
《各种JSON超媒体类型的区别和优劣是什么》(What’s different/better/worse than other JSON hypermedia media types?)(2013),作者Swiber等众人
在2013年年中,在Kevin Swiber所创建的 Siren这个JSON超媒体格式的开源代码库中,有人向他提出了一个很好的问题,即在实现中应当如何选择使用哪种超媒体JSON格式。在这个问题的留言中产生了许多有价值的观点,各种流行格式的作者(HAL的作者Mike Kelly、Siren的作者Kevin Swiber、MASON格式的作者Jorn Wildt,以及作为Collection+JSON作者的我本人)纷纷就此问题发表了观点,在整个帖子中可以看到大量的知识要点。如果你也打算为超媒体选择一种JSON格式,那么这些评论就是十分重要的参考资源。
《超媒体类型》(Hypermedia Types)(2011),作者Amundsen
这是我在2010启动的一系列网络文章,旨在通过对所有的超媒体类型都各自具有的一系列属性进行分析,将它们各自归类。我定义了名为“H-Factors”的一系列元素,以帮助读者学习超媒体是如何在商业应用中发挥作用的,这些元素随后也为一些朋友所引用,用于设计及分析超媒体格式。这一系列目前还没有全部完成,有时当有人向我索取关于超媒体的控制以及实际工作方式的基础资料时,我也会向他们推荐这个链接。
《如何遵从指令》(How to Follow Instructions)(2012),作者Richardson
这是由Leonard Richardson所做的一次精彩的演讲,主题是如何使用超媒体创建能够为计算机所理解的指令,以便让客户端遵照这些指令进行操作。他在演讲中精彩地讲述了自己的观点(其中回忆了昔日的时光,当时HTTP和超链接还没有那么流行,但BBS与文件服务器已经存在了),幻灯片本身也非常优秀。这篇讲座绝对值得你花上50分钟的时间去把它听完。
《设计超媒体API》(Designing Hypermedia APIs)(2012-2014),作者Klabnik
在如何使用超媒体的实现可运行的代码方面,读者们可以从Steve Klabnik那里学到许多接地气的、不讲空话的建议。他从2012年开始启动了这本“不断完善内容的书”以讲述超媒体的相关技术,并且至今还在不断加入新的内容。如果你希望找一本内容完整,从头至尾一气呵成的书,那这份资源或者并不适合你。不过,如果你希望持续关注如何使用超媒体创建及维护系统的相关知识,那么Klabnik的这一名为“设计超媒体API”的网站是在你日常阅读之外一份非常优秀的资源。我经常会随手翻阅这些资源,并且经常会上他的网站看看有没有什么最新的更新。
================================================================================26/06/2015 Fri 15:29 <DIR> .
26/06/2015 Fri 15:29 <DIR> ..26/06/2015 Fri 15:10 140,216,800 REST Web Services 01 - Introduction - YouTube.mp4
26/06/2015 Fri 15:11 123,318,294 REST Web Services 02 - REST and HTTP - YouTube.mp4
26/06/2015 Fri 15:12 151,736,096 REST Web Services 03 - Resource URIs - YouTube.mp4
26/06/2015 Fri 15:12 58,254,965 REST Web Services 04 - Collection URIs - YouTube.mp4
26/06/2015 Fri 15:12 75,115,469 REST Web Services 05 - HTTP Methods - YouTube.mp4
26/06/2015 Fri 15:13 105,584,543 REST Web Services 06 - Method Idempotence - YouTube.mp4
26/06/2015 Fri 15:14 122,137,191 REST Web Services 07 - REST Response - YouTube.mp4
26/06/2015 Fri 15:14 114,954,606 REST Web Services 08 - HATEOAS - YouTube.mp4
26/06/2015 Fri 15:14 70,469,947 REST Web Services 09 - The Richardson Maturity Model - YouTube.mp4
26/06/2015 Fri 15:14 55,557,667 REST Web Services 10 - What Is JAX RS- - YouTube.mp4
26/06/2015 Fri 15:15 57,324,376 REST Web Services 11 - Setting Up - YouTube.mp4
26/06/2015 Fri 15:16 36,331,322 REST Web Services 12 - Understanding the Application Structure - YouTube.mp4
26/06/2015 Fri 15:15 88,112,988 REST Web Services 13 - Creating a Resource - YouTube.mp4
26/06/2015 Fri 15:17 80,755,573 REST Web Services 14 - Returning XML Response - YouTube.mp4
26/06/2015 Fri 15:16 41,677,896 REST Web Services 15 - Installing a REST API client - YouTube.mp4
26/06/2015 Fri 15:16 68,561,895 REST Web Services 16 - Building Service Stubs - YouTube.mp4
26/06/2015 Fri 15:19 110,836,691 REST Web Services 17 - Accessing Path params - YouTube.mp4
26/06/2015 Fri 15:19 41,386,346 REST Web Services 18 - Returning JSON Response - YouTube.mp4
26/06/2015 Fri 15:20 59,794,642 REST Web Services 19 - Implementing POST Method - YouTube.mp4
26/06/2015 Fri 15:21 78,050,973 REST Web Services 20 - Implementing Update and Delete - YouTube.mp4
26/06/2015 Fri 15:21 99,786,090 REST Web Services 21 - Implementing ProfileResource - YouTube.mp4
26/06/2015 Fri 15:21 85,489,424 REST Web Services 22 - Pagination and Filtering - YouTube.mp4
26/06/2015 Fri 15:22 59,592,297 REST Web Services 23 - The Param Annotations - YouTube.mp4
26/06/2015 Fri 15:22 88,363,001 REST Web Services 24 - Using Context and BeanParam annotations - YouTube.mp4
26/06/2015 Fri 15:22 129,588,067 REST Web Services 25 - Implementing Subresources - YouTube.mp4
26/06/2015 Fri 15:24 138,285,816 REST Web Services 26 - Sending Status Codes and Location Headers - YouTube.mp4
26/06/2015 Fri 15:28 137,272,167 REST Web Services 27 - Handling Exceptions - YouTube.mp4
26/06/2015 Fri 15:24 80,135,204 REST Web Services 28 - Using WebApplicationException - YouTube.mp4
26/06/2015 Fri 15:24 76,938,856 REST Web Services 29 - HATEOAS (Part 1) - YouTube.mp4
26/06/2015 Fri 15:29 78,383,638 REST Web Services 30 - HATEOAS (Part 2) - YouTube.mp4
30 个文件 2,654,012,840 字节
2 个目录 16,430,899,200 可用字节
需要的朋友可联系liker.xu@foxmail.com