web开发模式 api接口 api接口测试工具 restful规范 序列化与反序列化 drf快速使用
概要
-
web开发模式
-
api接口
-
api接口测试工具
-
restful规范
-
序列化反序列化
-
drf快速使用
内容详细
1.web开发模式
# 我们见过的所有软件,百分90%的都是web软件,只要通过http,websocket
# web后端----python后端开发工作-----不仅仅是开发软件
例如:微信,迅雷,百度网盘
osi七层 mysql,redis:底层基于tcp传输层通信>>>>>后期慢慢基于应用层http通信
# 开发模式两大类
1.前后端混合开发 比如bbs项目,前后端混合一起写的项目
既要写后端(django:python界的web框架),又要写前端(js,css,html + 模板语法(dtl))
一般大公司:如果写前后端混合项目:
后端人员写后端+模板语法
前端人员写js,css,html:前端人员不懂什么是:模板语法,dtl, jsp,php(模板语法)
针对小公司:前后端完全是一个人写
"""
dtl模板的渲染(执行)是在后端执行完-------然后给到前端(浏览器) 前端浏览器只有html,css,js
ps:js和dtl混写(混写可能出现问题): js前端浏览器执行 而dtl在后端服务器的python解释器中执行 """
2.前后端分离---时下主流
后端人员只写后端,一点前端都不碰,对外提供【接口(django,flask,sanic,fastapi,springboot,gin,beego);
前端人员只写前端,模板语法压根不知道 (vue,react)
如果在使用前后端分离模式下:dtl,模板语法,完全没有用武之地
涉及到全栈工程师 一般是只有在一些创业型公司里面存在--- 如果公司敢让你写,你就勇敢大胆的写!!!
大公司一般分工明确 前后端分离
2.api接口
# 别人提供的一些资源,以api接口的形式给你,你直接访问就可以拿到# 前后端信息交互的媒介
前端(pc,小程序,app)-------到后端
代码层面:路由匹配成功====视图函数====返回json格式数据 这样操作的东西称之为接口
# 针对于写接口 我们也要有规范----restful规范
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本
# 比如微博 会对外开放提供接口----api接口
如果你是一个第三方开发者(不是微博公司里的员工)----也可以利用微博开放的api接口,写出微博的项目
比如:我们要写一个展示最近微博热点新闻的app----可以直接调开发的api接口
# api接口的本质:别人提供的一些资源,以api接口的形式给你,你直接访问就可以拿到
# 我们都知道接口的概念很大,api接口只是接口中的一种---api是只针对于 http请求返回xml,json数据的这种接口
3.api接口测试工具
# 后端开发----开发了很多api接口(可能公司自己使用,给第三方使用)
# 在写完api接口后 我们的接口写的对不对 有没有存在问题---需要测试才知道---所以有了测试api切口的测试工具postman(前期是免费的 现在收费)、postwomen(有工程师仿着postman制造一个开源的)
# 针对接口测试工具:用法基本一致 我们主要是以postman讲为例
# 对于 form-data、urlencoded 、json 三种请求编码是否有区别?
form-data:上传文件
urlencoded:form、ajax表单默认
json:只能用ajax,需要指定一个contentType:application/json
# 在django中 如果使用form-data或者urlencoded编码--那么提交的数据直接从“POST”取出来
# 如果是json格式编码,从POST中取不出来,只能从request.body中取出来,然后json转一下才能用
# postman就是一个替代浏览器 发送http请求的工具
# 因为用浏览器不能发送post,只能用代码写ajax发请求
# 通过postman可以发送任意请求
postman最基本使用:
下载安装之后 进入页面直接点skip and go to the app 进入软件后 点左上角加号(+),在get(可以选择get/post/put/delete等选择后)里面写(接口地址)地址:http//:www.baidu.com,然后点sending 然后在body内就可以拿响应体的内容
ps:请求头headers里面可以加cookie
post请求的数据放在请求体body中 类似于ajax中post请求提交的数据
在请求体body中:
form-data:上传文件
urlencoded:form、ajax表单默认
raw(json):只能用ajax,需要指定一个contentType:application/json 后期前后端分离使用的多 需要在raw里面选json
postman高级一点的用法(可能公司做测试人员会用到):# collection:可以批量的管理,导入导入很多api接口
-测试数据都带着,不会丢
具体操作:点击左侧collection边上的加号--new collection--可以改名 比如:路飞项目的集合 在这个集合内可以选add request ---get 登录接口---然后输入地址 在body内选择raw、json 然后输入数据{"username":"jason","password":123} 这样还可以建三个接口(post登录接口 get注册接口 put查询所有图书接口)
待所有写好之后 只需要在...处点一下 run collection 然后postman会自动一次性把所有的接口全部测完
测试完之后 还可以发给我们的同事 点击... 然后勾选export导入到桌面上 然后发给我们同事后用postman新建一个file 然后运行文件就可以了
4.restful规范
# 写api接口时候 不可能想写成什么样就什么样 得有个规范 主流认可的是"restful规范",REST全称是Representational State Transfer 表征性状态转移
# restful是一种定义web API接口的涉及风格 尤其适用于前后端分离的应用模式中
restful 10条规范
1 使用https数据交互 http+tsl/ssl=https 比http更安全,交互是加密传输
-交互用json---》如果很轻易被截获---》明文显示给别人,数据不安全
2.接口地址中带api标识
https://api.baidu.com/books 域名中
https://www.baidu.com/api 地址中
3.接口地址中标识版本标识
-https://api.baidu.com/v1
https://api.weibo.com/2/statuses/user_timeline.json
-登陆功能:用户名密码 如果把原来的接口改了---》老app还能用吗?
-升级了app:用户名密码验证码 新写一个接口v
4. 数据即是资源,均使用名词,不要出现动词
-删除图书接口
-好的:https://api.baidu.com/v1/books
-不好的:https://api.baidu.com/v1/delete-books
-新增图书:https://api.baidu.com/v1/books
5 资源操作由请求方式决定
-新增图书:https://api.baidu.com/v1/books post
-删除图书:https://api.baidu.com/v1/books delete
-修改图书:https://api.baidu.com/v1/books put
-获取图书:https://api.baidu.com/v1/books get
6. 地址中带搜索条件
-https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
-https://api.baidu.com/v1/books?name=红楼梦
7 响应状态码
-http的响应状态码
-1xx 请求正在处理
-2xx 成功 200 请求成功 201 创建成功
-3xx 重定向 301 和 302 ---》问301和302的区别?一个是临时重定向一个是永久重定向
-4xx 客户端错误 403 和 404 403:没有权限 404:地址不存在
-5xx 服务端错误
-响应中带状态码
{code:100}
8 响应中带错误信息
{code:999,msg:登陆失败}
9 针对不同操作,服务器向用户返回的结果应该符合以下规范
GET /collection:返回资源对象的列表(数组)
-[{name:红楼梦,price:12},{name:西游记,price:12}]
GET /collection/resource:返回单个资源对象
-{name:西游记,price:12}
POST /collection:返回新生成的资源对象
-{name:西厢记,price:12}
PUT /collection/resource:返回完整的资源对象
-{name:西游记,price:12}
PATCH /collection/resource:返回完整的资源对象
-{name:西游记,price:12}
DELETE /collection/resource:返回一个空文档
10 响应中带链接地址
# 只要能说出3,4条即可,面试可能会问,你讲讲resful规范?
# 只是一个规范,公司可以不按照这个规范来,公司有自己的的,但是大部分还是按它来的
5.序列化与反序列化
# 序列化:把我们识别的数据转换成指定的格式提供给别人
python后端:python的对象、字典、列表
前端:字符串,json格式字符串
实质:把我们能识别的格式---转换成别人能识别的格式给他
比如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人
# 反序列化:把别人提供的数据转换/还原成我们需要的格式
前端:字符串 、json格式字符串 提交给我们
python后端:把json格式字符串转换成我们能够识别的格式:字典、对象、querysite对象
比如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中
# 前后端分离开发中 站在后端开发的角度来理解:
序列化---就是别人读我的数据read--数据出的过程 数据由后端给到前端
反序列化---就是别人给我数据write--我们需要把数据写入(存入)数据库中---数据进的过程 数据由前端给到后端
6.drf(django rest framework)快速使用
# 局限性:drf:django rest framework的英文缩写 它使django的一个app插件 只能用在django框架上
# 作用:它可以帮助我们快速的写出符合restful规范的接口
# 两者之间的关系:drf和django的版本之间有一定的对应关系
如果是django 2.2.2版本 drf最新版本可能不支持(稍微降一下drf版本)
# django 2.2.2(公司用2.X版本用的多) drf 最新版本
python 3.8版本
django2.2.2版本
drf 3.12.4版本
# 安装
# 方式一:pip3 install djangorestframework
# 方式二:在pycharm中点点点
# 快速使用:以后见到的所有接口 都是这5个和变形的样式
增加图书
获取一本图书
获取所有图书
删除一本图书
修改一本图书
打开django2.2后
在models.py文件中:
class Book(models.Model):
name = models.CharField(max_length=32)
price = models.integeField()
在app01表内建立一个python.py文件修改为serializer.py文件
然后在serializer.py文件中:
from rest_framework import serializers
from .models import Book
calss Bookserializer(serializers.ModelSerializer):
calss MeTa:
model= Book
fields = '__all__'
在views.py中:
from rest_framework.viewsets import Modelviewset
from .models import Book
from .serializer import Bookserializer
class BookView(Modelviewset):
queryset= Book.objects.all()
serializer_class = BookSerializer
在路由层urls.py文件中:
from app01.views import BookView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('book',BookView,'book')
然后在建一下表:makemigration、migrate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY