REST实战

出版时间:2011-10  出版社:东南大学出版社  作者:Jim Webber,Savas Parastatidis,Ian Robinson  页数:388  译者:李锟,俞黎敏,马钧,崔毅  
Tag标签:无  

内容概要

为何典型的企业项目无法像你为Web所开发的项目那样运行得如此平滑?对于建造分布式和企业级的应用来说,REST架构风格真地提供了一个可行的替代选择吗?
在《REST实战》这本富有洞察力的书中,三位SOA专家对于REST进行了讲求实际的解释,并且通过将Web的指导原理应用到普通的企业计算问题中,向你展示了如何开发简单的、优雅的分布式超媒体系统。你将会学习到很多技术,并且随着一家典型的公司从最初的小企业逐渐成长为全球化的企业,使用这些Web技术和模式来解决这家公司在成长过程中产生的各种需求。本书由Jim
Webber等著。

作者简介

Jim
Webber,ThoughtWorks公司的一位技术主管,工作于可信赖的分布式系统。 Savas
Parastatidis,微软公司的一位架构师,工作于大规模的数据密集型和计算密集型应用。 Ian
Robinson,ThoughtWorks公司的首席咨询顾问,帮助客户从奠基阶段到运营阶段创建可持续的面向服务开发能力。

书籍目录

序言
前言
第1章 将Web作为建造分布式系统的平台
Web的架构
从资源的角度思考
从Web架构到REST架构风格
Web作为一个应用平台
Web的友好性和Richardson的成熟度模型
起航
第2章介绍 Restbucks:如何以Web风格获得一杯咖啡
Restbucks:一家有着全球抱负的小咖啡店
Web现身了
第3章 基础的Web集成
减肥的感觉真好!
一个简单的咖啡订购系统
URI模板
URI隧道技术
POX:基于HTTP之上的普通老式XML
开始行动
第4章 CRUD式Web服务
将Orcler(订单)建模为资源
建造CRUD式服务
消费CRUD式服务
通过WADL自动消费服务
CRuD虽好,但还可以更好
第5章 超媒体服务
超媒体原则
超媒体格式
契约
超媒体协议
实现超媒体服务
用Java建造订购服务
在.NET中建造订购服务
Ready、Set和Action
第6章 向外扩展
回到基础
创建可缓存的内容
在.NET中实现缓存
保持新鲜
第7章 Atom联合格式
格式
将Atom用于事件驱动系统
用Java建造Atom服务
在.NET中创建Atom服务
Atom无处不在?
反思
第8章 Atom发布协议
Atom发布协议
使用AtomPub实现订单履行
在.NET中实现AtomPub
一个多功能的协议
第9章 Web安全
HTTP安全要点
身份标识和OpenID协议
0Auth协议
服务的黑客攻击和防御
最后的思考
第10章 语义
语法vs.语义
信息的结构和表述
语义网
微格式
链接数据和Web
指导
第1 章 Web和WS-*协议栈
Wleb Services是邪恶的?
SOAP:全部真相
wsDL:不过是另一种对象接口定义语言(Object IDL)
两个错误叠加无法得到正确结果
安全的,可靠的,事务性的
Web services的安魂曲?
第12章 为Web建造案例
更多的银弹是不存在的
建造并运行基于Web的服务
没有度量就没有架构
推销Web
出发去建造

章节摘录

版权页:   插图:   安全性和幂等性 我们在第3章中了解到,GET请求很特殊,因为它具有既安全又幂等的特性。PUT请求和DEL ETE请求都是幂等的,但是它们都不安全,POST请求则是既不安全也不幂等。只有GET请求在重复调用时能返回相同的结果,并且不会产生需要消费者负责的副作用。 对于GET请求,重复发送失败的请求不会改变应用的整体行为。例如,如果分布式应用的某个部分在GET操作过程中崩溃了,或者在收到对GET的响应之前网络中断了,那么客户只要重新发出同样的请求,并不会改变它与服务器交互的语义。 笼统来讲,PUT和DELETE请求也同样如此。对某个资源的状态进行一次绝对更新或者彻底将它删除,无论该操作是进行一次还是多次,结果将都是一样的。如果PUT和DELETE请求的失败是因为瞬时的网络或者服务器出错(如503响应),那么该操作就可以安全地重复。 然而,由于PUT和DELETE请求会有副作用(因为它们不是安全的),如果服务器一开始就拒绝了某个操作,可能就不能随时重复该操作了。例如,我们已经见过当消费者和服务看到的资源状态不一致时如何产生409响应的(仅仅重复执行相同的交互是没有用的)。不过,HTTP提供了其他有用的特性,当状态发生变化的时候,对我们会很有帮助。 校正资源状态 在分布式应用中,经常会出现多个消费者与同一个资源交互的情况,每一位消费者都不理会其他人所做的修改。除了这些由消费者驱动的变化,内部的服务行为也会导致资源状态发生消费者所不知道的变化。在这两种情况下,消费者对资源状态的了解可能会变得与服务的资源状态不一致。除了预期有些不一致之外,如果消费者对资源状态的了解没有及时更新,它发出的变更请求就会得到不符合预期的结果,无论是重复计算代价昂贵的请求,还是覆盖以及丢失其他消费者的变更,都是如此。 HTTP提供了一种简单但强大的机制,可以按照实体标签(entity tag)与条件请求头信息(conditional request header)的形式,对所期待的资源状态进行校正(并防止产生竞争)。一个实体标签值或者说ETag,就是一个不透明的字符串令牌,使服务器与资源关联起来,以便在资源的生命周期中唯一标识其状态。当资源发生变化时,如果其头信息中有一个或者多个发生变化,或者其实体消息体发生变化,实体标签就会相应地发生变化,表明该状态已经被修改。 ETag用于将实体与同一个资源进行对比。通过在条件请求头信息(如If—Match或者If—None—Match请求头信息)中提供一个实体标签值,消费者就可以告诉服务器在应用请求中提供的方法之前,应该先测试一下与当前资源状态有关的先决条件。

