restful:《 Restful Web Services 》读书笔记 | Chapter One

  我在的前公司也参和过个REST架构项目本以为自己对REST理解达到了大成境界了可是看了第觉得自己理解连皮毛也不够章是在The Programmable Web 背景下对REST式Web服务加以全面考察让我对REST理解加深了

     Programmable Web

   和Programmable Web对应是Human Web 顾名思义 Human Web是指面向人类用户来说web 那么Programmable Web就是面向软件Software()

  当你在浏览器里输入 www.51cto.com, 浏览器发出http请求 服务器返回来些html数据 从而你得到了你想要或不想要信息 这就是Human Web 在Ruby里有个Ruby/Amazon库 使用这个库可以模拟个用户来在Amazon.com里搜索本图书 而用这个Ruby库写代码返回来数据则是xml数据这些是交给来解析从而得到你想要数据 那么这种Web服务就叫Programmable Web

   为什么要说这个Programmable Web呢 ? Human Web是基于Programmable Web Human Web是实际上就是静态网站WebSite和Web应用构成

   2  Programmable Web分类

  分类如何分 ? 肯定是需要明白了事物共性以后才能分 不管是什么架构只要是基于Web那和HTTP是分不开 所以要对HTTP来做个概述:

  HTTP是基于文档协议 客户和服务器的间如果比作是用信件来交互那么HTTP就是对信封格式要求它并不关心文档内容

  完整HTTP Request 包括:

  1.HTTP思路方法 (HTTP method) -  在REST术语里可能会用HTTP verb, HTTP action

  2.路径 (path) -  hostname后面部分比如uri是http://www.51cto.com/index.html那么path就是/index.html(这本书里有时候uri就是表示路径)

  3.请求报头 (request headers)

  4.实体主体 (entity-body)也叫document或representation - 这好比放在信封里文档

  完整HTTP Respnse也是形式上差不多

  HTTP是Programmable Web上所有服务所共有而Web服务的间差别形成它们在两个问题上做法有所区别

  1.客户端如何把自己意图传达给服务器服务器如何知道该请求是要获取数据删除数据还是更新数据呢?

   我们把这种有关对数据采取什么操作信息叫思路方法信息(method infomation) 要在Web服务里传达思路方法信息种方式是把它放在HTTP思路方法里种方式是把思路方法信息放在了其他地方比如uri路径或者是请求文档里 SOAP就是第 2种方式般把思路方法信息放到了请求文档和http报头里 这就相当于信封里套了个信封 SOAP也是种协议 REST则是采用第种方式

  2.客户端如何告诉服务器对哪些数据进行操作 假如服务器已经知道客户端要删除数据了但它如何知道客户端删除是哪些数据呢 ? 为什么是这些数据而不是那些数据 ?

   我们把这种信息叫做作用域信息(scoping information) 个容易想到放置作用域信息地方是uri路径 REST是这样做种选择就是把作用域放到请求文档里(document)SOAP都是这种方式

  可以看个例子:

  http://fickr.com/photos/tags/penguin

  http://api.fickr.com/services/rest/?method=fickr.photos.search&tags=penguin

  在第个URI里思路方法信息就是GET, 作用域是 photos/tags/penguin

  后个URI里思路方法信息是fickr.photos.search, 作用域是penguin 表面看 2者并没用区别 但是第 2个uri 令HTTP GET思路方法失去了意义 作者有句话说可好了:REST就是为了让Programmable Web建设更好 更加统更加结构化 并且充分利用HTTP自身特性

  这样我们就有了分类了:

  REST式面向资源架构

  REST方式架构意味着 思路方法信息(method information)都在HTTP思路方法里面向资源架构(ROA)意味着作用域信息(scoping information)都在URI里REST架构并非只有这两条要求但是它们还是很好经验 个面向资源REST式Web服务 通过HTTP请求行(GET /search?q=rest HTTP/1.1)就基本了解客户端要干什么了通俗说法就是看信封就知道这封信作用是什么(现实里要这样没人敢寄信了 只是个比喻)

  个REST架构为客户端可能操作则数据暴露个uri

  RPC式架构

  个RPC式服务为每个处理远程进程暴露个uri, 般来说这样uri只有即服务端点(endpo)它只是信封里套了个信封

  REST-RPC混合架构

  个REST-RPC式架构为客户端可能进行个操作暴露个uri

  些知名REST式面向资源Web服务:

  提供Atom发布协议起变形服务

  Amazon S3(Simple Storage Service) http://aws.amazon.com/s3

  yahoo!提供大部分web服务 (http://developer.yahoo.com)

  许多未采用soap只读web服务

  所有静态网站WebSite

  和REST相关术语:

  SOA, 流行东东 使用REST会使SOA架构更加easy吧 ?

  SOAP, REST对手

  等等

  就此

  本文出自 “{ :Alex Space => " Ruby Notes " }” 博客请务必保留此出处http://blackanger.blog.51cto.com/140924/105305



Tags:  restful

延伸阅读

最新评论

发表评论