Flask + Swagger 完整指南:从安装到配置和注释

在构建 RESTful API 时,文档是非常重要的一部分。为了确保开发人员和用户能够轻松理解和使用 API,我们可以通过 Swagger 来生成自动化的 API 文档。本文将介绍如何在 Flask 应用中集成 Swagger,从安装到配置以及使用注释来生成文档。

1. 什么是 Swagger?

Swagger 是一种用于生成 API 文档的工具集,通过简单的注释或定义文件,自动生成漂亮的、交互式的 API 文档。结合 Flask 使用时,我们可以通过 flasgger 库来集成 Swagger。

2. 环境准备
安装 Flask 和 Flasgger

首先,我们需要安装 Flask 和 flasgger 库。
 

pip install Flask flasgger

Flasgger 是一个基于 Swagger 的 Flask 扩展,可以帮助你轻松地为 Flask 项目生成 API 文档。

3. 配置 Swagger

创建一个简单的 Flask 应用,并配置 Swagger。我们可以通过 flasgger.Swagger 来快速启动 Swagger 文档服务。

代码示例:
 
from flask import Flask
from flasgger import Swaggerapp = Flask(__name__)# 初始化 Swagger
swagger = Swagger(app)@app.route('/api/hello', methods=['GET'])
def hello():"""简单的 Hello World API---responses:200:description: 返回 Hello, World!"""return "Hello, World!"if __name__ == '__main__':app.run(debug=True)

在这个示例中,我们创建了一个简单的 Flask 应用,并通过 Swagger(app) 来初始化 Swagger 服务。启动应用后,你可以通过 http://127.0.0.1:5000/apidocs/ 访问自动生成的 Swagger 文档。

4. 编写注释生成 API 文档

Swagger 使用注释 (docstring) 来描述 API 路由的细节。为了生成更详细的 API 文档,我们可以在每个 Flask 视图函数的注释中提供相应的 Swagger 配置。

更详细的注释示例:
 
from flask import Flask, request, jsonify
from flasgger import Swaggerapp = Flask(__name__)
swagger = Swagger(app)@app.route('/api/echo', methods=['POST'])
def echo():"""Echo API---tags:- Echoparameters:- name: bodyin: bodyrequired: trueschema:type: objectproperties:message:type: stringexample: 'Hello, world!'responses:200:description: 返回用户输入的消息schema:type: objectproperties:message:type: stringexample: 'Hello, world!'"""data = request.get_json()return jsonify({"message": data.get('message', 'No message provided')})if __name__ == '__main__':app.run(debug=True)

在这个示例中,我们创建了一个 POST /api/echo 的 API,它接受一个 JSON 对象并返回相同的内容。注释部分使用了 Swagger 规范来定义 API 的输入参数和返回结果:

  • tags: 为 API 指定标签,用于文档中进行分类。
  • parameters: 定义请求的参数。在这个例子中,我们定义了一个 body 参数,要求传递一个 JSON 对象。
  • responses: 描述不同响应码下 API 的返回结果。在这个例子中,我们定义了一个 200 响应,返回相同的消息内容。
5. 添加更多复杂的 API 注释

为了展示更复杂的场景,你可以为 API 添加路径参数、查询参数、表单参数、请求体等详细描述。

添加路径参数的例子:
@app.route('/api/greet/<name>', methods=['GET'])
def greet(name):"""打招呼 API---tags:- Greetparameters:- name: namein: pathtype: stringrequired: truedescription: 用户名responses:200:description: 返回一个问候信息schema:type: objectproperties:greeting:type: stringexample: 'Hello, Alice!'"""return jsonify({"greeting": f"Hello, {name}!"})

在这个例子中,我们定义了一个带有路径参数的 API,使用 <name> 来从 URL 中提取参数。文档注释中,我们通过 parameters 定义了路径参数 name,并且标记为必填项。

添加查询参数的例子:
 
@app.route('/api/search', methods=['GET'])
def search():"""搜索 API---tags:- Searchparameters:- name: queryin: querytype: stringrequired: truedescription: 搜索关键词responses:200:description: 返回搜索结果schema:type: objectproperties:result:type: stringexample: 'Search result for query'"""query = request.args.get('query')return jsonify({"result": f"Search result for {query}"})

