基本概念
REST(resource representational state transfer)资源表述性状态转移
Reseful既是用rest理论的实现
-
Resource
在网络上一切皆资源,每一种资源都有一个特定的URI去指向它
例如:
http://www.wolfcode.cn/news
http://www.wolfcode.cn/departments -
Representation
把资源具体表现出来的形式,叫做他的表现层(Respresentation),例如文本可以txt格式表现,图片可以jpg格式表现
URI只代表资源的实体不代表他的表现形式,他的具体表现形式,应该在HTTP请求的头信息中用accept和content-type字段指定,这两个字段才是对表现层的描述
Accept:application/json 浏览器->后台
Content-type:application/json 响应格式
资源的表现形式一般在http的头部信息表现出来 -
Transfer
访问一个网站,就代表了客户端和服务器的一个互动过程,在这个过程中,涉及到了数据和状态的变化
HTTP 是无状态协议,也就是说,所有的状态都保存在服务器端,因此,如果客户端想要操作服务器,必须通过某种手段,让服务器发生“状态转化”,而这种转化是建立在表现层之上的,故就是“表现层状态转化”
在客户端和服务器的交互过程中,涉及到状态的转化,我们是通过某种手段(ajax,form等)让它进行转化 -
Uniform interface
REST要求:必须通过统一的接口来对资源执行各种操作,对于每个资源只能执行一组有限的操作。
我们会使用7个HTTP方法来体现我们现在对资源的操作,不再在uri地址上体现
关于应用接口
系统的接口:很多情况下,需要把系统的功能作为服务暴露给其他应用使用或者给移动端使用,就需要把系统中的服务作为接口暴露出去,一般分为公工接口(发短信,天气服务)和私用接口(公司内部使用的)
京东万象:https://wx.jdcloud.com/api
资源设计规则
在restful架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表名对应,一般来说,数据库中的表都是同种记录的集合,所以uri中的名词也应该使用复数
设计资源的接口,接口uri一般选用的是名词,一般和数据库表名相同,并且是用复数。
/images 图片资源的接口 post 上传,delete 删除
动作设计规则
GET(SELECT ):从服务器取出资源(一项或多项)
POST(CREATE):在服务器新建一个资源
PUT(UPDATE):在服务器更行资源(客户端提供改变后的完整资源),PUT更新整个对象
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性【补丁】),PATCH更新个别属性
DELETE(DELETE):从服务器删除资源
HEAD:获得一个资源的元数据,比如说一个资源的hash值或者最后修改日期
OPTIONS:获得客户端针对一个资源能够实施的操作;(获得该资源的api(能过对资源做什么操作的描述))
获取某个部门的所有员工:
GET /departments/ID/employees
动作设计规则
返回值类型:
可以参考,不一定非得有
常见状态码
REST的另一重要部分就是为既定好请求的类型来响应正确的状态码。如果你对HTTP状态码陌生,以下是一个简易总结。当你请求HTTP时,服务器会响应一个状态码来判断你的请求是否成功,然后客户端应如何继续。以下是四种不同层次的状态码:
- 2xx = Success(成功)
- 3xx = Redirect(重定向)
- 4xx = User error(客户端错误)
- 5xx = Server error(服务器端错误)
以下是一些最重要的状态码:
请求成功的状态码:
-200 – OK (默认的)
201 – Created(已创建)
202 – Accepted (已接受:常用语删除请求)
客户端错误状态码:
- 400 –请求出错(语法格式有误或服务器无法理解此请求)
- 401 – 未授权(需要登录)
- 404 – 找不到 (找不到所请求的文件或脚本)
- 405 – 不允许此方法(错误的 HTTP方法)
- 409 – 冲突 (IE尝试以PUT请求创建相同的资源时)
accept 和 content-type
Accept:只会出现在请求中,代表客户端希望接收数据的类型
我发请求过去,希望得到 text/html,application/xhtml=xml、、、、、这样的数据
Content-type:数据的格式类型
出现Request中:(假如:context-type:json)既我这个请求发过去带的是json形式的数据
出现在response:代表后台响应的数据是指定的数据类型