RESTful Web Services 笔记

    xiaoxiao2021-11-30  52

    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. 考虑可能出现的错误情况
    转载请注明原文地址: https://ju.6miu.com/read-678933.html

    最新回复(0)