亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言使用swagger生成接口文檔的方法

 更新時(shí)間:2020年09月08日 09:35:09   作者:Q1mi  
這篇文章主要介紹了Go語言使用swagger生成接口文檔的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

swagger介紹

Swagger本質(zhì)上是一種用于描述使用JSON表示的RESTful API的接口描述語言。Swagger與一組開源軟件工具一起使用,以設(shè)計(jì)、構(gòu)建、記錄和使用RESTful Web服務(wù)。Swagger包括自動(dòng)文檔,代碼生成和測(cè)試用例生成。

在前后端分離的項(xiàng)目開發(fā)過程中,如果后端同學(xué)能夠提供一份清晰明了的接口文檔,那么就能極大地提高大家的溝通效率和開發(fā)效率??墒蔷帉懡涌谖臋n歷來都是令人頭痛的,而且后續(xù)接口文檔的維護(hù)也十分耗費(fèi)精力。

最好是有一種方案能夠既滿足我們輸出文檔的需要又能隨代碼的變更自動(dòng)更新,而Swagger正是那種能幫我們解決接口文檔問題的工具。

這里以gin框架為例,使用gin-swagger庫以使用Swagger 2.0自動(dòng)生成RESTful API文檔。

gin-swagger實(shí)戰(zhàn)

想要使用gin-swagger為你的代碼自動(dòng)生成接口文檔,一般需要下面三個(gè)步驟:

  • 按照swagger要求給接口代碼添加聲明式注釋,具體參照聲明式注釋格式
  • 使用swag工具掃描代碼自動(dòng)生成API接口文檔數(shù)據(jù)
  • 使用gin-swagger渲染在線接口文檔頁面

第一步:添加注釋

在程序入口main函數(shù)上以注釋的方式寫下項(xiàng)目相關(guān)介紹信息。

package main

// @title 這里寫標(biāo)題
// @version 1.0
// @description 這里寫描述信息
// @termsOfService http://swagger.io/terms/

// @contact.name 這里寫聯(lián)系人信息
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io

// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html

// @host 這里寫接口服務(wù)的host
// @BasePath 這里寫base path
func main() {
 r := gin.New()

 // liwenzhou.com ...

 r.Run()
}

在你代碼中處理請(qǐng)求的接口函數(shù)(通常位于controller層)按如下方式寫上注釋:

// GetPostListHandler2 升級(jí)版帖子列表接口
// @Summary 升級(jí)版帖子列表接口
// @Description 可按社區(qū)按時(shí)間或分?jǐn)?shù)排序查詢帖子列表接口
// @Tags 帖子相關(guān)接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 用戶令牌"
// @Param object query models.ParamPostList false "查詢參數(shù)"
// @Security ApiKeyAuth
// @Success 200 {object} _ResponsePostList
// @Router /posts2 [get]
func GetPostListHandler2(c *gin.Context) {
 // GET請(qǐng)求參數(shù)(query string):/api/v1/posts2?page=1&size=10&order=time
 // 初始化結(jié)構(gòu)體時(shí)指定初始參數(shù)
 p := &models.ParamPostList{
 Page: 1,
 Size: 10,
 Order: models.OrderTime,
 }

 if err := c.ShouldBindQuery(p); err != nil {
 zap.L().Error("GetPostListHandler2 with invalid params", zap.Error(err))
 ResponseError(c, CodeInvalidParam)
 return
 }
 data, err := logic.GetPostListNew(p)
 // 獲取數(shù)據(jù)
 if err != nil {
 zap.L().Error("logic.GetPostList() failed", zap.Error(err))
 ResponseError(c, CodeServerBusy)
 return
 }
 ResponseSuccess(c, data)
 // 返回響應(yīng)
}

上面注釋中參數(shù)類型使用了object,models.ParamPostList具體定義如下:

// bluebell/models/params.go

// ParamPostList 獲取帖子列表query string參數(shù)
type ParamPostList struct {
 CommunityID int64 `json:"community_id" form:"community_id"` // 可以為空
 Page int64 `json:"page" form:"page" example:"1"` // 頁碼
 Size int64 `json:"size" form:"size" example:"10"` // 每頁數(shù)據(jù)量
 Order string `json:"order" form:"order" example:"score"` // 排序依據(jù)
}

響應(yīng)數(shù)據(jù)類型也使用的object,我個(gè)人習(xí)慣在controller層專門定義一個(gè)docs_models.go文件來存儲(chǔ)文檔中使用的響應(yīng)數(shù)據(jù)model。

// bluebell/controller/docs_models.go

// _ResponsePostList 帖子列表接口響應(yīng)數(shù)據(jù)
type _ResponsePostList struct {
 Code ResCode   `json:"code"` // 業(yè)務(wù)響應(yīng)狀態(tài)碼
 Message string   `json:"message"` // 提示信息
 Data []*models.ApiPostDetail `json:"data"` // 數(shù)據(jù)
}

第二步:生成接口文檔數(shù)據(jù)

編寫完注釋后,使用以下命令安裝swag工具:

