首页 > 其他分享 >DRF入门规范,API接口,接口测试工具,restful规范,序列化和反序列化,drf安装和快速使用

DRF入门规范,API接口,接口测试工具,restful规范,序列化和反序列化,drf安装和快速使用

时间:2024-07-24 22:19:50浏览次数:6  
标签:baidu 规范 接口 api https 序列化 com

Ⅰ DRF入门规范

【一】 Web应用模式

  • 在开发Web应用中,有两种应用模式:

【1】前后端不分离

【2】前后端分离

【3】前后端开发模式

# 1 前后端混合开发
-不少公司在用  
    -flask 混合
    -django 混合
    -例如最简单的bbs项目 
-模板:dtl语法:django template language 模板语法
        {{ }}
        {% %}
-在后端渲染:
        qs对象--->循环写到模板中--->模板语法写的
-渲染完后--->模板--->纯粹的 html,css,js-->不会再含有 模板语法了
-返回到客户端浏览器--->看到好看的样子
-页面静态化
-如果要做混合开发
    -会后端
    -稍微会点前端
        -前端后端配合
        -全栈开发
            
            
# 2 前后端分离
-后端只做后端-->一点前端都不接触--->写接口API
-前端专门做前端--->大前端
    -web前端
    -安卓,ios
    -微信小程序
    -桌面应用
    。。。。
        
-分开写
    -前端
    -后端
-前后端联调

Ⅱ 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&region=%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&region=%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"
                }
              	...
        		]
        }
        

【一】api 接口是什么

# api 接口是什么
规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
    127.0.0.1:8080/login/?username=silence&age=19
    127.0.0.1:8080/books/

【二】api 接口所含有的东西

# api接口所含有的东西
1 url:url链接
2 请求方式:get、post、delete、put。。。。
3 请求参数:json或xml格式的key-value类型数据  
    地址栏中:login/?name=lqz&age=19
    请求体中:不同编码格式:urlencoded,json,form-data。。。。
        urlencoded:name=lqz&age=19
        json:{"name":"lqz","age":19}
        form-data: 文件混合数据
4 响应结果:json或xml格式的数据

【三】http:请求协议

不同设备之间进行交互 遵循 .HTTP协议. 规则
HTTP协议里面规定了 请求模型与响应模型
服务端遵循 HTTP协议的响应格式
return "200 OK HTTP/1.1" + 响应头 + "\r\n" + 响应体数据

1.请求格式
请求首行 请求方法 请求路径 协议版本
请求头 kv键值对
换行
请求体

2.响应格式
响应首行  响应状态码 协议版本
响应头
换行
响应体

Ⅲ 接口测试工具

【一】了解

# 老牌收费:postman    国产免费:APIfox    开源:postwoman
	-可以模拟发送http请求的软件
    	-可以发送任意请求
        -可以携带请求头,请求体,请求参数。。。

【二】 Apifox

  • Apifox = Postman + Swagger[接口文档] + Mock[模拟测试数据] + JMeter[压测工具]
  • 下载地址:https://apifox.com/

  • 使用

【三】postman

Ⅳ restful规范

  • REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。
  • RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
  • 这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
  • 事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
# 前后端分离后,后端写api接口
	接口不能乱写
    有些规范
    	restful规范:公共的规范,大家都尽量遵守的规范
        公司自己的规范
    RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中  

【一】数据的安全保障,url链接使用https

  • url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

# 数据的安全保障--url链接使用https
    http
    https:更安全

【二】接口特征表现,接口中带api标识

注:看到api字眼,就代表该请求url链接是完成前后台数据交互的

# 接口中带api标识
    	https://api.baidu.com
		https://www.baidu.com/api

【三】多数据版本共存,接口中带版本标识

注:url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下)

# 接口中带版本标识
    	https://api.baidu.com/v1
        https://api.baidu.com/v2

【四】数据即是资源,均使用名词(可用复数)

注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词,错误示范:https://api.baidu.com/delete-user

#  数据即是资源,均使用名词(可用复数)
        https://api.baidu.com/users
        https://api.baidu.com/books
        https://api.baidu.com/book

【五】资源操作由请求方式决定,通过请求方式,决定资源操作方式(增删查改-->curd)

#  通过请求方式,决定资源操作方式(增删查改--》curd)
        https://api.baidu.com/books - get请求:获取所有书
        https://api.baidu.com/books - post请求:新增一本书书
        https://api.baidu.com/books/1 - get请求:获取主键为1的书
        https://api.baidu.com/books/1 - put请求:整体修改主键为1的书
        https://api.baidu.com/books/1 - delete请求:删除主键为1的书

