Restful了解

1、什么是REST

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。Roy Fielding是HTTP规范的主要编写者之一, 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。” 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。简而言之:
  (1)每一个URI代表一种资源;
  (2)客户端和服务器之间,传递这种资源的某种表现层;
  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

RESTful的核心就是后端将资源发布为URI,前端通过URI访问资源,并通过HTTP动词表示要对资源进行的操作。这里涉及到一个新概念:资源,后端提供的所有内容都可以被定义为资源。
RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。即:

GET(SELECT):从服务器取出资源(一项或多项)。

安全且幂等 获取表示 变更时获取表示(缓存)
 200(OK) - 表示已在响应中发出 
 204(无内容) - 资源有空表示 
 301(Moved Permanently) - 资源的URI已被更新 
 303(See Other) - 其他(如,负载均衡) 
 304(not modified)- 资源未更改(缓存) 
 400 (bad request)- 指代坏请求(如,参数错误) 
 404 (not found)- 资源不存在 406 (not acceptable)- 服务端不支持所需表示 
 500 (internal server error)- 通用错误响应 
 503 (Service Unavailable)- 服务端当前无法处理请求

POST(CREATE):在服务器新建一个资源。

不安全且不幂等 使用服务端管理的(自动产生)的实例号创建资源 创建子资源 部分更新资源 如果没有被修改,则不过更新资源(乐观锁) 200(OK)- 如果现有资源已被更改 
201(created)- 如果新资源被创建 
202(accepted)- 已接受处理请求但尚未完成(异步处理) 
301(Moved Permanently)- 资源的URI被更新 
303(See Other)- 其他(如,负载均衡)
400(bad request)- 指代坏请求 
404 (not found)- 资源不存在 
406 (not acceptable)- 服务端不支持所需表示 
409 (conflict)- 通用冲突 
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 
415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应 
503 (Service Unavailable)- 服务当前无法处理请求

PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。

不安全但幂等 用客户端管理的实例号创建一个资源 通过替换的方式更新资源 如果未被修改,则更新资源(乐观锁) 
200 (OK)- 如果已存在资源被更改 
201 (created)- 如果新资源被创建 
301(Moved Permanently)- 资源的URI已更改 
303 (See Other)- 其他(如,负载均衡 ) 
400 (bad request)- 指代坏请求 
404 (not found)- 资源不存在 
406 (not acceptable)- 服务端不支持所需表示 
409 (conflict)- 通用冲突 
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 
415 (unsupported media type)- 接受到的表示不受支持 
500 (internal server error)- 通用错误响应 
503 (Service Unavailable)- 服务当前无法处理请求

DELETE(DELETE):从服务器删除资源。

不安全但幂等 删除资源 
200 (OK)- 资源已被删除 
301 (Moved Permanently)- 资源的URI已更改 
303 (See Other)- 其他,如负载均衡 4
00 (bad request)- 指代坏请求
 404 (not found)- 资源不存在 
409 (conflict)- 通用冲突 
500 (internal server error)- 通用错误响应 
503 (Service Unavailable)- 服务端当前无法处理请求

2、为什么用RESTful

前后端分离主要是以API为界限进行解耦的,这就会产生大量的API,采用RESTful来设计API主要有以下好处:

1、表现力更强,更易于理解
2、RESRful是无状态,所以不管前端是何种设备何种状态都可以无差别的请求资源

3、怎么用RESTful

1、每个资源使用2个URL,网址中只能有名词
2、对于资源的操作类型由HTTP动词来表示
3、统一的返回结果
4、返回正确的状态码
5、允许通过HTTP内容协商,建议格式预定义为JSON
6、对可选发杂的参数,使用查询字符串(?)
7、返回有用的错误信息(message)
8、非资源请求用动词,这看起似乎和1中的说法有矛盾,但这里指的是非资源,而不是资源

4、实践中的常见问题

POST和PUT在创建资源的区别:所创建的资源的名称(URI)是否由客户端决定。 例如为为博客增加一个android的分类,生成的路径就是分类名/categories/android,那么就可以采用PUT方法。
客户端不一定都支持这些HTTP方法:较古老的基于浏览器的客户端,只能支持GET和POST两种方法。妥协的解决方法,通过隐藏参数_method=DELETE来传递真实的请求方法等措施来规避。
统一资源接口对URI的意义:统一资源接口要求使用标准的HTTP方法对资源进行操作,所以URI只应该来表示资源的名称,而不应该包括资源的操作,如下是一些不符合统一接口要求的URI:

GET /getUser/1
POST /createUser
PUT /updateUser/1
DELETE /deleteUser/1
正确写法应该是 /User/1,不应该包含动词,具体的动作由请求方法来体现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值