<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這篇文章主要介紹了Go語言使用swagger生成介面檔案的方法,希望能夠對大家的學習或工作具有一定的幫助,需要的朋友可以參考下。
在前後端分離的專案開發過程中,如果後端同學能夠提供一份清晰明瞭的介面檔案,那麼就能極大地提高大家的溝通效率和開發效率。那如何維護介面檔案,歷來都是令人頭痛的,感覺很浪費精力,而且後續介面檔案的維護也十分耗費精力。在很多年以前,也流行用word等工具寫介面檔案,這裡面的問題很多,如格式不統一、後端人員消費精力大、檔案的時效性也無法保障。
針對這類問題,最好是有一種方案能夠既滿足我們輸出檔案的需要又能隨程式碼的變更自動更新,Swagger正是那種能幫我們解決介面檔案問題的工具。
Swagger是基於標準的 OpenAPI 規範進行設計的,本質是一種用於描述使用json表示的Restful Api的介面描述語言,只要照著這套規範去編寫你的註解或通過掃描程式碼去生成註解,就能生成統一標準的介面檔案和一系列 Swagger 工具。Swagger包括自動檔案,程式碼生成和測試用例生成。
go get -u github.com/swaggo/swag/cmd/swag
在macOS中安裝 swag需要執行如下命令:
mv $GOPATH/bin/swag /usr/local/go/bin
$ swag -v swag version v1.8.4
$ go get -u -v github.com/swaggo/gin-swagger $ go get -u -v github.com/swaggo/files $ go get -u -v github.com/alecthomas/template
使用gin-swagger為你的程式碼自動生成介面檔案,一般需要下面三個步驟:
go-swapper註解規範說明:
注:註解詳情可參見官網檔案Swagger Documentation
註解 | 描述 |
---|---|
@Summary | 摘要 |
@Produce | API 可以產生的 MIME 型別的列表,MIME 型別你可以簡單的理解為響應型別,例如:json、xml、html 等等 |
@Param | 引數格式,從左到右分別為:引數名、入參型別、資料型別、是否必填、註釋 |
@Success | 響應成功,從左到右分別為:狀態碼、引數型別、資料型別、註釋 |
@Failure | 響應失敗,從左到右分別為:狀態碼、引數型別、資料型別、註釋 |
@Router | 路由,從左到右分別為:路由地址,HTTP 方法 |
範例demo:
package main import ( "github.com/gin-gonic/gin" "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "github/mwqnice/swag/docs" // 千萬不要忘了匯入把你上一步生成的docs ) type Article struct{ ID uint32 `gorm:"primary_key" json:"id"` CreatedBy string `json:"created_by"` ModifiedBy string `json:"modified_by"` CreatedOn uint32 `json:"created_on"` ModifiedOn uint32 `json:"modified_on"` DeletedOn uint32 `json:"deleted_on"` IsDel uint8 `json:"is_del"` Title string `json:"title"` Desc string `json:"desc"` Content string `json:"content"` CoverImageUrl string `json:"cover_image_url"` State uint8 `json:"state"` } func NewArticle() Article { return Article{} } func main() { r := gin.Default() r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) r.Run(":8088") } // @Summary 獲取單個文章 // @Produce json // @Param id path int true "文章ID" // @Success 200 {object} Article "成功" // @Failure 400 {object} string "請求錯誤" // @Failure 500 {object} string "內部錯誤" // @Router /api/v1/articles/{id} [get] func (a Article) Get(c *gin.Context) { } // @Summary 獲取多個文章 // @Produce json // @Param name query string false "文章名稱" // @Param tag_id query int false "標籤ID" // @Param state query int false "狀態" // @Param page query int false "頁碼" // @Param page_size query int false "每頁數量" // @Success 200 {object} Article "成功" // @Failure 400 {object} string "請求錯誤" // @Failure 500 {object} string "內部錯誤" // @Router /api/v1/articles [get] func (a Article) List(c *gin.Context) { return } // @Summary 建立文章 // @Produce json // @Param tag_id body string true "標籤ID" // @Param title body string true "文章標題" // @Param desc body string false "文章簡述" // @Param cover_image_url body string true "封面圖片地址" // @Param content body string true "文章內容" // @Param created_by body int true "建立者" // @Param state body int false "狀態" // @Success 200 {object} Article "成功" // @Failure 400 {object} string "請求錯誤" // @Failure 500 {object} string "內部錯誤" // @Router /api/v1/articles [post] func (a Article) Create(c *gin.Context) { } // @Summary 更新文章 // @Produce json // @Param tag_id body string false "標籤ID" // @Param title body string false "文章標題" // @Param desc body string false "文章簡述" // @Param cover_image_url body string false "封面圖片地址" // @Param content body string false "文章內容" // @Param modified_by body string true "修改者" // @Success 200 {object} Article "成功" // @Failure 400 {object} string "請求錯誤" // @Failure 500 {object} string "內部錯誤" // @Router /api/v1/articles/{id} [put] func (a Article) Update(c *gin.Context) { return } // @Summary 刪除文章 // @Produce json // @Param id path int true "文章ID" // @Success 200 {string} string "成功" // @Failure 400 {object} string "請求錯誤" // @Failure 500 {object} string "內部錯誤" // @Router /api/v1/articles/{id} [delete] func (a Article) Delete(c *gin.Context) { return }
格式化swag註解
$ swag fmt
在專案根目錄執行以下命令,使用swag工具生成介面檔案資料。
$ swag init
執行完上述命令後,如果你寫的註釋格式沒問題,此時你的專案根目錄下會多出一個docs資料夾。
./docs
├── docs.go
├── swagger.json
└── swagger.yaml
然後在專案程式碼中註冊路由的地方按如下方式引入gin-swagger相關內容:
import ( "github.com/gin-gonic/gin" "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "github/mwqnice/swag/docs" // 千萬不要忘了匯入把你上一步生成的docs ) //新增swagger存取路由 r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
啟動專案,在瀏覽器中輸入地址:http://127.0.0.1:8088/swagger/index.html
到此這篇關於go語言使用swagger生成介面檔案的文章就介紹到這了, 希望可以對你的開發有一定幫助。
更多關於go swagger介面檔案的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45