-web开发模式
--前后端不分离
即后端直接返回前端html页面,需要利用DTL(Django Template Language)书写
--前后端分离
只专注于写后端接口,浏览器不在后端服务器上请求页面,后端服务器只给前端返回json 或 xml格式的数据
-API接口
api接口就是前后端信息交互规则的url链接,也就是前后端信息交互的媒介
为了团队内不同人不同习惯的差异带来的影响,需要设计一套大家都觉得好的接口规范,以提高开发效率
eg:比如查百度地图上成都动物园的位置 所有参数就是api
-postman使用
当我们写完一堆接口后,想测试一下接口通不通,向这个接口发送请求是否会返回数据,若写一些测试代码比较麻烦。于是可以借助于接口测试工具postman
原理:就是模拟发送http请求
接口测试工具有很多,postman是比较好用的一个
同时postman还支持批量导出和接口测试
下载地址:Download Postman | Get Started for Free
-RESTful规范
REST(Representational State Transfer),中文译为"表征性状态转移",它从资源的角度类审视整个网络,将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
RESTful是一种定义web api接口的设计规范,代表的是一种软件架构风格,尤其适用于前后端分离的项目开发中
事实上,任何一个框架都可以实现符合RESTful规范的api接口
--RESTful API设计
'''restful规范就是写API接口的规范,大部分的接口都会按照这个规范去写,相当于web API接口库的设计风格'''
- 数据的安全保障
url链接一般都采用https协议进行传输,提高数据交互的安全性
- 接口特征表现
# 一看就知道是个api接口 实现方式:用api关键字表示接口,一看到api就知道是用于前后端交互的链接 https://api.baidu.com 或 https://www.baidu.com/api
- 多数据版本共存
# 在url中标识数据版本 https://api.baidu.com/v1 https://api.baidu.com/v2
- 数据即是资源
# 均使用名词(可复数) '''接口一般用于完成前后端数据交互,交互数据称为资源''' 比如我们要请求某图书馆网站的书的资源,就把该接口当做真正的书,查一本就用单数,查全部就用复数。而不是用操作资源的动词来规范 https://api.weerlibrary.com/book https://api.weerlibrary.com/books # 查所有的书,而不是/get_all_books类的
- 资源操作由请求方式决定
'''操作资源一般都涉及到增删改查,用请求方式来表示动作''' -https:// api.baidu.com/books get请求时,获取所有书 -https:// api.baidu.com/books/1 get请求时,拿主键为1的书 -https:// api.baidu.com/books post请求时,新增一本书 -https:// api.baidu.com/books/1 put请求时,整体修改主键为1的书 -https:// api.baidu.com/books/1 patch请求时,局部修改主键为1的书 -https:// api.baidu.com/books/1 delete请求时,删除主键为1的书
- 过滤
'''通过url上传参的形式传递过滤条件''' -https:// api.baidu.com/v1/zoos?limit=10 指定返回记录数量 -https:// api.baidu.com/v1/zoos?offset=10 指定返回记录的开始位置 -https:// api.baidu.com/v1/zoos?page=2&per_page=100 指定第几页及每页记录数 -https:// api.baidu.com/v2/zoos?sortby=name&order=asc 按name排序,升序 -https:// api.baidu.com/v2/zoos?animal_id=1 指定筛选条件
- 响应状态码
正常响应: 200 常规请求 201 创建成功 重定向响应: 301 永久重定向 302 暂时重定向 客户端异常: 403 请求无权限 404 请求路径不存在 405 请求方法不存在 服务器异常: 500 服务器异常 其它 202 表示一个请求已经进入后台排队(异步任务) 204 用户删除数据成功 400 用户发出的请求有错误,服务器没有进行新建或修改数据的操作 401 表示用户没有权限(令牌、用户名、密码错误)
- 错误处理
'''应返回错误信息''' eg: { error:'错误信息', }
- 返回结果
'''不同操作返回结果类型有异''' /collection GET 返回资源对象的列表(数组) /collection/resource GET 返回单个资源对象 /collection POST 返回新生成的资源对象 /collection/resource PUT返回完整资源对象 /collection/resource PATCH返回完整资源对象 /collection/resource DELETE返回一个空文档
- url需要请求访问的资源加上访问资源链接
{ "status": 0, "msg": "ok", "results":[ { "name": "肯德基", "img": "https: //image.baidu.com/kfc/001.png" } … ] }