關(guān)于Flask 項目中使用 Swagger 的探索

引言:

  • Flask是一款流行的Python實現(xiàn)的Web開發(fā)微框架嘉冒;
  • Swagger是一款Restful接口的文檔在線自動生成+功能測試功能軟件
  • 當下支持 Flask 和 Swagger 的工具大概如下:

綜合比較了一下,flask-restplus 對框架入侵較大咆繁, flask-swagger 集成 Swagger-UI比較繁瑣讳推,故嘗試使用 flasgger。
本文簡單介紹了 flasgger 的用法玩般,以及解決的痛點和帶來的痛點银觅。

使用方法

  • 安裝使用:
    • 示例:
# 安裝  flasgger==0.9.5
pip install flasgger==0.9.5
  • 加載 swagger
# -*- coding: utf-8 -*-
from traffic import app
from flasgger import Swagger
app.ready()
if app.g.is_dev():
    # 開發(fā)環(huán)境增加 swagger 文檔,并且指定路由
    swagger = Swagger(app, config={"specs_route": "/traffic/apidocs/"}, merge=True)

if __name__ == '__main__':
    app.run('0.0.0.0', 3001, threaded=True)

  • 在API中使用
@api.route('/member.current', perm_ids=[], methods=['GET'])
@swag_from('../../../../apidocs/member/current.yml')  # 此處為文檔地址,相對路徑
def get_current_user():
    """
    當前用戶昵稱及權(quán)限
    :return:
    """
  • 對應(yīng)的文檔說明(apidocs/member/current.yml)
tags:
  - member
summary: "查詢信息接口"
description: "接口描述"
consumes:
  - "application/json"
produces:
  - "application/json"

responses:
  200:
    description: 正確返回的格式
    schema:
      $ref: "#/definitions/resultDto"
  400:
    description: Bad request
  401:
    description: 未登錄
  403:
    description: Forbidden
  404:
    description: Not found
  500:
    description: Internal Server Error

definitions:
  resultDto:
      type: "object"
      properties:
        code:
          type: "string"
          default: "000000"
        message:
          type: "string"
          default: "成功"
        payload:
          type: "object"
          properties:
            role_ids:
              type: "array"
              items:
                $ref: '#/definitions/int_format'
            member_id:
              type: "integer"
            name:
              type: "string"
            origin_member_name:
              type: "string"
            perm_keys:
              type: "array"
              items:
                $ref: '#/definitions/int_format'
  int_format:
    type: "integer"


  • 功能
    • API 文檔:說明了 Api 接口的基本信息坏为,請求信息究驴,返回信息
    • API調(diào)試:類似 postman,自動填充參數(shù)類型和返回信息,能做基礎(chǔ)參數(shù)驗證匀伏。較之 postman 用戶體驗更佳
    • 驗證參數(shù)格式類型洒忧,校驗更加嚴謹

使用 Swagger 的目的:

  • 提升API的質(zhì)量,方便開發(fā)進行自測
  • 前端某些框架可自動根據(jù) Swagger 生成或優(yōu)化代碼够颠,提升效率

痛點:

  • 嚴謹?shù)囊?guī)范給工程師帶來不適熙侍,簡單的接口或許會花費更多的時間來維護 swagger
  • 工程師需要花費學習成本
  • 需要調(diào)整現(xiàn)有的工作模式
    • 原有模式: 設(shè)計階段后,開發(fā)簡單快速出一份API文檔給前端,然后進行開發(fā)蛉抓。雙方交涉較少庆尘。
    • 新的模式:設(shè)計階段后,開發(fā)需要花時間整理詳細的 Swagger 格式接口文檔巷送。開發(fā)需要部署 swagger 環(huán)境驶忌,交付前端,進行開發(fā)笑跛。API 文檔流程加長了

