一、web应用模式
在开发web应用中,有两种模式:
前后端不分离模式和前后端分离模式
1.1 前后端不分离
1.2 前后端分离
二、API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
-
url:长得像返回数据的url链接
-
请求方式:get、post、put、patch、delete
- 采用get方式请求上方接口
-
请求参数:json或xml格式的key-value类型数据
- ak:6E823f587c95f0148c19993539b99295
- region:上海
- query:肯德基
- output:json
-
响应结果:json或xml格式的数据
-
上方请求参数的output参数值决定了响应数据的格式
-
# xml格式 https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=xml #json格式 https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json { "status":0, "message":"ok", "results":[ { "name":"肯德基(罗餐厅)", "location":{ "lat":31.415354, "lng":121.357339 }, "address":"月罗路2380号", "province":"上海市", "city":"上海市", "area":"宝山区", "street_id":"339ed41ae1d6dc320a5cb37c", "telephone":"(021)56761006", "detail":1, "uid":"339ed41ae1d6dc320a5cb37c" } ... ] }
-
三 接口测试工具:Postman
Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。
Postman可以直接从官网:https://www.getpostman.com/downloads/下载获得,然后进行傻瓜式安装。
- 工作面板
- 简易的get请求
- 简易的post请求
- 案例:请求百度地图接口
四 RESTful API规范
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
4.1 数据安全的保障
-
urls链接一般采用https协议进行传输
注:采用https协议,可以提高数据交互过程中的安全性,https协议默认端口(443),http协议默认端口(80)
4.2 接口特征的表现
用api关键字来标识接口url
让人一看就知道是一个接口,api接口是前后端进行数据交互的媒介
4.3 多个版本共存
-
在url链接中可以标识多个数据版本
url中的链接的v1,v2指代不同的版本
# 产品上线后,会随着新功能的加入以及BUG的修复,会进行版本迭代工作,由于用户使用是不受限的,他可能还在用的老的版本,为了用户体验,不能直接将老版本的代码更新。因此,会存在多个版本共存的现象。
4.4 数据即资源,均使用名词来表示
-
接口是前后端进行数据交互的场所,我们把这些交互的数据看成资源
# 注意 注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词,错误示范:https://api.baidu.com/delete-user 特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义 - https://api.baidu.com/place/search - https://api.baidu.com/login
4.5 资源的操作由请求方式来决定(method)
-
一般对资源的操作无外乎增删改查操作,我们将请求方式看成对资源的操作方式:
GET https://api.baidu.com/books/ # 获取所有的数据 GET https://api.baidu.com/books/1/ # 获取主键值为1的书籍 POST https://api.baidu.com/books/ # 新增一本书 PUT https://api.baidu.com/books/1/ # 整体更新主键值为1的书籍 PATCH https://api.baidu.com/books/1/ # 局部更新主键值为1的书籍 DELETE https://api.baidu.com/books/1/ # 删除主键值为1的书籍
4.6 过滤 ,通过URL 上传参的方式传递搜索条件
- 指定返回记录的数量
https://api.example.com/v1/zoos?limit=10
-
指定返回记录的开始位置
https://api.example.com/v1/zoos?offset=10
-
指定第几页,以及每页的记录数
https://api.example.com/v1/zoos?page=2&per_page=100
-
指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/zoos?sortby=name&order=asc
-
指定筛选条件
https://api.example.com/v1/zoos?animal_type_id=1
4.7 响应状态码
# 正常的响应状态
200 -- 常规请求
201 -- 创建成功
# 重定向响应
301 -- 永久重定向
302 -- 暂时重定向
# 客户端异常
403 -- 请求无权限
404 -- 请求路径不存在
405 -- 请求方法不存在
# 服务器异常
500
4.8 错误的处理,应该返回错误的信息
[
{
"status": 404,
"msg": "缺少关键性参数book_id"
}
]
4.9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
4.10 需要url请求的资源需要访问资源的请求链接
# Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{
"status": 0,
"msg": "ok",
"results":[
{
"name":"肯德基(罗餐厅)",
"img": "https://image.baidu.com/kfc/001.png"
}
...
]
}
五 DRF的安装以及简单的使用
# 安装DRF
pip install djangorestframework
pip install pymysql
# 如果下载过慢,可以将下载源换成清华源
# 创建django项目
django-admin startproject drfdemo
# 在setttings.py中注册app
(DRF框架中本质是是一个app)
INSTALLED_APPS = [
'rest_framework'
]