swagger界面換裝

golang語言警告,其他語言需要DIY喲

Swagger這么好的東西,可惜界面太難用,API一旦多起來,找起來特別吃力,有人肯定說,自己做一套?不,覺得難用的可能不止我一個,先搜索看看,經(jīng)過3分鐘努力,我發(fā)現(xiàn)了這個


來自Stack 復(fù)制/粘貼 flow

這個ReDoc看著不錯,加入“購物車”。

看看對照效果

PetStore對比

左側(cè)tag分類折疊,中部顯示請求、返回數(shù)據(jù)結(jié)構(gòu)和注釋、右邊顯示URI和單純的結(jié)構(gòu)。

優(yōu)缺點:
swagger-ui
結(jié)構(gòu)緊湊,整體內(nèi)容居中,帶有接口測試客戶端,在接口數(shù)量較少時閱讀、測試方便。
ReDoc
tag分類默認(rèn)折疊,方便找接口;中部展示結(jié)構(gòu)注釋,符合使用習(xí)慣;右側(cè)純結(jié)構(gòu)方便構(gòu)造請求參數(shù);美中不足,缺少測試客戶端。

嗯,挺符合我的使用習(xí)慣的,swagger-ui來做接口測試實在雞肋,那么就接入試試吧。

以下內(nèi)容,使用開源項目 gin-vue-admin
展示替換 swagger-ui 為 ReDoc 的方法

// 我們得實現(xiàn)個返回ReDoc的Handler
// 用它來替換掉這個swaggerFiles.Handler
Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

讓我們一起康康 swaggerFiles.Handler
WrapHandler 調(diào)用 CustomWrapHandler,并向它傳遞 "doc.json" 作為參數(shù)。
CustomWrapHandler 函數(shù)最末尾就是核心啦,根據(jù)請求的URI,返回 index.html 或 doc.json 兩個文件。
那么,我們只要實現(xiàn)一個返回 ReDoc index.html 或 doc.json 的handler就OK啦。

我的實現(xiàn)如下

// 初始化總路由

func Routers() *gin.Engine {
    // ...
    // 替換handler
    // Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    Router.GET("/swagger/*any", handleReDoc)
    // ...
}

func handleReDoc(ctx *gin.Context) {
    i := strings.LastIndex(ctx.Request.URL.Path, "/")
    if i == -1 {
        return
    }
    suffix := ctx.Request.URL.Path[i+1:]
    switch suffix {
    case "doc.json":
        // 載入swag生成的 docs/swagger.json
        data, err := ioutil.ReadFile("docs/swagger.json")
        if err != nil {
            panic("cannot open docs/swagger.json")
        }

        _, _ = ctx.Writer.Write(data)
        return
    case "index.html":
        // 這個index.html咱們得從ReDoc的github主頁上拿
        // spec-url是swagger.json的URL,要改為當(dāng)前項目的
        const redocIndexHTML = `<!DOCTYPE html>
        <html>
          <head>
            <title>ReDoc換皮成功</title>
            <!-- needed for adaptive design -->
            <meta charset="utf-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link  rel="stylesheet">
        
            <!--
            ReDoc doesn't change outer page styles
            -->
            <style>
              body {
                margin: 0;
                padding: 0;
              }
            </style>
          </head>
          <body>
            <redoc spec-url='http://127.0.0.1:1888/swagger/doc.json'></redoc>
            <script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"> </script>
          </body>
        </html>`
        fmt.Println("ererer")
        _, _ = ctx.Writer.Write([]byte(redocIndexHTML))
        return
    default:
        _ = ctx.AbortWithError(http.StatusNotFound, errors.New("page not found"))
    }
}

gin-vue-admin項目換上ReDoc最終效果

最終效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容