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   重定向  301302 ---》问301302的区别?一个是临时重定向一个是永久重定向
        -4xx   客户端错误 403404  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
posted @   一颗平凡的小石头  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示