微信号:infoqchina

介绍:有内容的技术社区媒体

想学习Web API的话,这份长长的书单会对你很有用

2015-03-12 12:28 邵思华 译


经常有人问我,对于那些有志于学习Web API的设计、实现与维护的同行,有没有什么推荐的书籍?以下的这份清单中所列举的书籍,可以让读者们在最少量的阅读中学习到大量的相关主题。这些书籍也是我在学习API的过程中所发现的,并且其中的许多本还在书架上等我翻阅。书架上的书籍也是我在进行顾问的过程中最常参考的。


我在这里列举了两份读书清单(主要与次要)。第一份清单中的书籍直接对HTTP、API、REST及超媒体等技术的工作方式进行了描述。这份清单当然并不能涵盖描述了这些主题的全部书籍,但它们都是我在工作中最常使用作为参考的一部分。


第二份清单中的书籍虽然并没有直接涉及API的主题,但它们对于我在进行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”的网站是在你日常阅读之外一份非常优秀的资源。我经常会随手翻阅这些资源,并且经常会上他的网站看看有没有什么最新的更新。


结论


感谢各位随我浏览了我的书架中的优秀书籍及我的书签收藏。虽然说还有大量值得分享的其它书籍,但在我看来,这个列表能够成为一个良好的开端。如果你在设计与实现Web API方面有哪些经常用于参考的其它资源,我也很乐意去拜读一下。请你在本文的末尾留言,让我们看看是否能擦出某些火花。


关于作者


Mike Amundsen 是CA / Layer 7科技的首席API架构师。他负责帮助各种企业使用API为客户及企业本身创造商机。他是一位在全球范围内为人所知的行业专家,熟悉分布式网络架构、Web开发、云计算等方面的知识。在过去15年间,他编写了大量的书籍与论文。最新的一本书是(与Leonard Richardson合著)《RESTful Web APIs》。他的另一本著作《使用HTML5及Node创建超媒体API》(2011)作为创建基于超媒体的商业应用的经典书籍,受到广泛赞誉,其内容也经常为人所引用。




如果想要评论本篇文章,想看下其他读者都有什么话想说,欢迎点击“阅读原文”参与讨论。



 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 你并不是一无所有,你还有反心灵鸡汤! Linux 系统结构详解 依赖注入在框架中的应用 Python程序员经常犯的10个错误 十件!设计师最害怕的事