【六】过滤,通过在url上传参的形式传递搜索条件,请求地址中带过滤条件

# 请求地址中带过滤条件
		https://api.example.com/v1/zoos?name=周杰伦

【七】响应中带状态码

【1】正常响应

  • 响应状态码2xx
    • 200:常规请求
    • 201:创建成功

【2】 重定向响应

  • 响应状态码3xx
    • 301:永久重定向
    • 302:暂时重定向

【3】客户端异常

  • 响应状态码4xx
    • 403:请求无权限
    • 404:请求路径不存在
    • 405:请求方法不存在

【4】服务器异常

  • 响应状态码5xx
    • 500:服务器异常
# 响应中带状态码
		- http响应状态码:1xx,2xx,3xx,4xx,5xx
    	- 公司自定义的状态码
        	-100 成功
            -101 xx错误
            -102  xx错误
        - mysql:遇到错误,不要搜文字,搜错误码
        -{code:100}

【八】错误处理,应返回错误信息

{
    error: "无权限操作"
}
# 响应中带错误信息
		-{code:101,msg:"用户名密码错误"}
    	-{code:100,msg:"成功"}

【九】 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范

#  返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范  
		GET /collection:返回资源对象的列表(数组)  
    		[{name:红楼梦,price:100},{name:红楼梦1price:90}]
        GET /collection/resource:返回单个资源对象
        	-{name:红楼梦,price:100}
        POST /collection:返回新生成的资源对象
        	-{name:红楼梦,price:100}
        PUT /collection/resource:返回完整的资源对象
        	-{name:红楼梦,price:100}
        DELETE /collection/resource:返回一个空文档

【十】需要url请求的资源需要访问资源的请求链接

#  返回数据中带url链接
# Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{
  	"status": 0,
  	"msg": "ok",
  	"results":[
        {
            "name":"肯德基(罗餐厅)",
            "img": "https://image.baidu.com/kfc/001.png"
        }
      	...
		]
}
  • 最后,比较好的接口返回格式
{
  	"code": 0,
  	"msg": "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"
        }
      	...
		]
}

Ⅴ 序列化和反序列化

  • 序列化指的是:数据转换格式
  • api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

【一】 序列化

  • 把我们识别的数据[字典,列表,对象]转换成指定的格式[json格式字符串,pickle二进制]提供给别人。
例如:我们在django中获取到的数据默认是模型对象(queryset对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成json格式字符串,提供给别人。

【二】反序列化

  • 把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

【三】小结

# 1 序列化指的是:数据转换格式

# 2 api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

# 序列化: 把我们识别的数据[字典,列表,对象]转换成指定的格式[json格式字符串,pickle二进制]提供给别人。

例如:我们在django中获取到的数据默认是模型对象(queryset对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成json格式字符串,提供给别人。

# 反序列化:把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

Ⅵ drf安装和快速使用

【一】drf是什么

  • django rest framwork:django框架上 一个可以快速实现restful规范接口的 快速开发框架

【二】Django REST framework介绍

  • 核心思想: 缩减编写api接口的代码
  • Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口

【三】特点

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持;[jwt]
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富

【四】drf安装

# 安装
	pip3 install djangorestframework
    最新drf支持django4.x以上   # 若是3有的功能/版本会不兼容  而其装drf时他会帮你卸载 并帮你安装最新版本django
    django:pip3 install django==4.2.14
    drf:pip3 install djangorestframework --upgrade     # 3.15.2

【五】关于软件版本

#  关于软件版本
	python:  
        3.12.x
        3.11.09  # 小版本做bug更改
        
# 09  小版本做bug更改
# 11  大版本做功能改进
# 3   可能其架构都开始改变

【六】drf使用

【1】创建一个Django项目:djangodrf 并创建APP:app01

  • app01下的models创建一个表,并迁移数据库
  • models.py
from django.db import models

# Create your models here.

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()

【2】进行路由分发

  • djangodrf 下的urls进行路由分发

  • urls.py


from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('app01.urls')),
]

  • app01下的urls

from django.contrib import admin
from django.urls import path


from .views import BookView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('books', BookView, 'books')



urlpatterns = [

]

urlpatterns += router.urls

【3】视图层

  • app01下的views
from django.shortcuts import render

# Create your views here.

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializer import BookSerializer

