Flask實現(xiàn)swagger在線文檔與接口測試流程詳解
閱讀對象:知道什么是restful,有了解swagger或者openAPI更佳。
1.什么是restful
Representional State Transfer(REST):表征狀態(tài)轉(zhuǎn)移。是一種一種基于HTTP協(xié)議的架構(gòu)。采用Web 服務(wù)使用標(biāo)準(zhǔn)的 HTTP 方法 (GET/PUT/POST/DELETE) 將所有 Web 系統(tǒng)的服務(wù)抽象為資源。
如果REST滿足一定條件(C/S、無狀態(tài)、分層系統(tǒng)、統(tǒng)一接口),則稱為REST ful。你可以理解成REST ful就是更加規(guī)范的REST。
簡單總結(jié)就是我們通過http發(fā)起一個請求,這個請求可能是get請求,可能是post請求,然后從這個請求里面獲取到我們所需要的資源。例如A系統(tǒng)對外暴露一個接口,該接口實現(xiàn)查詢用戶信息,B系統(tǒng)通過Http請求到A系統(tǒng),然后通過這個http請求獲取到了A系統(tǒng)的用戶資源。
換句話說,就是我們需要實現(xiàn)restful,那么就得需要我們向外部暴露一個接口。
對于有Java開發(fā)經(jīng)驗的人來說,就很簡單,那就是編寫一個Controller
例如如下Controller接口表示對外暴露一個接口,那么通過瀏覽器訪問這個地址,我們就能獲取到這個任務(wù)信息(瀏覽器地址訪問采用get請求方式)
<IP:端口/域名>/task/info/{taskId}
@RestController @RequestMapping("/task") public class TaskController { @GetMapping("/info/{taskId}") public R<TaskRes> getmTaskInfoById(@PathVariable String taskId) { TaskRes task = taskService.getTaskInfoById(taskId); return R.ok(task); } }
2.swagger/openAPI能做什么
在沒有swagger之前,我們可以使用word,excel等功能來書寫接口定義文檔,但又有一個弊端。
即: 在接口改變時需要及時的同步接口文檔,否則實際的接口與接口文檔不相符,則接口文件就失去了作用,甚至?xí)鸬椒醋饔谩?/p>
比如上述接口一開始采用的是get請求,并且taskId是通過地址傳參,假設(shè)現(xiàn)在維護代碼的人將請求改成post,然后taskId放到請求body中,例如變成post+json的方式,但是很可能忘記維護接口文檔,導(dǎo)致接口文檔和實際接口不一致。
在Java中,我們可以根據(jù)在代碼中使用自定義的注解來生成接口文檔,這個在前后端分離的項目中很重要。這樣做的好處是 在開發(fā)接口時可以通過swagger 將接口文檔定義好,同時也方便以后的維護。
例如在Java中,我們可以通過如下注解:@API、@ApiModelProperty等注解來修飾我們代碼。
在python中,類似的功能叫做裝飾器
此時訪問swagger,我們即可看到如下在線的一個文檔,這個文檔能將我們Java代碼里面的注解描述信息是保持一致的。
當(dāng)然,Java畢竟生態(tài)很成熟,上述的原生swagger不太符合我們目前的使用習(xí)慣,因此使用如下的顯示插件
OpenAPI3 (swagger3) 訪問地址:http://127.0.0.1:9090/swagger-ui/index.html
knife4j UI 訪問地址:http://127.0.0.1:9090/doc.html
我們可以點擊調(diào)試,即可在線測試這個接口的功能,等價于把postman這種接口測試工具集成進來了。
3.python如何實現(xiàn)swagger
在flask框架中使用的swagger即為flasgger,flasgger是flask支持的swagger UI,便于調(diào)試使用flask框架搭建的web api接口
flasgger安裝
pip install flasgger
flasgger github開源地址
https://github.com/flasgger/flasgger
flasgger gitee開源地址
https://gitee.com/Flasgger/flasgger
4.flasgger的使用案例
比如我們現(xiàn)在需要對外提供一個接口,這個接口的請求參數(shù)如下,參數(shù)格式是一個復(fù)雜的JSON格式,包含了字符串(userName),對象(userInfo),數(shù)字(age),數(shù)組(hobby),基本上這個請求參數(shù)覆蓋我們百分之99的參數(shù)需求了
訪問地址
http://127.0.0.1:8085/apidocs/
當(dāng)我們集成完畢后,打開如上地址,就能打開python版本的swagger的頁面
可以查看Models,這個models是描述各個參數(shù),點擊這個方法,就可以看到調(diào)用的示例,可以點擊界面的try it out,就可以進行請求調(diào)試了
進入調(diào)試頁面,修改參數(shù)后,點擊執(zhí)行(Execute)按鈕。
如下就是此次我們調(diào)用接口返回的信息了。
對比之前的Java版本,我們發(fā)現(xiàn),畫面基本保持一致。當(dāng)然了由于Java生態(tài)好,所以還有bootstrapUI或者knife4j UI(換一種UI的風(fēng)格展示swagger)的支持,暫時在python中沒找到bootstrap和knife4j對python版本的swagger的支持。
如果您有python版本的bootstrapUI或者knife4j UI,或者有類似的UI,還請聯(lián)系我,大家一起學(xué)習(xí),學(xué)習(xí)。
5.完整代碼
app.py
from flask import Flask, jsonify, request from flasgger import Swagger, swag_from server = Flask(__name__) Swagger(server) server.config['JSON_AS_ASCII']=False @server.route('/flask/flasgger/demo',methods=['POST']) @swag_from('demo.yml') def demo_request(): json_data = request.json result = {"code":"200","msg":"SUCCES","data":{"name":"xxxxxx","age":25,"job":"python"}} return jsonify(result) if __name__ == "__main__": server.run(port=8085,debug=True)
demo.yml
tags: - falsk集成swagger示例 description: 示例flasgger進行在線文檔生成,添加用戶信息,請求參數(shù)覆蓋了常用的字符串、對象、數(shù)組、數(shù)字 parameters: - name: body in: body required: true schema: id: 接口參數(shù)示例 properties: userName: type: string description: 用戶自己的姓名 userInfo: properties: hobby: type: array items: type: string description: 用戶的愛好 age: type: integer description: 用戶年齡 responses: 200: description: 添加用戶成功 example: 500: description: 添加用戶失敗 example:
至此完畢,基本上本案例足以應(yīng)付大部分使用需求。當(dāng)前根據(jù)個人習(xí)慣不同,也可以采用不同的實現(xiàn)方式。具體細(xì)節(jié)見開源使用說明
flasgger github開源地址
https://github.com/flasgger/flasgger
flasgger gitee開源地址
https://gitee.com/Flasgger/flasgger
到此這篇關(guān)于Flask實現(xiàn)swagger在線文檔與接口測試流程詳解的文章就介紹到這了,更多相關(guān)Flask swagger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python機器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了python機器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-04-04詳解python架構(gòu)?PyNeuraLogic超越Transformers
這篇文章主要為大家介紹了python使用?PyNeuraLogic超越Transformers示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03Python 實現(xiàn)的 Google 批量翻譯功能
這篇文章主要介紹了Python 實現(xiàn)的 Google 批量翻譯功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08python實現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法
這篇文章主要介紹了python實現(xiàn)JAVA源代碼從ANSI到UTF-8的批量轉(zhuǎn)換方法,涉及Python針對文件操作與編碼轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-08-08python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)
本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02pandas.dataframe按行索引表達(dá)式選取方法
今天小編就為大家分享一篇pandas.dataframe按行索引表達(dá)式選取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10