新書推薦:
《
诛吕:“诸吕之乱”的真相与吕太后时期的权力结构
》
售價:NT$
454.0
《
炙野(全2册)
》
售價:NT$
356.0
《
女人的胜利
》
售價:NT$
254.0
《
数据有道:数据分析+图论与网络+微课+Python编程(鸢尾花数学大系:从加减乘除到机器学习)
》
售價:NT$
1214.0
《
500万次倾听:陪伤心的人聊聊
》
售價:NT$
245.0
《
英国商业500年(见证大国崛起与企业兴衰,启迪未来商业智慧。)
》
售價:NT$
367.0
《
万千心理·儿童心理治疗中的心智化:临床实践指导
》
售價:NT$
398.0
《
自我囚禁的人:完美主义的心理成因与自我松绑(破除你对完美主义的迷思,尝试打破自我评价过低与焦虑的恶性循环)
》
售價:NT$
301.0
|
內容簡介: |
《使用HTML5和Node构建超媒体API》探讨了超媒体API的设计,介绍了作为超媒体API的构件块的超媒体因子,并讲解了基本格式、状态转移、领域风格和应用流程这4种超媒体设计元素;之后作者结合具体的场景,通过3个动手实验章节,从超媒体因子和超媒体设计元素入手,用实际的代码向我们详细地演示了超媒体API的设计;最后介绍了超媒体设计的文档编写、注册与发布等内容。
《使用HTML5和Node构建超媒体API》适合系统架构师和Web开发者阅读。
|
目錄:
|
序
前言
第1章 理解超媒体
HTTP、MIME和超媒体
HTTP是传输协议
MIME是媒体类型标准
超媒体是引擎
使用超媒体APIs 编写Web 应用
类型封送困局
超媒体解决方案
识别超媒体:超媒体因子(H-Factors)
链接因子
控制因子
超媒体设计元素
基本格式
状态转移
领域风格
应用流程
总结
后续内容
第2章 XML超媒体
场景
设计Maze XML媒体类型
识别状态转移
选择基本设计元素
Maze+XML文档
示例数据
服务器代码
集合状态响应
单项状态响应
格子状态响应
退出状态响应
客户端代码
迷宫游戏示例
迷宫机器人示例
总结
第3章 JSON超媒体
场景
设计Collection+JSON媒体类型
识别状态转移
选择基本设计元素
Collection+JSON文档
任务应用语义
数据模型
写入模板
预定义查询
示例数据
任务文档
设计文档
服务器代码
集合状态响应
条目状态响应
查询状态表示
处理模板写入
客户端代码
单页界面任务示例
任务命令行示例
总结
第4章 HTML5超媒体
场景
设计Microblog媒体类型
使用HTML5表达应用领域语义
识别状态转移
选择基本设计元素
Microblog应用语义配置
示例数据
用户文档
消息文档
关注文档
设计文档
服务器代码
验证用户
注册新用户
消息响应
用户响应
客户端代码
POSH客户端
Ajax风格的QuoteBot客户端
总结
第5章 为超媒体设计编写文档
要求、遵从性与RFC 2119
RFC 2119关键词
使用RFC 2119关键词编写的示例文档
定义遵从性
为媒体类型设计编写文档
一般布局安排
为XML设计编写文档
为JSON设计编写文档
为HTML设计编写文档
为应用领域特定信息编写文档
发布媒体类型设计
媒体类型的扩展与版本控制
扩展
版本化
注册媒体类型与链接关系
媒体类型
链接关系类型
设计与实现技巧
Joshua Bloch总结的良好的API所具有的特征
Roy Fielding的超文本API准则
Jon Postel的健壮性原则
其他考虑
后记
附录A 参考文献
附录B 补充阅读
附录C Maze+XML 媒体类型
附录D Collection+JSON 媒体类型
附录E 微博HTML语义配置
附录F IANA媒体类型注册文档
附录G IETF链接关系互联网草案
附录H 本书所用源代码、软件及其安装说明
|
內容試閱:
|
当你启程前往伊萨卡,
但愿你的道路漫长,
充满奇迹,充满发现。
——Constantine P. Cavafy
超媒体API 设计
本书主要关注的是超媒体API 的设计。有些读者可能会感觉有点奇怪,编程语言、数据存储系统和Web 框架等方面的书已经有很多了,而本书并非其中之一。相反,本书要介绍的是在客户端和服务器之间所传递消息的本质,以及如何改进这些消息的内容与价值。就我个人而言,这是一个令人兴奋和迷人的领域。
在撰写本书时,坊间似乎有一种趋势,那就是Web 开发中对API 的依赖在不断增长。总体而言,这是好事。它意味着越来越多的开发者开始理解这一观念,即万维网不仅适合分享数据,还适合分享服务。而分享服务正是万维网早期拥护者的目标之一。
然而,我认为Web API 的爆炸式增长有可能将我们带入歧途。以我过去几年的经验,很多实现依赖的是桌面和局域网模式下的API 概念,在万维网上不能很好地伸缩,解决方案仍然存在脆弱性。随着时间的发展,这种脆弱性会给我们带来代价高昂且令人沮丧的维护问题。简而言之,我发现在面向Web 的API 产品中超媒体因素还不够多。
本书试图改变这种状况,使进入万维网的新API 更容易使用和维护。有些人负责超媒体链接价值的发现、HTTP 的编纂以及HTML、AtomAtomPub 等今天仍在推动Web 增长的原生超媒体格式的实现,我们将从他们之中寻得启示。
目标读者
本书的主要目标是提高Web 上使用的超媒体内容的数量与质量。为了实现这一目标,本书面向的读者可以分为两类。
首先,本书可以作为系统架构师指南。有些系统设计人员需要依赖超媒体来改进其实现在长期范围内的可进化性和稳定性,希望本书对他们来说是有价值的。如果将超媒体看作系统架构不可分割的一部分,它能给架构师带来无限可能。本书希望能够通过将超媒体作为一个关键的架构组件(而不只是一个由客户端和服务器摆布的有效载荷)来说明这一点。利用超媒体,架构师能够增加其系统未来的稳定性和灵活性。
其次,负责实现客户端与服务器的读者,也能在本书中找到有关如何处理超媒体消息本身的有价值的建议和例子。到目前为止,涉及Web 实现的大部分书籍关注的往往是服务器在超媒体处理中的作用。在笔者看来,这种疏忽常常导致客户端实现不正确,错误的实现会忽视甚至常常会否定Web 上超媒体消息的价值。作为架构支柱,超媒体的主要价值之一就是它鼓励客户端“为媒体类型编码”,而不是将消息看作简单的数据来编写应用。
编写能够感知超媒体的客户端,这种技巧需要花时间掌握。尽管本书不仅仅关注超媒体客户端的编写,笔者仍然希望提供足够多的例子,并且充分说明其优势,以激励其他更有才华的人在直接利用超媒体方面建立新的实践方法和技术。
没有覆盖的内容
尽管书中的例子使用了HTML5、Node.js 和CouchDB,但不应该使用本书来学习这些技术。聪明的读者可能会发现,笔者对这些技术的使用有点僵硬,甚至有可能违背其设计理念。笔者从未宣称自己是这些技术方面的权威。恰恰相反,在本书中它们只是用来说明超媒体的设计与实现的工具。关于这几种技术,附录列出了一些本书编写过程中用过的不错的书,它们更权威,建议读者参考。
本书没有详细介绍HTTP 及相关Web 标准。这方面有价值的作品很多,附录也提到了我在准备编写本书时用到的重要RFC 及其他标准文档。附录还推荐了一些值得读者花时间阅读并熟悉的书籍。
最后,尽管本书偶尔会提及表述性状态转移(Representation State Transfer,REST)这种架构风格,但是并没有加以探讨。的确,REST 将超媒体当做该风格的一个重要方面,反之却不成立。随着人们日益重视超媒体设计,很多分布式网络架构风格的质量和功能都会随之改进,REST 只是其中之一。如果想了解有关Fielding 的REST 风格的更多信息,读者可以参考附录中有用的建议。
本书内容
在章节安排上,本书允许读者直接跳到他们感兴趣的地方阅读,没有必要按顺序从头到尾阅读。章节内有很多链接,指出了读者在跳读时可能会错过的相关材料。希望这种格式也能使本书更适合用作参考手册,读者以后可以参考。
本书总体组织如下所述。
第1 章:理解超媒体
这一章是一个概念性章节。我们会介绍超媒体、HTTP 和HTML 的一些历史背景,然后确立本书的基本前提,其中包括引入更多超媒体因素的理由,分析现有的超媒体内容并提供一个创建新的超媒体设计的建议方法。
第2 章、第3 章和第4 章:实现
中间这几章包含几个完整的全功能超媒体的例子,意在引导读者完成超媒体设计过程。设计过程包括评估应用场景、选择设计元素、创建示例数据及实现满足用例需求的完整的服务器和客户端方案等步骤。尽管这些例子相对简单,却仍然传达了读者在创建实际的产品级方案时有望遇到的大部分细节信息。
第5 章:为超媒体编写文档
这是一个总务性章节。我们将提供一些建议,指导读者如何为超媒体设计编写文档,以及如何使用如IANA、IEFT 和WC3 的标准方式来注册超媒体设计。这一章有一节会介绍版本化和扩展超媒体类型的概念,还会就良好的API 与超媒体设计提供一些一般性建议。
附录
本书包含了一些附录,其中列出了本书所引用和参考的材料,以及不适合放入正文中的附加内容。在读完本书的正文部分之后,附录部分的信息对于读者进一步参考可能是有价值的。
本书的编码风格
本书之所以选择Node.js 和CouchDB,一个原因是这些产品从设计之初就能感知HTTP。也就是说,使用现有的HTTP,在像万维网这样的无状态环境中,软件可以很好地工作。因此,在我使用Node 和CouchDB 创建的组件与这些组件所用的通信协议之间几乎没什么摩擦。
此外还有一个优点,这些软件系统使用了相同的前端脚本语言,即Javascript。尽管并非所有的读者都精通Javascript,但幸运的是,单一的语言形式可以减少我们在客户端代码、服务器代码和数据存储实现之间的思维转换。
尽管如此,软件并非本书的重点,它只不过是超媒体消息的媒介,这一点非常重要。读者可能会发现,很多例子中的代码太过简单,或者太过脆弱,很难应用于生产环境中。这是一个权宜之计。我最想说明的是超媒体的细节,而不是实现设计所用的代码。不管面向哪种平台,使用哪种语言,或运行在哪种操作系统上,这些设计都能很好地工作。我猜很多读者可以使用自己熟悉的语言和平台找到实现这些媒体类型设计的更好的方法,那样再好不过了。
本书的习惯
以下列出了本书中一些格式的习惯用法:
斜体(Italic)
指示新术语、UTL、E-mail 地址、文件名和文件扩展名。
等宽字体(Constant width)
用来显示程序列表,包括段落中提到的程序内容,例如变量或者函数名、数据库、
数据类型、环境变量、语句或关键词。
等宽黑体(Constant width bold)
表示代码或其他需要读者逐字理解的内容。
等宽斜体(Constant width italic)
表示文中需要读者在使用的时候用其他内容代替的部分。
这个标志表示忠告、建议或一般说明。
这个标志表示警告或注意。
使用代码样例
本书是为了帮助用户提供解决方案。总的来说,用户可以直接在程序或者文档中使用本书提供的代码,无须与我们联系获得许可,除非用户复制大量的程序。例如,用户想利用本书中的一些代码编写程序不需要得到许可,不过如果是想将O''Reilly 书中的代码例子用于出售或复制光盘就必须获得许可。可以引用本书的内容或者代码样例来解决其他问题,但是在自己的产品文档中使用本书的重要代码样例需要事先得到许可。
我们不要求用户标注本书的出处,但感激您的注释。注释通常包括标题、作者、出版社以及ISBN 序列号。例如:“Building Hypermedia APIs with HTML5 and Node by Mike Amundsen O’Reilly. Copyright 2012 O’Reilly Media, Inc.,978-1-449-30657-1”。
如果你对于引用代码样例是否属于侵权行为不确定,请随时联系我们:permissions@oreilly.com。
Safari 在线图书
Safari 在线图书是一个按需数字图书馆,可让您轻松快速地搜索超过7500部技术与创新相关图书和视频来寻找解决方案。
通过订阅,您可以通过在线、手机和移动设备等方式阅读或观看Safari 图书馆中任何章节或视频。若有机会阅读赋予印刷前的手稿,并发现有待改进的地方,请反馈给作者。
您可以复制粘贴代码样例、组织下载喜欢的章节、在关键部分插入图书标签、创建笔记、打印页面,从各种简便的功能中获益。
O’Reilly Media 上传本书至Safari 在线图书服务商。与O’Reilly 其他类似图书及出版物一样拥有本书的一切数字权利,免费注册:http:my.safaribooksonline.com。
如何联系我们对于本书的评论或问题请联系出版商。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
有关本书的网页、勘误表、样例和其他信息,请登录:
http:shop.oreilly.comproduct0636920020530.do
关于本书的评论或技术讨论可发送邮件至:
bookquestions@oreilly.com
如果想了解关于本书、会议、资源中心或O’Reilly 网络的其他相关信息,请登录网站:
http:www.oreilly.com
致谢
本书能够完成,应该感谢很多人。
很多人自愿审阅了本书早期的草稿, 并提供了极好的反馈和建议。感谢Leonard Richardson、Erik Wilde、Ian Robinson、Jan Algermissen、Mike Kelly、Will Hartung、William Martinez Pomares、Erlend Hamnaberg、Darrel Miller、Glenn Block、David Zulke、Erik Morgensen、Kevin Burns Jr.、Jonathan Moore 和Subbu Allamaraju。如果说本书准确、清晰和简洁的话,那很可能是因为他们的贡献。书中存在的任何错误都是作者自己的责任。
感谢Julian Reschke、Mykyta Yevstifeyev 和Frank Ellermann 等人在我详细学习IETF 和IANA 的程序与过程时的慷慨帮助。
我要感谢Benjamin Young 把CouchDB 介绍给我,感谢他为了让我更好地理解CouchDB及其编程所做的努力。他心甘情愿花时间面对面地帮助我克服很多障碍,这对我来说是无价的。如果在本书的CouchDB 代码中存在缺陷或错误,那很可能是因为我没有掌握Benjamin 想要传授给我的东西,我向读者和Benjamin Young 道歉。
我的编辑Simon St. Laurent 也给予了很多的帮助。如果没有他不辞辛苦的努力,本书不会面世。也感谢Melanie Yarbrough 所做的编辑和校对工作。
我要感谢CodeStock、Stir Trek、JAOO(亦称Gotocon)和OSCON 这几个会议的组织者。
过去几年,在这些会议和其他活动上的演示文稿让我有机会探索、提炼和修正最初的理念和方法。
特别感谢REST Fest 2010 和2011 的全体与会者。正是在南卡罗莱纳州美丽的格林维尔举行会议的那个富有成效而且令人愉悦的周末,我第一次公开描述并提炼了超媒体分析与设计方面的想法。
在freenode.org 的REST IRC 频道的交谈也让我受益良多。非常感谢各位参与的朋友,感谢他们的极好的反馈和想法。
最后,感谢REST-Discuss 邮件列表的版主和成员。多年以来,为了学到Fielding 提出的REST 风格及HTTP 实现的更多内容,我提出了很多问题、判断和评论。大部分情况下,我学到的有关REST 和HTTP 的很多正确的东西都是在这里讨论的结果。
|
|