class BookView(ModelViewSet):
    serializer_class = BookSerializer
    queryset = Book.objects.all()

【4】serializer.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

【5】在表中添加数据

【6】运行程序,用Postman对数据进行增删改查

(1)查看全部

(2)增加

(3)单个查看

(4)修改

(5)删除

标签:baidu,规范,接口,api,https,序列化,com
From: https://www.cnblogs.com/zyb123/p/18321865

相关文章

  • 关于武汉芯景科技有限公司的RS485通信接口芯片XJ13488EESA开发指南(兼容MAX13488EESA)
    一、芯片引脚介绍及应用电路1.芯片引脚图​2.引脚的定义及描述​3.芯片的逻辑关系二、自动收发控制电路        当检测到输入数据有变化时,电路会自动切换到发送模式,将数据发送到通信线上。当没有数据需要发送时,电路会自动切换回接收模式,监听通信线上的数......
  • 主流平台电商售后API接口详解
    售后订单是电商卖家常需要处理的业务,售后率高的话会特别耗费精力,接入电商售后API接口可高效支持全流程的售后处理操作,商家无需登录店铺后台,售后管理更为便捷。但并不是所有电商平台都全面开放了电商售后API接口,这里总结了一些主流平台电商售后API接口,看看有没有你需要的。一、......
  • RestSharp编写api接口测试,并实现异步调用(不卡顿)
    首先,确保你已经安装了RestSharpNuGet包。如果没有安装,可以通过以下命令安装:bashInstall-PackageRestSharp然后,在你的C#代码中,你可以按照以下步骤操作:引用RestSharp命名空间。创建一个RestClient实例。创建一个RestRequest实例,并设置请求方法和URL。执行异步POST请求。......
  • 简单易用的分页插件 原生HTML分页功能 JS ajax对接后台数据接口的调用
    简单易用的分页插件原生HTML分页功能JSajax对接后台数据接口的调用先来看一下整体的效果图如下:今天给大家推荐jQuery-Paging插件,一个用于简化网页分页的轻量级工具,包含自定义样式、动态生成分页、事件处理和集成示例。详细说明了如何在HTML中使用该插件及其功能配置。......
  • python编码规范
    本篇讲的是代码格式化的问题,解决格式化的方法在最下方,不想看内容的,滑到最下方就好了。一、变量的命名规则1.组成:字母、数字、下划线2.不可以以数字开头3.不建议使用下划线开头4.命名需见名知意5.不要与关键字重名。如何查找所有关键字?importkeywordprint(keyword.k......
  • JAVA常见面试题-Map接口有哪些实现类
    HashMap、TreeMap、LinkedHashMap、Hashtable、Properties由于Map中结构特点(Key无序的,不可重复,并且使用Set存储所有的key,value无序的,可重复,并且使用Collection存储所有的value)故key所在类需要重写hashCode(),equal()方法,value只需要重写equal。一个键值对:key-value构成了一个......
  • Django 序列化程序无法将查询集序列化为 JSON
    尝试简单的Django序列化器。我使用具有特定值的queryset然后我将queryset或queryset.values()传递给序列化器。为什么会出现500错误?@csrf_protectdefgeoLookup(request,**kwargs):country=kwargs.get('Country')city=kwargs.get('Place'......
  • jackson序列化(jackson codec)
    Jackson是一个用于Java平台的开源JSON库,它提供了灵活且高效的方式来处理JSON数据的序列化(Java对象→JSON字符串)和反序列化(JSON字符串→Java对象)。以下是Jackson的一些主要特点和功能:高性能:Jackson通过使用基于流的处理模型和性能优化技术,提供了出色的性能。它支......
  • [Unity]通用倒计时接口
    1.介绍游戏开发时还是蛮经常会遇到与时间有关的功能,最近整理了下把游戏在线的倒计时抽出了一个接口。在线游戏的倒计时通用需求一般有:1).倒计时的时间,比如树的重生长时间为3分钟,角色死亡复活倒计时需要30秒..2).可以暂停的功能,比如单机游戏点开设置,那么树的重生长倒计时应该停......
  • 【Java基础语法】内置接口
    前言:小编紧接着上期抽象类与接口进行了拓展,介绍了一些Java内置有用的接口,希望能够对大家有所帮助。上期博客http://t.csdnimg.cn/0MoDe1.Comparable接口1.1Comparable接口在如下代码中:publicstaticvoidmain(String[]args){Student[]student=newStuden......