附錄:swagger yml 文件簡單規(guī)則示例(https://blog.csdn.net/u010466329/article/details/78522992)付魔,具體查閱官方文檔

  • GET 接口
#接口概要
summary: 查詢所有用戶信息
#接口描述
description: 查詢出所有用戶的所有信息,用戶名飞蹂,別名
#標簽几苍,方便快速過濾出User相關(guān)的接口
tags:
    - User
parameters:
#上面接口中定義了{id},則參數(shù)列表中必須包含參數(shù)id,并且請求類型為path
    - name: id
      in: path
      description: 要查詢的用戶的用戶名,它是唯一標識
      required: true
      type: string
 
#返回值描述晤柄,必要自動
responses:
#返回的http狀態(tài)碼
200:
  description: 所有用戶信息或者用戶的集合信息
  #描述返回值
  schema:
    #返回值格式擦剑,可選的有array,integer,string,boolean
    type: array
    #針對array,每個條目的格式,type定義為array.必要填寫items
    items:
      #引用在definitions下定義的Users
      $ref: '#/definitions/User'
#執(zhí)行出錯的處理
default:
  description: 操作異常,執(zhí)行失敗.返回信息描述錯誤詳情
  schema:
    #值類型
    type: object
    #定義屬性
    properties:
    #屬性名
      message:
        #類型
        type: string
  • POST 接口
description: 注冊一個用戶
#請求參數(shù)
parameters:
  #參數(shù)key
- name: username
  #傳遞方法,formData表示表單傳輸芥颈,還有query表示url拼接傳輸惠勒,path表示作為url的一部分
  #body表示http頭承載參數(shù)(body只能有一個,有body不能在有其他的)
  in: formData
  #參數(shù)描述
  description: 用戶名,不能使用已經(jīng)被注冊過的
  #參數(shù)是否必要爬坑,默認false
  required: true
  #參數(shù)類型纠屋,可選的包括array,integer,boolean,string.使用array必須使用items
  type: string
- name: password
  in: formData
  description: 用戶登陸密碼,加密傳輸盾计,加密存儲
  required: true
  type: string
- name: alias
  in: formData
  type: string
  description: 用戶別名
  #非必要字段
  required: false
responses:
#返回的http狀態(tài)碼
200:
  description: 通過返回值來標示執(zhí)行結(jié)果 返回true表示執(zhí)行成功
  schema:
     #值類型
      type: object
      #定義屬性
      properties:
      #屬性名
        status:
          #類型
          type: boolean
          #描述
          description: 是否成功
#執(zhí)行出錯的處理
default:
  description: 操作異常,執(zhí)行失敗.返回信息描述錯誤詳情
  schema:
    #值類型
    type: object
    #定義屬性
    properties:
    #屬性名
      message:
        #類型
        type: string

  • 定義model信息
definitions:
  User:
    #值類型
    type: object
    #定義屬性
    properties:
    #屬性名
      id:
        #類型
        type: string
        #描述
        description: 用戶的唯一id
      username:
        type: string
        description: 用戶名
      alias:
        type: string
        description: 別名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末售担,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子署辉,更是在濱河造成了極大的恐慌族铆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哭尝,死亡現(xiàn)場離奇詭異哥攘,居然都是意外死亡,警方通過查閱死者的電腦和手機材鹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門逝淹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桶唐,你說我怎么就攤上這事栅葡。” “怎么了尤泽?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵欣簇,是天一觀的道長规脸。 經(jīng)常有香客問我,道長醉蚁,這世上最難降的妖魔是什么燃辖? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任鬼店,我火速辦了婚禮网棍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妇智。我一直安慰自己滥玷,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布巍棱。 她就那樣靜靜地躺著惑畴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪航徙。 梳的紋絲不亂的頭發(fā)上如贷,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音到踏,去河邊找鬼杠袱。 笑死,一個胖子當著我的面吹牛窝稿,可吹牛的內(nèi)容都是我干的楣富。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼伴榔,長吁一口氣:“原來是場噩夢啊……” “哼纹蝴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踪少,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤塘安,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后援奢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兼犯,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年萝究,在試婚紗的時候發(fā)現(xiàn)自己被綠了免都。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡帆竹,死狀恐怖绕娘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栽连,我是刑警寧澤险领,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布侨舆,位于F島的核電站,受9級特大地震影響绢陌,放射性物質(zhì)發(fā)生泄漏挨下。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一脐湾、第九天 我趴在偏房一處隱蔽的房頂上張望臭笆。 院中可真熱鬧,春花似錦秤掌、人聲如沸愁铺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茵乱。三九已至,卻和暖如春孟岛,著一層夾襖步出監(jiān)牢的瞬間瓶竭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工渠羞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斤贰,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓堵未,卻偏偏與公主長得像腋舌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子渗蟹,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容