顶部左侧内容
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 在线教程 > 正文

Flasgger - 为Flask快速生成Swagger文档

gosiye 2024-08-21 14:54 5 浏览 0 评论

接手了一个用Flask写的API项目,但一看到项目里那散落着的残缺的Markdown文档,你就觉得头大。

能不能生成一个可以清晰描述接口,还能进行交互测试的文档呢?

Swagger,这个用于生成、描述、调用和可视化 RESTful 风格的 Web 服务框架,已经成为 API 文档的事实标准。

而 Flasgger,把 Swagger 带给了 Flask。



简介

Flasgger,是 flasgger 组织在Github上开源的解析和渲染 SwaggerUI 的 Flask 拓展。

其提供了对于Swagger文档标准的解析和SwaggerUI的生成,支持使用YAML、Python字典和Marshmallow Schema的定义,

支持使用JSON Schema进行数据验证,支持Flask-RESTful框架的使用,对于使用Flask框架的开发者而言十分方便。



安装

使用 pip 安装即可:

pip install flasgger

如果需要使用 Marshmallow Schema,那么还需要依赖

pip install marshmallow apispec

示例

Flasgger支持直接在docstring中进行文档YAML格式的定义:

from flask import Flask, jsonify
from flasgger import Swagger

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

@app.route('/colors/<palette>/')
def colors(palette):
    """Example endpoint returning a list of colors by palette
    This is using docstrings for specifications.
    ---
    parameters:
      - name: palette
        in: path
        type: string
        enum: ['all', 'rgb', 'cmyk']
        required: true
        default: all
    definitions:
      Palette:
        type: object
        properties:
          palette_name:
            type: array
            items:
              $ref: '#/definitions/Color'
      Color:
        type: string
    responses:
      200:
        description: A list of colors (may be filtered by palette)
        schema:
          $ref: '#/definitions/Palette'
        examples:
          rgb: ['red', 'green', 'blue']
    """
    all_colors = {
        'cmyk': ['cian', 'magenta', 'yellow', 'black'],
        'rgb': ['red', 'green', 'blue']
    }
    if palette == 'all':
        result = all_colors
    else:
        result = {palette: all_colors.get(palette)}

    return jsonify(result)

app.run(debug=True)

这是一个完整的Flask 应用例子,我们定义了一个接口,它接受色调参数,返回颜色的列表。

可以看到,可以直接把Swagger的文档定义直接放在接口的docstring中,进行了包括参数、数据结构定义、示例响应等的定义。

运行应用,Flassger就会对文档定义进行解析,并生成SwaggerUI的文档界面。

运行后,访问 http://localhost:5000/apidocs/,就会看到生成的文档界面。



可以看到,这是Swagger提供的文档界面,上面包含了我们刚刚定义的接口的定义。

此外,展开参数栏,我们可以看到接口的参数palette的类型和可选值等描述,



并且可以进行接口的测试,调用接口,并显示返回的HTTP响应。



文档中还展示了我们定义的数据类型。



此外,我们还可以把文档写在独立的YAML文件中,再在接口中引用。可以使用装饰器来引用:

from flasgger import swag_from

@app.route('/colors/<palette>/')
@swag_from('colors.yml')
def colors(palette):
    ...

也可以在docstring中使用file来标注:
@app.route('/colors/<palette>/')
def colors(palette):
    """
    file: colors.yml
    """
    ...

也可以在docstring中使用file来标注:

@app.route('/colors/<palette>/')
def colors(palette):
    """
    file: colors.yml
    """
    ...

我们也可以结合Python序列化库 Marshmallow 来进行文档的定义

class Color(Schema):
    name = fields.Str()

class Palette(Schema):
    pallete_name = fields.Str()
    colors = fields.Nested(Color, many=True)

class PaletteView(SwaggerView):
    parameters = [
        {
            "name": "palette",
            "in": "path",
            "type": "string",
            "enum": ["all", "rgb", "cmyk"],
            "required": True,
            "default": "all"
        }
    ]
    responses = {
        200: {
            "description": "A list of colors (may be filtered by palette)",
            "schema": Palette
        }
    }

我们可以看到,相比于前面使用JSON Schema的方式,这里直接引用了Marshmallow的Schema来进行数据类型的定义

此外,还可以利用Json Schema对定义的接口进行输入数据的验证等,当验证不通过就会抛出异常并返回错误信息。

@swag_from('defs.yml', validation=True)
def post():
    ...



总结

Flassger把Swagger引入到了Flask中,使得在Flask的API开发能够快速地进行文档的编写和展示,方便了项目的对接和后期维护。

Flassger功能众多,接口使用方便,文档丰富,目前处于稳定开发阶段。

