RESTful概念
RESTful是一种理念,一种设计规范,并不是什么协议等。
REST,全称Representational State Transfer,直接翻译就是:表现层状态转化。但是这个缺少主语,实际上应该是“资源在网络中以某种表现形式进行状态转化”。
“资源”是RESTful中最核心的概念之一。在RESTful概念中,互联网中的每一样信息都可以定义为资源,比如文本、图片、音频、视频等。而这些资源又都可以对应一个特定的URI(统一资源定位符),URI为每一个资源的地址或独一无二的识别符。
表现层,针对上面的“资源”,我们要进行相应的呈现,而且可以采用多种的呈现形式,而这些呈现形式就叫做“表现层”。eg:文本的呈现形式,JSON格式、XML格式、HTML格式等。
状态转化,资源通常放在服务器端,而客户端对服务器资源的增、删、改、查等操作,让资源状态发生改变。这个过程便是“ 状态转化”。
RESTful规范
在RESTful架构中,每个网址代表一种资源(resource),所有网址请求接口中不能有动词,只能有名词,这点和数据库设计风格很像。
RESTful一般使用规范(大部分情况下这样):
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
HTTP方法 | 安全性 | 幂等性 | 接口说明 |
---|---|---|---|
GET | 安全 | 幂等 | 获取资源(Read) |
POST | 不安全 | 非幂等 | 创建资源(Create) |
PUT | 不安全 | 幂等 | 更新资源(Update) |
DELETE | 不安全 | 幂等 | 删除资源(Delete) |
RESTful例子
以用户的增删查改为例:
get : /user/list //获取所有用户信息
post:/user //创建用户信息
put:/user/123 //更新用户123的信息
get:/user/123 //获取资源标识(id)为123的用户信息
delete:/user/123 //删除资源标识(id)为123的用户信息
我在这里的没有使用资源的复数形式,如果使用资源的复数形式,查询所有用户还存在另一种表达,
get : /users //获取所有用户信息
单复数的资源形势表达在这里不做讨论,只要能让人正确理解就行,我个人一般只使用单数形式。
其次,资源的表达也是需要层级的
eg:
每个用户下拥有多本书:
get /user/123/book/list //查询用户123的书籍列表
get /user/123/book/3 //查询用户123的id为3的书
部门下有多个用户
get /department/1/user/list //查询id为1的部门的用户列表
get /department/1/user/123 //查询id为1的部门下的用户123的信息
网友评论