go get -u github.com/swaggo/swag/cmd/swag

在項(xiàng)目根目錄執(zhí)行以下命令,使用swag工具生成接口文檔數(shù)據(jù)。

swag init

執(zhí)行完上述命令后,如果你寫的注釋格式?jīng)]問題,此時(shí)你的項(xiàng)目根目錄下會(huì)多出一個(gè)docs文件夾。

./docs
├── docs.go
├── swagger.json
└── swagger.yaml

第三步:引入gin-swagger渲染文檔數(shù)據(jù)

然后在項(xiàng)目代碼中注冊(cè)路由的地方按如下方式引入gin-swagger相關(guān)內(nèi)容:

import (
 // liwenzhou.com ...

 _ "bluebell/docs" // 千萬不要忘了導(dǎo)入把你上一步生成的docs

 gs "github.com/swaggo/gin-swagger"
 "github.com/swaggo/gin-swagger/swaggerFiles"

 "github.com/gin-gonic/gin"
)

注冊(cè)swagger api相關(guān)路由

r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))

把你的項(xiàng)目程序運(yùn)行起來,打開瀏覽器訪問http://localhost:8080/swagger/index.html就能看到Swagger 2.0 Api文檔了。

gin_swagger文檔

gin-swagger同時(shí)還提供了DisablingWrapHandler函數(shù),方便我們通過設(shè)置某些環(huán)境變量來禁用Swagger。例如:

r.GET("/swagger/*any", gs.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE"))

此時(shí)如果將環(huán)境變量NAME_OF_ENV_VARIABLE設(shè)置為任意值,則/swagger/*any將返回404響應(yīng),就像未指定路由時(shí)一樣。

總結(jié)

到此這篇關(guān)于Go語言使用swagger生成接口文檔的文章就介紹到這了,更多相關(guān)Go使用swagger生成接口文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則

    Golang時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則

    這篇文章主要為大家介紹了Golang?時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Golang線程池與協(xié)程池的使用

    Golang線程池與協(xié)程池的使用

    在Golang中,線程池和協(xié)程池是非常常見且重要的概念,它們可以提高應(yīng)用程序的并發(fā)處理能力和性能,減少資源的浪費(fèi),本文就來介紹一下Golang線程池與協(xié)程池的使用,感興趣的可以了解一下
    2024-04-04
  • Golang實(shí)現(xiàn)帶優(yōu)先級(jí)的select

    Golang實(shí)現(xiàn)帶優(yōu)先級(jí)的select

    這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)帶優(yōu)先級(jí)的select,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,需要的可以參考一下
    2023-04-04
  • GO中的時(shí)間操作總結(jié)(time&dateparse)

    GO中的時(shí)間操作總結(jié)(time&dateparse)

    日常開發(fā)過程中,對(duì)于時(shí)間的操作可謂是無處不在,但是想實(shí)現(xiàn)時(shí)間自由還是不簡(jiǎn)單的,多種時(shí)間格式容易混淆,本文為大家整理了一下GO中的時(shí)間操作,有需要的可以參考下
    2023-09-09
  • golang 64位linux環(huán)境下編譯出32位程序操作

    golang 64位linux環(huán)境下編譯出32位程序操作

    這篇文章主要介紹了golang 64位linux環(huán)境下編譯出32位程序操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoLang實(shí)現(xiàn)日志收集器流程講解

    GoLang實(shí)現(xiàn)日志收集器流程講解

    這篇文章主要介紹了GoLang實(shí)現(xiàn)日志收集器流程,看日志是開發(fā)者平時(shí)排查BUG所必須的掌握的技能,但是日志冗雜,所以寫個(gè)小工具來收集這些日志幫助我們排查BUG,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • Gin框架中參數(shù)校驗(yàn)優(yōu)化詳解

    Gin框架中參數(shù)校驗(yàn)優(yōu)化詳解

    這篇文章主要為大家詳細(xì)介紹了Gin框架中參數(shù)校驗(yàn)優(yōu)化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-08-08
  • go語言串口通信的項(xiàng)目實(shí)踐

    go語言串口通信的項(xiàng)目實(shí)踐

    在Go語言可以使用github.com/tarm/serial包來進(jìn)行串口通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Go中的動(dòng)態(tài)速率限制有效控制流量

    Go中的動(dòng)態(tài)速率限制有效控制流量

    這篇文章主要為大家介紹了Go中的動(dòng)態(tài)速率限制有效控制流量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang字符串拼接實(shí)現(xiàn)方式和區(qū)別對(duì)比

    golang字符串拼接實(shí)現(xiàn)方式和區(qū)別對(duì)比

    本文介紹了Go語言中字符串拼接的多種方法及其優(yōu)缺點(diǎn),推薦使用strings.Builder進(jìn)行頻繁拼接以優(yōu)化內(nèi)存分配和性能,同時(shí),還討論了通過sync.Pool優(yōu)化高頻創(chuàng)建的對(duì)象,以減少垃圾回收壓力,感興趣的朋友一起看看吧
    2025-02-02

最新評(píng)論