『No17: gin-swagger 構(gòu)建自動(dòng)化文檔』

25.jpg

大家好,我叫謝偉,是一名程序員。

今天的主題:Swagger API 文檔

首先問(wèn)個(gè)問(wèn)題, API 文檔重不重要?

重要,前后端的交互一般流程是這樣的,后端暴露出API后,交給前端,前端根據(jù)API的響應(yīng),編寫前端頁(yè)面,一定程度上API 是前后端的交互橋梁。

所以, 我覺(jué)得 API 文檔很重要。

那么API 文檔主要要包含哪些內(nèi)容?

  • 路由:包括路徑參數(shù)、請(qǐng)求參數(shù)、還是請(qǐng)求體參數(shù)
  • 動(dòng)作:HTTP 請(qǐng)求動(dòng)作,GET、POST、DELETE、PUT
  • 響應(yīng):請(qǐng)求之后的返回值包含哪些信息,一般是JSON

之前我也寫過(guò)使用Beego 構(gòu)建API 文檔,現(xiàn)在發(fā)現(xiàn)Beego 體量太大了。稍有點(diǎn)需求就需要更改。

所以,我不太喜歡體量大的框架。

回顧下傳統(tǒng)的做法是編寫 swagger.yml 或者 swagger.json 文件。

beego API 自動(dòng)化文檔的做法是編寫注釋,注釋內(nèi)包含全局信息或者編寫應(yīng)用注釋

今天介紹的是 gin 框架 和 gin-swagger 自動(dòng)構(gòu)建 API 文檔。

手法和 beego 構(gòu)建自動(dòng)化API文檔一樣。編寫全局信息和編寫應(yīng)用注釋。


1. doc

2. 做法

  1. 要知道 swagger 注釋的語(yǔ)法
  2. 如何在 gin 內(nèi)怎么使用

注釋語(yǔ)法這個(gè),全靠查文檔。對(duì)著文檔來(lái)。

當(dāng)然我覺(jué)得最好的方法是什么呢,是模仿,找一個(gè)別人已經(jīng)寫好的,修修改改,看看能不能編譯通過(guò),編譯通過(guò)后是不是你預(yù)期的結(jié)果。不是的話,繼續(xù)修修改改,再編譯,再看是不是你希望的結(jié)果。如此反復(fù)。

效果圖:


swagger.png

第一步:編寫全局信息注釋,在主函數(shù)上編寫

格式:// @param info


// @title Swagger Example API12222
// @version 1.0
// @description This is a sample server Petstore server.
// @termsOfService http://swagger.io/terms/

// @contact.name API Support
// @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 petstore.swagger.io
// @BasePath /v1
func main() {
    r := gin.Default()
    r.GET("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    r.GET("/hello/:name", Name)
    r.Run()
}
r.GET("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

這個(gè)路由和響應(yīng)需要有,路由隨便的定義,但我覺(jué)得我這種方式一目了然,知道是文檔。

其他注釋對(duì)照著參考文檔即可。

第二步:編寫應(yīng)用注釋

即在響應(yīng)函數(shù)的上方編寫注釋

type Message struct {
    MessageInfo string `json:"message"`
}

func (m *Message) Serializer()Message{
    return Message{
        MessageInfo: m.MessageInfo,
    }

}


// Name will print hello name
// @Summary Print
// @Accept json
// @Tags Name
// @Security Bearer
// @Produce  json
// @Param name path string true "name"
// @Resource Name
// @Router /hello/{name} [get]
// @Success 200 {object} main.Message
func Name(c *gin.Context){
    name := c.Param("name")

    if name==""{
        return
    }
    var message Message

    message = Message{
        MessageInfo: fmt.Sprintf("hello %s" ,name),
    }
    c.JSON(http.StatusOK, message.Serializer())
}

這里最好把響應(yīng)體統(tǒng)一成結(jié)構(gòu)體的形式。即

type Message struct {
    MessageInfo string `json:"message"`
}

func (m *Message) Serializer()Message{
    return Message{
        MessageInfo: m.MessageInfo,
    }

}

第三步:目錄下 執(zhí)行命令


swag init

自動(dòng)生成 docs 文件夾,內(nèi)含 swagger.json 、swagger.json 、 docs.go

編譯不通過(guò),查看報(bào)錯(cuò)信息,修改注釋。

第四步:導(dǎo)入生成的 docs 文件


import (
    "github.com/swaggo/gin-swagger"
    "github.com/swaggo/gin-swagger/swaggerFiles"

    _ "./docs" // docs is generated by Swag CLI, you have to import it.
    "github.com/gin-gonic/gin"
    "net/http"
    "fmt"
)

即這個(gè) ./docs

第五步:go run main.go

訪問(wèn):http://127.0.0.1:8080/docs/index.html

即可查看 swagger 文檔。


全文完,謝謝,我是謝偉,再會(huì)。

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

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 之前寫過(guò)一篇使用Beego自動(dòng)化api文檔的文章:Beego自動(dòng)化文檔,隨著Beego的更新,1.7.0之后Bee...
    0xSen閱讀 8,548評(píng)論 0 8
  • Swagger是一個(gè)編寫API文檔的套件組合,而不是一個(gè)單一的工具。具體可以在官網(wǎng)看到。Swagger可以實(shí)現(xiàn)很多...
    寫B(tài)log不取名閱讀 20,335評(píng)論 0 6
  • 需求: 為客戶端同事寫接口文檔的各位后端同學(xué),已經(jīng)在各種場(chǎng)合回憶了使用自動(dòng)化文檔工具前手寫文檔的血淚史.我的故事卻...
    _Lyux閱讀 4,933評(píng)論 0 2
  • 大綱 Beego 是什么 為什么寫這個(gè) 如何指導(dǎo) 前幾天我寫了一個(gè)Swagger 上手指南,覺(jué)得還是讓使用者難以上...
    謝小路閱讀 13,049評(píng)論 1 12

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