在这里,我们通过查询字符串 query 进行搜索,并在注释中定义了查询参数 query

6. 访问 Swagger UI

启动应用程序后,访问 http://127.0.0.1:5000/apidocs/,你将看到自动生成的 Swagger UI,能够与 API 进行交互。Swagger UI 是一个功能丰富的工具,可以帮助你测试 API、查看 API 结构、了解 API 可能返回的响应等。

7. 高级配置

你还可以通过 app.config 进行更高级的配置,比如自定义文档标题、描述等。

自定义 Swagger 配置:
 
app.config['SWAGGER'] = {'title': '我的 API 文档','uiversion': 3
}swagger = Swagger(app)

在此配置中,我们自定义了文档标题,并指定了 Swagger UI 的版本为 3。

8. 小结

通过本文,我们学习了如何使用 Flasgger 将 Swagger 集成到 Flask 应用中,从安装到配置,再到如何通过注释生成自动化的 API 文档。使用 Swagger 可以显著提升 API 文档的维护效率和易用性,帮助开发人员更好地理解和使用 API。

希望这篇文章能帮助你在 Flask 项目中更好地使用 Swagger。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540561.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 2、写一个脚本&#xff0c;包含以下内容&#xff1a; 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 1、在家目录下创建目录文件&#xff0c;dir 2、dir下创建dir1和dir2 …

【JAVA入门】Day48 - 线程池

【JAVA入门】Day48 - 线程池 文章目录 【JAVA入门】Day48 - 线程池一、线程池的主要核心原理二、自定义线程池三、线程池的大小 我们之前写的代码都是&#xff0c;用到线程的时候再创建&#xff0c;用完之后线程也就消失了&#xff0c;实际上这是不对的&#xff0c;它会浪费计算…

网络流之最大流(EK 模板)

EK的时间复杂度是O( )。 EK 算法 和 dinic 算法的区别是 &#xff1a;EK是通过 bfs 找到一条增广流&#xff0c;然后累加&#xff0c;循环此步骤直到 bfs 找不到增广流&#xff1b;而 dinic 算法 是通过 bfs 分层找到一条增广流&#xff0c;然后通过 dfs 跑完 当前分层图中所…

基于SpringBoot的中小医院管理系统

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

温故--javaproject

nginx反向代理和负载均衡 nginx 反向代理&#xff0c;就是将前端发送的动态请求由 nginx 转发到后端服务器 提高访问速度 因为nginx本身可以进行缓存&#xff0c;如果访问的同一接口&#xff0c;并且做了数据缓存&#xff0c;nginx就直接可把数据返回&#xff0c;不需要真正…

C++_21_模板

模板 简介&#xff1a; 一种用于实现通用编程的机制。 通过使用模板我们可以编写可复用的代码&#xff0c;可以适用于多种数据类型。 C模板的语法使用角括号 < > 来表示泛型类型&#xff0c;并使用关键字 template 来定义和声明模板 概念&#xff1a; c范式编程 特点&…

Telephony VOWIFI

1、VOWIFI框架 参考3GPP 23402文档, VOWIFI有如下相关架构设置。 1、S2a信任的WIFI热点 2、S2b非信任WIF热点 3、S2c直联核心WIF热点 目前使用比较多的为S2b非信任WIF热点。 2、EPDG建立过程 //Telephony Log IWLAN拨号 08-30 21:36:34.702857 1347 5131 D ConnectivityS…

基于YOLOv5的教室人数检测统计系统

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量&#xff0c;适用于多种应用场景&#xff0c;比如 自动考勤、安全监控或空间利用分析 以下是如何构建这样一个系统的概述&#xff0c;包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入…

排序----希尔排序