编辑推荐

《REST实战:超媒体和系统架构(中文版)》由东南大学出版社出版。

图书封面

图书标签Tags

评论、评分、阅读与下载


    REST实战 PDF格式下载


用户评论 (总计38条)

 
 

  •   rest入门好书,与rest web service相比,rest web service更多是从概念上描述rest,加上rest实战,正好,理念加实践,学习rest
  •   REST实战必读
  •   速度很快,总体来说还不错吧,REST集中讲解的是理论知识,看的一知半解的,phonegap这本讲解的还是比较详细的,还不错!
  •   通过这本书学些REST风格的Service编程还是非常好的
  •   针对REST进行了全方面的讲解,非常全面。
  •   不错,也有涉及到理论的,本来还以为只有实战的,意外的收获
  •   非常不错的一本书,推荐购买,尤其对系统选型有用
  •   老外好像很了解我,我就喜欢看这种理论和实际皆渗透讲解的书。
  •   告诉读者what,why
  •   这本书的理论性太强,但是如果想深入研究REST的话,这本书还是一本挺不错的入门读物。
  •   略读了一下感觉还可以,就是翻译水平问题:)这个你懂的,建议配合英文版一起读
  •   书的纸张质量很好,字体复印的清晰。
  •   作为学习用的可以看看
  •   在读在读在读
  •   没看 还不知道如何
  •   
  •   翻译的不是太通俗易懂,读起来有一点费劲!
  •   现在还没看多少,感觉还可以吧!
  •   纸张很好,看着舒服
  •   感觉看的不是很懂,从第一页开始就一直期待着本书能够告诉我更多,结果到看完才发现没掌握多少关于REST的知识,失望。
  •   翻译的相当差!!!
  •   我想要Java的实现,书中****的较多。
  •   这是一种新的架构模式,简单有效AND性能好
  •   此本书籍介绍给开发系统框架工程师阅读 有点帮助的
  •   很喜欢,将很多思想串起来了。
  •   还在看,挺不错的实战书
  •   东南大学出版社印刷质量没人邮出版社的好,有味;不过我注重的还是书的内容的质量,刚拿到货,期待中。。。。
  •   总体来书,理论性比较强。需要一定的web开发基础。
  •   还不错,算实用吧
  •   翻译错误比较多,一定要搭配英文版看
  •   不错倒是不错
  •   国外实战书籍
  •   还没来得及看,感觉不错!
  •   一本值得去看的好书啊
  •     不错得书,能够让人对rest有完全得认识,从简单得crud式得服务,到多媒体式的服务得详细讲解,然后是缓存得实现,最后是atom得详细讲解,让能够对web得整个架构有详细得认识,对超媒体和系统架构都能够有相关的详细讲解,值得一读
  •     原文:http://www.cnblogs.com/cathsfz/archive/2012/05/09/2493385.html
      
      最近 O’Reilly 搞活动,我就半价买了一本《REST in Practice》。对于 O’Reilly 的书,我通常会对比 O’Reilly 打折后的价钱和 Kindle 版的价格,通常是那家更便宜就在那家买,但图表或代码比较多的我就会坚持买 O’Reilly 的版本,因为 PDF 能够最好地保存这些格式。
      
      回到 REST 的话题上。尽管这个概念 2000 年就被提出来了,2007 年成为了一个热词,随后越来越多的服务都宣称自己是 RESTful 的,但是到底真么做才是真正的 REST 我从来没有自习学习过。由于 2007 年的时候 Ruby on Rails 也十分热门,所以我以为 Rails 风格的 CRUD API 就是 REST 了,同时对于外界关于「什么算是 REST 什么不算是 REST」的争论没怎么关心过。
      
      记得之前老赵提到过《REST in Practice》是本好书,所以我就收藏到 wish list 里面了,在 O’Reilly 打折时就下狠心买下来,然后看看争论得如此多的 REST 到底是什么东东。书中提到 Richardson 的 REST 成熟度模型,通过这个模型你可以理解什么是 REST 什么不是 REST。这个模型是这样子的:
      
      第 0 级服务:只使用一个 URI 作为一个服务端口,也只使用一个 HTTP 方法传输数据。大多数 WS-* 服务都是这个级别的,XML-RPC 和 POX 也是。这种做法相当于把 HTTP 这个应用层协议降级为传输层协议用。HTTP 头和有效载荷是完全隔离的,HTTP 头只用于保证传输,不涉及业务逻辑;有效载荷包含全部业务逻辑,因此 API 可以无视 HTTP 头中的任何信息。
      
      第 1 级服务:使用多个 URI,不同的 URI 代表不同的调用入口,但只使用同一个 HTTP 方法传输数据。
      
      第 2 级服务:使用多个 URI,不同的 URI 代表不同的资源,同时使用多个 HTTP 方法操作这些资源,例如使用 POST/GET/PUT/DELET 分别进行 CRUD 操作。这时候 HTTP 头和有效载荷都包含业务逻辑,例如 HTTP 方法对应 CRUD 操作,HTTP 状态码对应操作结果的状态。我们现在看到的大多数所谓 RESTful API 做到的也就是这个级别。
      
      第 3 级服务:使用超媒体(hypermedia)作为应用状态引擎。要解释这个概念先要解释什么是超媒体:
      
      我们已经知道什么是多媒体(multimedia),以及什么是超文本(hypertext)。其中超文本特有的优势是拥有超链接(hyperlink)。如果我们把超链接引入到多媒体当中去,那就得到了超媒体,因此关键角色还是超链接。使用超媒体作为应用引擎状态,意思是应用引擎的状态变更由客户端访问不同的超媒体资源驱动。
      
      举个例子来说,用户在论坛的帖子列表点击超链接进入某个帖子,这时候浏览器作为一个客户端就会去 GET 这个帖子的链接 URI,应用状态就切换为显示某个帖子了。接着用户输入回复提交表单,浏览器就会根据 form 上面的 action 属性 POST 内容给目标 URI,应用状态就再一次发生切换,完成了回复的存储。
      
      使用超媒体与前面第 1 级、第 2 级的显著区别是,客户端不再和 URI 紧耦合。在第 1 级或者第 2 级的应用里面,客户端都需要知道资源使用的 URI 模版(如 /orders/{id}),然后要操作什么样的资源就生成什么样的 URI。超媒体客户端只知道入口 URI,之后的每一个 URI 都是通过超链接获得的。
      
      还是用上述论坛例子来解释,假若这个论坛通过 Atom 协议支持非浏览器的客户端访问。客户端是不需要知道论坛帖子的 URI 模版的,因为客户端可以通过帖子列表的 Atom 获得帖子的超链接,然后在用户选择浏览帖子时获取对应 URI 的内容。获取回来的结果不会带有 form,但会带有 <link rel="reply" />,通过这个 link 客户端又知道了用户提交的回复应该发往哪个 URI。
      
      说完 Richardson 的成熟度模型,说说 REST 这篇论文作者 Roy Fielding 的回应。Roy Fielding 说「只有使用了超媒体的才能算是 REST」。简单来说,他认为第 3 级成熟度以外的都不算 REST。我个人的看法是,我支持 Roy Fielding 对 REST 的严格定义,我也认为一个真正使用了超媒体实现应用状态引擎的服务非常了不起,但是在普通 CRUD API 能满足需求的情况下我觉得使用 CRUD API 也可以。
      
      这本书后面还讲到了如何使用缓存来增加系统健壮性,如何使用 Atom 和 Atom 发布协议,如何使用 OpenID 和 OAuth 等认证授权技术。因为这本书我还没看完,所以这些内容我也不好做评价。
      
      这本书总体来说写得不错,但就是废话稍微多了一点点。如果你跳着章节地去看,可能就不会觉得那是废话了,因为你挑选出来阅读的部分都包含所有的信息。但如果你像我这样从头到尾地阅读,就会觉得作者怎么前面提到过的事情后面还要再提及。
      
      此外这本书提供的大量 .NET 和 Java 代码对我来说没什么意义。我觉得这本书更多是写给做企业服务的人看的,希望他们的思维模式能够从企业环境里常见的 WS-* 跳出来,同时希望证明给他们看实现 REST 是多么简单的事情。这对于天天研究互联网服务的我来说没什么必要,况且我也很久没写过 .NET 代码了,所以各式各样的示例代码给我无视掉了。我觉得我知道这件事情 WCF 能做也就足够了。
  •   WS-* 服务 这个是什么。。。
  •   Java的WebService相关的应用栈
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7