Flasgger 文档生成完全教程:从零开始掌握 4 种规范定义方法

Flasgger 文档生成完全教程:从零开始掌握 4 种规范定义方法

【免费下载链接】flasgger 【免费下载链接】flasgger 项目地址: https://gitcode.com/gh_mirrors/fla/flasgger

Flasgger 是一款专为 Flask 应用打造的 API 文档生成工具,它能帮助开发者轻松创建符合 OpenAPI 规范的交互式 API 文档。本教程将带您从零开始,掌握 4 种实用的 API 规范定义方法,让您的 API 文档既专业又易用。

为什么选择 Flasgger?

在现代 API 开发中,清晰的文档是团队协作和用户体验的关键。Flasgger 作为 Flask 的扩展,具有以下优势:

  • 自动生成:减少手动编写文档的工作量
  • 交互式界面:提供直观的 API 测试环境
  • 多规范支持:兼容 Swagger/OpenAPI 2.0 和 3.0
  • 灵活集成:支持多种定义 API 规范的方式

Flasgger API 文档示例 Flasgger 生成的交互式 API 文档界面,支持在线测试 API 端点

准备工作:安装与基础配置

首先,确保您的环境中已安装 Python 和 pip。通过以下命令安装 Flasgger:

pip install flasgger

基础 Flask 应用集成 Flasgger 的示例代码:

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)
swagger = Swagger(app)

@app.route('/colors')
def colors():
    """
    获取颜色列表
    ---
    responses:
      200:
        description: 成功返回颜色列表
        schema:
          type: array
          items:
            type: string
    """
    return ['red', 'blue', 'green']

if __name__ == '__main__':
    app.run(debug=True)

方法一:使用装饰器内联定义(快速入门)

内联定义是最简单直接的方式,通过在路由函数的文档字符串中使用 YAML 格式定义 API 规范。

基本用法

@app.route('/colors/<palette>')
def colors(palette):
    """
    根据调色板获取颜色列表
    ---
    parameters:
      - name: palette
        in: path
        type: string
        required: true
        enum: ['rgb', 'cmyk']
    responses:
      200:
        description: 成功返回指定调色板的颜色列表
    """
    palettes = {
        'rgb': ['red', 'green', 'blue'],
        'cmyk': ['cyan', 'magenta', 'yellow', 'black']
    }
    return palettes.get(palette, [])

这种方式适合简单的 API 端点,规范与代码紧密结合,便于维护。

Flasgger 内联定义示例 使用内联定义生成的 API 文档,显示参数和响应示例

方法二:从 YAML/JSON 文件加载规范(规范分离)

对于复杂的 API 规范,建议将其存储在单独的 YAML 或 JSON 文件中,保持代码整洁。

步骤 1:创建规范文件

创建 examples/username_specs.yml 文件:

parameters:
  - name: username
    in: path
    type: string
    required: true
responses:
  200:
    description: 成功返回用户信息

步骤 2:在代码中引用

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)
swagger = Swagger(app)

@app.route('/user/<username>')
@swag_from('username_specs.yml')
def user_profile(username):
    return f"User: {username}"

if __name__ == '__main__':
    app.run(debug=True)

通过 @swag_from 装饰器引用外部规范文件,支持指定 HTTP 方法:

@swag_from('user_specs.yml', methods=['GET', 'POST'])
def user_operations():
    pass

方法三:使用 Python 字典定义规范(动态生成)

对于需要动态生成的规范,可以使用 Python 字典来定义 API 规范。

基本示例

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)
swagger = Swagger(app)

colors_spec = {
    "parameters": [
        {
            "name": "palette",
            "in": "path",
            "type": "string",
            "required": True,
            "enum": ["rgb", "cmyk"]
        }
    ],
    "responses": {
        "200": {
            "description": "成功返回颜色列表"
        }
    }
}

@app.route('/colors/<palette>')
@swag_from(colors_spec)
def colors(palette):
    palettes = {
        'rgb': ['red', 'green', 'blue'],
        'cmyk': ['cyan', 'magenta', 'yellow', 'black']
    }
    return palettes.get(palette, [])

if __name__ == '__main__':
    app.run(debug=True)

这种方式适合需要根据条件动态调整的规范,例如从数据库加载参数选项。

方法四:使用 Swagger 配置对象(全局设置)

通过配置 Swagger 对象,可以设置全局 API 信息,并集中管理多个规范。

全局配置示例

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)

swagger_config = {
    "headers": [],
    "specs": [
        {
            "endpoint": 'apispec_1',
            "route": '/apispec_1.json',
            "rule_filter": lambda rule: True,
            "model_filter": lambda tag: True,
        }
    ],
    "static_url_path": "/flasgger_static",
    "swagger_ui": True,
    "specs_route": "/swagger/"
}

swagger = Swagger(app, config=swagger_config)

@app.route('/colors')
def colors():
    """
    获取颜色列表
    ---
    responses:
      200:
        description: 成功返回颜色列表
    """
    return ['red', 'blue', 'green']

if __name__ == '__main__':
    app.run(debug=True)

通过这种方式,可以配置多个规范端点,支持版本控制和多文档管理。

高级技巧:规范合并与覆盖

Flasgger 支持规范的合并与覆盖,让您可以创建基础规范并在特定端点中扩展。

合并示例

base_spec = {
    "parameters": [
        {"name": "api_key", "in": "header", "type": "string", "required": True}
    ]
}

@app.route('/protected')
@swag_from(base_spec)
@swag_from({
    "responses": {
        "200": {"description": "受保护资源"}
    }
})
def protected_resource():
    pass

常见问题与解决方案

如何支持 OpenAPI 3.0?

在初始化 Swagger 时指定 openapi_version 参数:

swagger = Swagger(app, openapi_version='3.0.0')

如何添加自定义验证?

使用 @swag.validate 装饰器:

@swag.validate('User')
@app.route('/user', methods=['POST'])
def create_user():
    pass

如何隐藏 Swagger UI?

在配置中设置 swagger_ui=False

swagger = Swagger(app, config={"swagger_ui": False})

总结

通过本教程,您已经掌握了 Flasgger 的四种规范定义方法:

  1. 内联定义:适合简单 API,代码与规范紧密结合
  2. 外部文件:适合复杂规范,保持代码整洁
  3. 字典定义:适合动态生成的规范
  4. 全局配置:适合多规范管理和全局设置

Flasgger 为 Flask 应用提供了灵活而强大的 API 文档解决方案,无论是小型项目还是大型应用都能轻松应对。开始使用 Flasgger,让您的 API 文档更加专业、易用!

要查看更多示例,可以参考项目中的 examples/ 目录,其中包含了各种使用场景的完整代码示例。

【免费下载链接】flasgger 【免费下载链接】flasgger 项目地址: https://gitcode.com/gh_mirrors/fla/flasgger

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值