RESTful Web Services 笔记

000 什么是Web Service

    Web Service是一种基于HTTP协议的服务,用户通过发送HTTP请求服务器上的资源,服务器也会把资源信息放在HTTP响应中返回  
    给请求者。它实际上是一种调用关系,只是被调用主体从本地函数变成了远端某个服务器上的服务。 

什么是HTTP

001 RPC和RESTful的区别

       当我们发起一个请求向服务器请求一个资源,那么有两个东西需要明确,一是方法信息,它用来说明要对数据采用什么样的操作,  
   比如是创建还是删除,是更新还是获取。二是作用域信息,它用来说明要对什么数据采取操作,比如是股票数据还是天气数据,是今天  
   的股票数据还是这一整个月的股票数据。

       当明确了这两个部分之后,对于一个Web Service请求就可以确定对什么数据采取什么操作,也就完整说明了这次请求的主体和  
   主体上的动作。

       一个RPC式的Web Service的方法信息和作用域信息通常都放在HTTP报文体内,即只是把HTTP作为一个传输协议,对于所有请求  
   HTTP本身无差别的对待。下是一个假想的SOAP服务的例子,可以看到在Content-type中指明了内容是soap+xml,方法信息是get,  
   作用域信息是people。
POST / HTTP/1.1
Host: www.somewebsite.com
Content-Type: applicatin/soap+xml
...

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:body>
     <get>
      <q>people</p>
    </get>
  </soap:body>
</soap:Envelope>
      而一个RESTful的Web Service最大化的利用了HTTP协议本身,使用HTTP本身的动词GET,PUT,POST,DELETE等表示方法  
  信息,同时将作用域信息放在URL里。下面是一个RESTful的例子,使用HTTP本身的GET来描述方法信息,将作用域信息放在URL里,  
  相较于上面的SOAP的方式,整个请求信息简单,规整了许多,这也是RESTful的一个优点。
GET people/ HTTP/1.1
HOST: www.somewebsite.com
...
其中报文体为空

002 面向资源的架构

     实际上REST本身不是一个架构,确切的来讲它是一组设计原则。而REST的服务本身就是面向资源,所以这里讲面向资源的架构。在  
面向资源的架构里面有几个重要的概念:
     首先,什么是**资源**?实际上RESTful的Web Service提供的一切服务都是资源,比如一个文档,一份地图,一个数据,总之就   
是任何具有被引用必要的事物都可以看作资源。而资源通过URI的方式暴露出来,供客户端访问,每个资源与一个URI唯一对应。
     然后就是如何对资源进行**表示**?即请求返回什么样的数据。资源的表示只是关于资源当前状态的一些数据,例如对于同一份文  
档,可能会有word版,pdf版,html版可以访问,但是实际上的数资源都是一样的只是表示的不同。
     除此之外,面向资源的构架还有以下四个重要的特性

1.可寻址性

      可寻址性实际上是Web应用的最大优点,它令客户端可以灵活自由地使用网站。如果一个Web Service是不可寻址的,那么用户就  
 无法用标准的规则对它进行访问。

2.无状态性

      无状态性是HTTP协议本身的特性,它意味着每个HTTP请求都是完全孤立的。当客户端发出一个HTTP请求时,请求里包含服务器实  
  现该请求所需要的全部信息,服务器不依赖任何请求提供的信息。假设本次请求需要之前某个请求提供的信息,那么客户端应当把那个  
  信息也包括在本次请求里。
      也就是说对于同一个URI,以相同的访问条件,不管访问多少次,返回的结果都应该是相同的(不考虑服务器数据自身变动的情况  
  下),每一个URI就对应了服务的一个状态,请求结束后服务器都会回到初始状态。

3.连通性

      我们平常使用的互联网的各个网站之间使用链接的方式连接起来的,一个网页中会有指向其他页面的超链接,通过点击这些超链接  
  就可以继续访问接下来的页面。
      对于Web Service来说也是这样,返回的不止有数据,还有指向其他数据的链接,这种“具有链接”的特性叫做联通性。资源间的联  
  通性越好,资源间的关系就越清晰就越易于使用。     

4.统一接口

      统一接口实际上是为了对RESTful Web Service进行规范化,如果不进行这个统一,虽然大家都是用HTTP本身的动词作为操作方  
  法,但是可能你用GET获取数据,我用HEAD获取数据,对客户端来说无法用一致的方式对数据进行获取。
      HTTP提供了四种基本方法,用于四种最常见的操作。
      - 获取资源的表示:HTTP GET
      - 创建一个新资源:向一个新的URI发送HTTP PUT,或者像一个已有的URI发送POST
      - 修改一个资源:向已有的URI发送HTTP PUT
      - 删除已有资源:HTTP DELETE

003 设计RESTful Service的一般步骤

    1. 规划数据集
    2. 把数据集划分为资源
    3. 用URI为该资源命名
    4. 暴露一个统一接口的子集
    5. 设计来自客户端的表示
    6. 设计发送给客户端的表示
    7. 用超链接和表单把该资源和已有资源联系起来
    8. 考虑可能出现的错误情况
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章