RESTful API 架构解读

首先我们还是先介绍下 RESTful api 的来龙去脉。 首先, RESTful (下文都简称 RESTful api 为 RESTful )

1、RESTful 这个概念最早是在 2000年 Roy Thomas Fielding 博士在他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》 中提出了几种软件应用的架构风格,REST作为其中的一种架构风格在这篇论文的第5章中进行了概括性的介绍。 (其实我很好奇,为何国内的开发者们没能做出这些 标准通用级别的 规范)

这里 我们需要理解的就是 RESTful 它不是一种 类似于 http/https 的规范,而是一种 web 的架构。 而 RESTful 架构风格主要包含了 

1)采用 URI 标识资源
2)用 '链接' 关联相关的资源
3)使用标准的 http 方法
4)支持多种资源表示方式
5)无状态性

接下来,就用着五点 继续往下介绍。
一、采用 URI 标识资源
首先 标识资源 中的 资源 指的是什么? 
在任何 在客户端能够访问到的 任何形式(图片、文字、音频、视频等)的 事物均可以理解为资源。 
同时, 存储在数据库中的数据也可以理解为资源。
并且 通过 uri 标识以后,任何在客户端能够访问到的资源 均有一个或者多个标识。

然后 我们通过 uri 访问静态资源,访问数据库请求后返回的数据等等。例如: 

https://vuejs.com.cn/#/use/start/1               (当前id=1的用户信息)
https://vuejs.com.cn/#/use/resource/2017/09      (2017年九月份所有留言信息)
https://vuejs.com.cn/#/base/color/2017           (2017新增用户)

这样 一个简单的 uri 就具备了很强的标志性 和 可读性。除此之外 uri 还能够比较清晰的获取到静态资源路径。

所以站在 存在即为合理的角度来思考的话,既然该 uri 存在,那么此 uri 必须是 标识某个资源而存在。
二、用 '链接' 关联相关的资源
这里的  ‘链接’ 就是我们常常说的 url, url 和上面说到的 uri有什么区别呢?

恩,说到这里,我们就来详细的介绍下 uri、url、urn 三者之间的关系和区别。

uri (uniform resource identifier 统一资源标识符)
url (uniform resource locator 统一资源定位器)
urn (uniform resource name 统一资源命名)

也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

介绍完 url 下面就说到访问一个页面, 页面中可能存在 文字、图片、视频等文件展示。 这里就是关联了相关资源。一个 url 关联了 图片、文字、视频 这三个资源。
三、使用标准的 http 方法
这里标准的用法, 概括起来包含了 这7种

GET (从服务器取出资源) 
POST (在服务器新建一个资源)
PUT (在服务器更新资源(客户端提供改变后的完整资源))
PATCH (在服务器更新资源(客户端提供改变的属性))
DELETE (从服务器删除资源)

HEAD (获取资源的元数据)
OPTIONS (获取信息,关于资源的哪些属性是客户端可以改变的)

后面二种 为不常用方法。 GET 方法相信大家都很熟悉了。 这里解释一下 POST 和 PUT 方法。虽然 通过发送POST和PUT请求均可以添加一个新的资源,但是两者的不同之处在于:对于前者,请求着一般不能确定标识添加资源最终采用的URI,即服务端最终为成功添加的资源指定URI;对于后者,最终标识添加资源的URI是可以由请求者控制的。也正是因为这个原因,如果发送PUT请求,我们一般直接将标识添加资源的URI作为请求的URI;对于POST请求来说,其URI一般是标识添加资源存放容器的URI。
简单点说就是 post 方法 可以将要新增的 资源 放在 data 中而不一定非得放在 uri 中。 而 put 方法新增资源的时候,资源必须放在 uri 中。

这就是 使用标准 http 方法中的 方法, 在日常的开发过程中 最常用的就是 post 和 get 方法了。当然了 post 和 get 方法也是有很大区别来的。

区别呢? 分为2点:

1) get 请求需要将 请求所带参数放在请求的 url 中。 而 post 需要将 请求所带参数放在 http 包的包体中。
2)get 方法提交数据最大只能是 1024 字节。 而 post 理论上是没有上限的。

好了~ http 方法相关的内容就这么多。
四、支持多种资源表示方式
这里的 多种资源表示方式需要解释下, 资源 和 资源的表示 是两个意思。 资源是一个笼统的概念, 资源的表示方式 则为 具体的 资源内容呈现方法。

这里就是需要说明一下 在 请求返回 其实返回的不是资源  而是 资源的表现形式。
五、无状态性
RESTful只要维护资源的状态,而不需要维护客户端的状态。对于它来说,每次请求都是全新的,它只需要针对本次请求作相应的操作,不需要将本次请求的相关信息记录下来以便用于后续来自相同客户端请求的处理。

这里可以理解为 RESTful 的 Web 上展示的任何信息均为通过 资源获取的方式来获得。 所以任何状态值都是通过 请求返回 回来的。

so~ 今天先到这里。 如有错误欢迎指正。