RESTful规范
restful规范
- 介绍:
restful是一种软件的架构风格,设计风格, 为客户端和服务端的交互提供一组设计原则和约束条件。
符合REST的约束条件和原则的架构,就是RESTful架构;
- 核心思想:
- 面向资源编程:每个URL代表一种资源,URL中尽量不要用动词,要用名词。
- 根据method不同,进行不同的操作: GET/POST/PUT/DELETE/PATCH
- url中体现:
- 体现版本:
// 例如: https://www.bootcss.com/v1/mycss https://v1.bootcss.com/mycss
- 体现是否是API(接口):
// 例如 https://www.bootcss.com/api/mycss https://api.bootcss.com/mycss
- 体现过滤条件
// 例如 https://www.bootcss.com/v1/mycss?page=3
- 尽量使用HTTPS:安全
- 返回的要求:
- 响应时携带状态码:
1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 3** 重定向,需要进一步的操作以完成请求 4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误
- 返回值:
GET请求 返回查到所有或单条数据
POST请求 返回新增的数据
PUT请求 返回更新数据
PATCH请求 局部更新 返回更新整条数据
DELETE请求 返回值为空
- 返回错误信息:当有错误时应当返回错误信息;
- 返回携带超链接:以便指引用户还有哪些连接可以跳转;
ret = { code: 1000, data:{ id:1, name:'小强', depart_id:http://www.luffycity.com/api/v1/depart/8/ } }
web服务交互
- Web服务交互的概念:
我们在浏览器中能看到的每个网站,都是一个web服务。那么我们在提供每个web服务的时候,
都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案
- 目前主流的三种交互方案:
-- REST ( Representational State Transfer)表述性状态转移 -- SOAP (Simple Object Access Protocol) 简单的对象访问协议 -- XML-RPC (XML Remote Procedure Call)基于XML的远程过程调用
- XML-RPC介绍:
通过XML将调用函数封装,并使用HTTP协议作为传送机制。
后来在新的功能不断被引入下,这个标准慢慢演变成为今日的SOAP协定。
- SOAP介绍:
SOAP服务则是以本身所定义的操作集,来访问网络上的资源。
SOAP也是基于XML的,但是它不只限于HTTP协议的传输,包括TCP协议,UDP协议都可以传输。
REST是Roy Thomas Fielding博士于2000年在他的博士论文里提出来的。
REST相比SOAP更加简洁,性能和开发效率也有突出的优势。
理解REST
- REST(Representational State Transfer)表征性状态转移:
- 这里所说的表征性,其实指的就是资源。通常我们称为资源状态转移。
- 资源的概念:
任何事物,只要有被引用到的必要,它就是一个资源。
浏览器中看到的文本,视频,图片等等都是资源
资源可以是一个实体,同时,也可以是抽象概念;
例如 某个人的联系方式,个人资料,人与人之间的关系 等等;
在引用资源的时候,资源一定会有一个标识(变量名),
在web中的唯一标识就是URI
- URI 与 URL的区别:
URI 统一资源标志符。
URL 统一资源定位符。
URI是给资源进行标识的,URL是描述资源地址的;
简单点说,URI类同与 数据库中的表;而URL是每条数据的唯一ID;
所以URL可以说是URI的子集,通过定位的方式实现的URI。
- 统一资源接口:
通过URL去访问到资源,就可以对资源会有很多不同的操作,增删改查;
之前可能会增加写一个url,删除写一个url,改又一个url;
现在只需要一个url,来根据请求方式不同来对资源进行不同的操作,
这就是统一资源接口;
遵循HTTP请求方法的语义,也就是说POST请求就在新增数据等
- 资源的表述:
资源的表述就是资源的展现形式; 例如文本资源可以采用html、xml、json等格式,图片可以使用PNG或JPG展现出来。 HTTP协议中协定了客户端接受,和服务端发送的格式: 客户端通过Accept头请求一种特定格式的表述, 服务端通过Content-Type告诉客户端资源的表述形式; 这些资源的表述呈现在页面上,就是我们说的资源状态
- 状态转移:
跳转,<a>标签 <button>标签等等
通过超链接的指引来告诉用户还有哪些资源状态可以进入
服务端通过超媒体告诉客户端当前状态有哪些后续状态可以进入。
这些类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态。
- 总结REST风格的特点:
- 在web中,只要有被引用的必要都叫资源
- 每个URI代表一个资源,独一无二的。
- 客户端通过HTTP的方法,对服务器端资源进行操作;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 通过超链接的指引,实现"表现层状态转移"。