void ShellSort(int* a, int n) {int gap n;while (gap > 1){// 1保证最后一个gap一定是1// gap > 1时是预排序// gap 1时是插入排序gap gap / 3 1;for (size_t i 0; i < n - gap; i){int end i;int tmp a[end gap];while (end > 0){if (tmp < a[end]){…

Linux——K8s集群部署过程

&#xff11;、环境准备 &#xff08;1&#xff09;配置好网络ip和主机名 control: node1: node2: 配置ip 主机名的过程省略 配置一个简单的基于hosts文件的名称解析 [rootnode1 ~]# vim /etc/hosts // 文件中新增以下三行 192.168.110.10 control 192.168.110.11 node1 1…

【redis-01】redis基本数据类型和使用场景

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325 redis基本数据类型和使用场景 一&#xff0c;redis基本数据类型和使用场景1&#xff0c;String数据类型2&#xff0c;Hash数据类型3&#xff…

mat工具的几个实用地方

背景 使用mat的过程中&#xff0c;有几个值得关注的注意点&#xff0c;可以帮助我们尽快查找到问题的答案 mat实用的注意点 一.打开直方图后排序&#xff0c;直观查看内存占用大小,如下图所示 二.查看某个对象实例的具体值&#xff0c;点击对象&#xff0c;点击List Object…

vulnhub靶场 DC-3

地址: https://download.vulnhub.com/dc/DC-3-2.zip 开启NAT模式 namp只扫到了一个端口 打开网页有一个登录的页面 目录扫描一下,可以找到一个 后台登录界面 看一下指纹信息 joomla cms 网上搜一下可以发现存在一个JoomScan工具 在kali上面安装一下 apt install joomscan …

CSP-J2024全真模拟题 阅读程序题3+程序填空题

由于明天考试&#xff0c;今天晚上给大家提供详细的答案和解析&#xff0c;求关注点赞和评论 28.将第 1 行改为 &#xff03;include<iostream>&#xff0c;程序的运行结果不变。&#xff08;&#xff09; A.对B.错 29.本程序用到了队列而不是栈的思想。&#xff08;&a…

大数据新视界 --大数据大厂之算法在大数据中的核心作用:提升效率与智能决策

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

缓存装饰器@cached_property

这个装饰器好像在好多包里都有&#xff0c;我在阅读源码的过程中&#xff0c;transformers.utils也有这个。查阅资料&#xff0c;大体上了解了它的用法。参考&#xff1a;[python]cached_property缓存装饰器 - faithfu - 博客园 这个装饰器用在类里面的某个方法前面&#xff0…

7个提升网站分页体验的 CSS 和 JavaScript 代码片段

文章目录 前言正文1.简洁直观的悬停分页效果2.实时显示页码的分页3.适合响应式设计的多功能分页4.专为移动设备优化的分页5.无数字的极简分页设计6.触屏友好的分页7.结合无限滚动与分页的设计 总结 前言 分页是内容丰富的网站中不可缺少的导航工具&#xff0c;能帮助用户更轻松…

C++_CH18_构造函数与析构函数

C_CH18_构造函数与析构函数 1 类的默认成员函数 在编写类的时候&#xff0c;C编译器会默认生成6个默认的函数&#xff0c;但是不显示出来&#xff1a; 需要关注以下两个方面: 第一:我们不写时&#xff0c;编译器默认生成的函数行为是什么&#xff0c;是否满足我们的需求。 …

Java流程控制语句——条件控制语句详解(附有流程图)#Java条件控制语句有哪些?#if-else、switch

在 Java 编程中&#xff0c;条件控制语句用于控制程序的执行路径&#xff0c;决定根据某些条件来选择执行某段代码或跳过某段代码。它们是 Java 编程的重要组成部分&#xff0c;帮助开发者根据不同的输入、状态或数据流来编写更加灵活和动态的代码。在本文中&#xff0c;我们将…

【省时省力】告别 Node.js 安装配置的繁琐!国内镜像源加速,版本切换轻松搞定

前言 最近电脑开发环境又意外出现了异常,每次更新系统都是冒着很大的风险,这次最直接的影响就是一些基于nodejs的前端项目. 不同项目的版本环境要求不一致,最新的nodejs并不总是满足项目要求,因此为了重新部署自己开发的以及别人开发的项目,需要根据项目随时切换到相应的版本.…