- 1、什么是REST?
看很多对REST的解释就是REpresentational State Transfer,直接翻译为:表现层状态转移。这个概念看上去很是懵逼。
以下是自己看了网上一些通俗的解释整理下来的:
全称是Resource Representational State Transfer,通俗的来讲就是:资源在网络中以某种表现形式进行状态转移。
要想理解这句话首先需要弄清楚什么是资源
Resource:资源,即数据(前面说过网络的核心)。比如网络上的所有事物都被抽象为资源。资源可以是实体(例如手机号码),也可以只是一个抽象概念(例如价值) 。
下面是一些资源的例子:
某用户的手机号码
某用户的个人信息
最多用户订购的商品套餐
两个产品之间的依赖关系
某用户可以办理的优惠套餐
某手机号码的潜在价值
每个资源都有一个唯一的资源标识符URI,要获取这个资源,访问它的URL就可以,因此URL就成了每一个资源的地址。
Representational:资源的某种表现形式,资源具有多种表现形式,比如用JSON,XML,JPEG等;
State Transfer:资源的状态变化。通过HTTP动词表达。
所以概括来讲:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述对资源的操作。
一个url就是一个资源,所有的操作都是对资源的更改而言的角度上啊。
- 2、什么是RESTful
基于REST构建的API就是Restful风格。
REST,名词,实际上只是一种设计风格,它并不是标准。所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准。
RESTful,形容词,指实现了 REST规范的系统,如实现了REST规范的Web API就叫RESTful API。
REST 是面向资源的,这个概念非常重要,而资源是通过 URL 进行暴露。
在Restful之前的操作:
RESTful用法: |
REST是Roy Thomas Fielding在他2000年的博士论文中提出的。通俗点讲,这个设计的初衷就是作者要告诉我们,HTTP协议是这样设计的,别用错了。原因是http本质就是对资源的各种操作,资源用URL定位,操作用method表示,但很多应用都是把操作放到URL表示,那method有何意义?就是所有的Url本质来讲,都应该是一种资源。一个独立的Url地址,就是对应一个独一无二的资源。
- 3、RESTful API有哪些特点
(1)基于“资源”,数据也好、服务也好,在RESTFul设计里一切都是资源。REST 是面向资源的,而资源是通过 URL 进行暴露。
URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
在Restful之前的操作:
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
RESTful用法:
http://127.0.0.1/user/1 GET 根据用户id查询用户数据
http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
(2)无状态。一次调用一般就会返回结果,不存在类似于“打开连接-访问数据-关闭连接”这种依赖于上一次调用的情况。
所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。
(3)URL中通常不出现动词,只有名词URL语义清晰、明确。
(4)使用HTTP的GET、POST、DELETE、PUT来表示对于资源的增删改查
REST很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等
REST API 是基于 HTTP的,所以你的API应该去使用 HTTP的一些标准。这样所有的HTTP客户端(如浏览器)才能够直接理解你的API(当然还有其他好处,如利于缓存等等)。REST 实际上也非常强调应该利用好 HTTP本来就有的特征,而不是只把 HTTP当成一个传输层这么简单了。
RESTful架构风格规定,数据的元操作,即CRUD,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源)PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。