随着Swagger向OpenAPI发展,并从2.0向3.0迈进,Flasgger也在跟进开发,感兴趣的开发者可以进一步参与开源贡献。

相关推荐

全球最大的H5网站模板库(h5页面模板下载)

当今社会,互联网迅猛发展,在网络营销中,客户往往通过企业的网站建设留下对该企业的第一印象,一个优秀的企业网站已成为企业发展的重要纽带,嗨创H5,拥有国内外一流的技术团队,潜心专研网站建设6年,是全球最...

wordpress集团公司网站模板:XSgr(wordpress建站公司)

小兽wordpress推出一款高端集团公司主题,打造高品质官网。高端是一种态度和坚持,因为我坚信贴合产品及品牌理念的高端深度定制才能最大化地呈现企业的务实严谨与产品的专业品质相比,某种程度上讲–...

私心推荐,小编酷爱的五款高逼格网站模板

建站宝盒的网站模板上千套之多,各有各的风格色彩,但是,弱水三千,小编我却只取一瓢饮,在这上千套模板之中,小编酷爱的网站模板有五套,让小编私心推荐一下吧!1、茶叶贸易公司网站模板小编对这款网站模板可是一...

「书讯」政府网站用户行为研究与应用

《政府网站用户行为研究与应用》作者:刘合翔著出版日期:2018年6月开本:16开出版社:经济管理出版社小编推荐《政府网站用户行为研究与应用》的主题是关于政府网站用户行为的特征规律及其在政府网站优...

免费服务器-搭建模板网站的操作流程(图文版)

之前发文《创业者的官网:如何搭建免费云服务器及操作面板(图文版)》,因为做了视频才发现,创业者对视频的需求,远远低于对图文解说的需求。因此,补充图文教程,不清楚的看官们,可以直接看视频版本进行细部学...

快收藏这些高逼格H5网站模板吧,不绕弯子直接下载

上面这些响应式H5网站是不是很炫酷,比起那些“在线一键生成”是不是好太多了?关键是,那些一键制作都不会开放源码给你,自定义性也很局限。不过说到底还是难看。今天笔者推荐大家一个模板网站,全都是高质量的响...

如何开发网站建设管理系统模板(如何开发网站建设管理系统模板图片)

根据用户网站需求文档设计美工图,并设计数据库结构,让网站开发人员可以更多地关注前台美工,先对照美工图,编写静态HTML页面,按网站建设管理系统模板语法,修改编写好的静态HTML页面,运行。不再需要对...

C语言的数据类型介绍(c语言的数据类型介绍是什么)

在计算机系统中,数据是放在内存中的,数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么0001000该理解为数字8呢,还是图像中某个像素的颜色...

C 语言格式化输出函数中常用的格式符号

在之前介绍输入输出函数的文章中,有提到格式化输入输出函数都有包含一种特殊的符号——格式符号。那篇文章中关于格式符号也只是一笔带过,没有进行深入挖掘。本篇文章主要对输出函数(printf)中的一些常用格...

C#中的类型转换(c#数据转换类)

计算机存储的基本单位:字节我们知道一个字节(Byte)有8个比特(bit)构成,比特是存储的最小单位,表示0和1,但为什么计算机存储的基本单位是字节,而不是比特呢?假设我们要存储数字3(二进制:11...

Java8中String内存空间占用分析(电脑里下载的文件怎样删除才不会占用内存空间)

1.前言分析之前,简单回顾一下对象的内存分布。在HotSpot虚拟机中,对象在堆内存中的存储布局可以划分为三部分:对象头、实例数据和对齐填充。对象头包含两部分内容:MarkWord和类型指针。实例数据...

「每日C语言」数据类型大小和取值范围

对于c语言来说,数据类型是一个很重要的概念和知识点,它涉及到的是内存的空间,这在和硬件交互的时候是非常重要的。K&R给出了7个数据类型相关的关键字,分别是:int、long、short、uns...

【c语言学习笔记】数据类型(c语言里面的数据类型)

c语言学习笔记,欢迎大家能在评论区提出我学习错误的地方方便我进行改正~在计算机中,计算机用二进制来储存数据,在c语言中有许多的数据类型用来存储数据,当然不同的数据类型所用的内存占用也不一样,下面就来用...

关于MySQL varchar类型最大值,原来一直都理解错了

我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。写在前面关于MySQLvarchar字段类型的最大值计算,也许我们一直都理解错误了,...

C语言数据类型的转换(c语言数据类型的转换方式)

类型转换在C语言程序中,经常需要对不同类型的数据进行运算,为了解决数据类型不一致的问题,需要对数据的类型进行转换。例如一个浮点数和一个整数相加,必须先将两个数转换成同一类型。C语言程序中的类型...

取消回复欢迎 发表评论: