restful风格

REST

rest, 即为Representational State Transfer的缩写-表现层状态转换。若一个架构满足REST原则, 就成为RESTFUL架构。

资源

资源resource, 是指’’资源’’的’’表现层状态转换’’

资源是网络中的一个实体, 是具体的数据(文本, 图片,网页等),我们可以通过URI(统一资源标识符)来找到它, 每个资源指向一个URI。因此,,要获取一个资源可以通过访问它的URI。

大家熟知的URL(统一资源定位符), 常用于浏览器中网址,,它是URI的子集

表现层

表现层representational,指将资源的具体呈现出来的形式。

URI只代表资源的实体,不代表它的具体表现形式。具体表现形式是有HTTP请求的头信息中用AcceptContent-Type指定。这两个字段才是对表现层的描述。

状态转化

状态转化state transfer,它指客户端和服务器的互动工程。

HTTP协议是一个无状态协议,它意味着所有的状态需要保存在服务端,客户端想要操作服务端,就需要通过某种手段发生’’状态转换’’的操作。具体到HTTP协议里面,操作方式为GET获取资源 POST新增资源 PUT修改资源 DELETE删除资源 PATCH修改资源部分内容

:point_right: 总结

1. 每个URI代表一种资源

2. 客户端和服务器之间, 传递资源的某种表现层

3. 客户端可以通过HTTP的传值方式,对服务器端资源进行操作, 实现表现层状态化

RESTFUL

动宾结构

RESTFUL的核心思想是让客户端的数据操作指令是动词+宾语的结构。如GET /articles,也就是前面的操作是动词(大写),后面的路由应该是名词。

HTTP5种常见操作

1
2
3
4
5
GET 读取
POST 新建
PUT 修改
PATCH 修改(部分修改)
DELETE 删除

动词覆盖

如django框架中只有GET和POST两种HTTP请求方式,服务器需要用POST去模拟另外的三种方法,此时,客户端发出的请求,要加上X-HTTP-Method-Override,他能够告诉服务器使用哪一种操作去覆盖POST方法。

###宾语为名词

宾语是API的URL, 它被使用为名词,并且通常它都是一个集合,应该使用名词的复数。

1
GET /articles

###避免多级URL

资源在出现多级分类的情况下,容易写出多级的URL。但是它是不利于拓展的,除了第一级,我们更多的应该使用参数(查询表达式)

1
GET /articles?page=1&per_size=8

状态码

案例

成功情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"data": [
{
"name": "javascript",
"useto": "web development"
},
{
"name": "python",
"useto": "do anything"
},
{
"name": "php",
"useto": "web development"
},
{
"name": "c++",
"useto": "web server"
}
],
"status": {
"code": 200,
"message": "OK all right."
}
}

失败情况

1
2
3
4
5
6
{
"status": {
"code": 404,
"message": "No result matched."
}
}

json响应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#-*- coding: UTF-8 -*-
from flask import jsonify

# define statu_dics here
R200_OK = {'code': 200, 'message': 'OK all right.'}
R201_CREATED = {'code': 201, 'message': 'All created.'}
R204_NOCONTENT = {'code': 204, 'message': 'All deleted.'}
R400_BADREQUEST = {'code': 400, 'message': 'Bad request.'}
R403_FORBIDDEN = {'code': 403, 'message': 'You can not do this.'}
R404_NOTFOUND = {'code': 404, 'message': 'No result matched.'}


def fullResponse(statu_dic, data):
return jsonify({'status': statu_dic, 'data': data})


def statusResponse(statu_dic):
return jsonify({'status': statu_dic})

api接口

1
...

参考于

1.基于flask的restful

2.restful风格介绍

-------------end-------------
0%