60. drf之前后端开发模式_api接口_接口测试工具_Restful规范

1. 前后端开发模式

1.1 前后端混合开发

后端人员
  既要写后端,如django
  又要写前端

image

后端:django  flask  Go语言gin框架  Java语言jsp

前端:模板语法(DTL)

    HTML

    css

    js

    dtl:django template language  类python语法  {}   {%%}  xx.html--模板 

    java:  xx.jsp--模板

    go:xx.tpl--模板

    模板语法的作用:用来渲染模板

js在浏览器中运行

模板语法在后端服务器上运行

前后端混合的运行步骤:

  template目录下的xx.html模板中,以{}  {%%}的形式存储变量

  视图函数中以变量名=变量值的形式,将值传递给模板

  模板以纯粹的字符串形式,而不是{}  {%%}返回给前端

  浏览器获取到了这些包含值的字符串:html(渲染)、css(样式)、js(运行)

前后端混合的特点:模板渲染在后端完成

1.2 前后端分离

后端人员
  只写后端   API接口--访问一个地址,返回一系列数据--xml、json

前端人员
  只写前端  html、css、js
项目写完
  前后端联调

image

2. API接口

2.1 API接口的定义

规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介,称之为API接口
  127.0.0.1:8080/login/?name=avril&age=19
  127.0.0.1:8080/books/

2.2 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":"avril","age":19}
                form-data: 文件混合数据
4.响应结果:json或xml格式的数据

5. API接口遵循的协议:http
  请求首行:协议,协议版本,请求地址,请求方式
  请求头:key-value
  请求体:不同编码格式

6. 举例

通过某API接口获取上海地区的某餐饮门店数量
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 ----》get请求

image

3. 接口测试工具Postman

3.1 下载地址

https://www.postman.com/downloads/

image.

3.2 请求参数与响应参数

请求方式

请求地址

请求参数

请求头

请求体

--------

响应头

响应体

响应cookie

3.3 举例:发送get请求

[1] 请求参数与响应参数

image

[2] 请求参数之body

image

使用form-data上传文件

点击隐藏的file才能选择文件

image

3.4 导出与导入

注册账号之后才能通过ctrl+s保存请求

image

 接口请求导出为json文件

image

导入json文件

image

4. Restful规范

4.1 概念

RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。

写前后端分离项目接口的一个约定俗成的规范
10条规则,但是不一定每条都遵循,并且公司可能还有自定义的规范

4.2 规范要求

1 数据的安全保障--url链接使用https

  http
  https:更安全

2 接口中带api标识

  https://api.baidu.com
  https://www.baidu.com/api

3 接口中带版本标识

  https://api.baidu.com/v1
  https://api.baidu.com/v2

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

   url地址尽量使用名词
  接口一般都是完成前后台数据的交互,交互的数据称之为资源

  https://api.baidu.com/v1/authors  获取所有的作者
  https://api.baidu.com/v1/books  获取所有的图书
  https://api.baidu.com/v1/book

  注:一般提倡用资源的复数形式,在url链接中不要出现操作资源的动词
  错误示范:https://api.baidu.com/delete-user
  特别的接口可以出现动词,因为这些接口一般没有明确的资源,或是动词就是接口的核心含义
  https://api.baidu.com/place/search
  https://api.baidu.com/login

5 通过请求方式,决定资源操作方式   增删查改curd:create,update,retrieve,delete

  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的书

6 请求地址中带过滤条件

  https://api.example.com/v1/zoos?name=大象
  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
  region=%E4%B8%8A%E6%B5%B7&     字符串为上海
  query=%E8%82%AF%E5%BE%B7%E5%9F%BA&  字符串为肯德基  

  # get请求表示查询所有图书,要查名字中有红的图书
    https://api.baidu.com/books
    https://api.baidu.com/books?name_contains=红
  # :指定返回记录的数量
    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

7 响应中带状态码
  http响应状态码:1xx,2xx,3xx,4xx,5xx
  404和403区别
  301和302区别
  公司自定义的状态码
    100 成功
    101 xx错误
    102 xx错误

1xx(信息性状态码):表示服务器已接收请求,正在处理。
100 Continue:服务器已成功接收到请求的起始部分,客户端应继续发送剩余部分。
101 Switching Protocols:服务器要求客户端切换协议。
2xx(成功状态码):表示请求已成功被服务器接收、理解和处理。
200 OK:请求成功,服务器正常返回数据。 201 Created:请求已经成功处理,并创建了新的资源。 202 Accepted:服务器已接受请求,但尚未处理完成。 204 No Content:请求已成功处理,但没有返回任何内容。
3xx(重定向状态码):表示客户端需要采取进一步的操作才能完成请求。
301 Moved Permanently:请求的资源已被永久移动到新位置。 302 Found:请求的资源暂时被移动到新位置。 304 Not Modified:客户端使用缓存数据,请求资源未被修改。
4xx(客户端错误状态码):表示客户端发出的请求有误。
400 Bad Request:服务器无法理解客户端的请求。 401 Unauthorized:请求要求用户验证身份。 403 Forbidden:服务器拒绝执行请求,权限不足。 404 Not Found:请求的资源在服务器上不存在。
5xx(服务器错误状态码):表示服务器无法完成明显有效的请求。
500 Internal Server Error:服务器遇到了一个未曾预料的错误。 502 Bad Gateway:服务器作为网关或代理服务器时,从上游服务器收到无效的响应。 503 Service Unavailable:服务器当前无法处理请求(可能由于过载或维护)。

8 响应中带错误信息

  {status:101,message:"用户名密码错误"}
  {code:100,msg:"成功"}

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

  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:返回一个空文档         删除返回空文档

10 返回数据中带url链接

5. 序列化与反序列化

5.1 序列化

将内存中的Python数据结构(列表、字典、类实例等)转换为可存储、可传输的格式(json格式字符串、pickle二进制)

例如:

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

5.2 反序列化

将存储 / 传输后的格式数据重新还原为内存中可直接操作的 Python数据结构

例如:

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

5.3 drf的序列化与反序列化

序列化:

drf称为 read(读取数据)
queryset --- > json
返给前端
反序列化:

drf称为 write(写入数据)
字符串 --- > json
接收前端的数据

 

 

posted @ 2026-07-24 02:14  pythondjango  阅读(3)  评论(0)    收藏  举报