Go Swagger 教程:如何使用 go-swagger 創(chuàng)建 Golang API 文檔

言鼎科技 2023-07-03 351

作為一名開發(fā)人員,您可能了解記錄和組織所有 API 的重要性,并且您也知道并非每個開發(fā)人員都喜歡這個文檔部分。為此,我們需要一些可以輕松用于準備 API 文檔的工具。好吧,第一個出現(xiàn)的工具是 Swagger。

什么是招搖?

Swagger 是一組用于編寫基于 REST 的 API 的開源工具。它簡化了編寫 API 的過程,指定標準并提供編寫和組織可擴展 API 所需的工具。

為什么要使用招搖?

如前所述,當我們必須遵循方法論時,文檔是“必須的”。使用 swagger,我們可以通過在代碼中添加注釋來創(chuàng)建 API 文檔。

現(xiàn)在問題可能會出現(xiàn)Swagger 只是用于 API 文檔嗎?不,這不對。

借助 Swagger,我們可以為任何技術(shù)(如 Node、AngularJS、PHP 等)生成客戶端。因此,它有利于我們應(yīng)用程序的命名約定、維護最佳實踐和通用結(jié)構(gòu)。此外,它確實節(jié)省了客戶端的編碼時間。

現(xiàn)在,讓我們看看我們將在本教程中做什么。

準備好用創(chuàng)新技術(shù)徹底改變您的行業(yè)了嗎?
聯(lián)系像 Bacancy 這樣經(jīng)驗豐富的Golang 開發(fā)公司來創(chuàng)建時尚、高性能的應(yīng)用程序,讓您的競爭對手望塵莫及。

教程目標:使用 Go Swagger 的 Golang API 文檔

在本教程中,我們將使用Go swagger制作一個演示應(yīng)用程序并準備 API 文檔。觀看下面的視頻,了解我們將在本教程中構(gòu)建的內(nèi)容。

Go Swagger 示例:如何創(chuàng)建 Golang API 文檔

事不宜遲,讓我們開始編碼部分。以下是創(chuàng)建 Golang API 文檔的分步說明。

創(chuàng)建項目目錄

使用以下命令創(chuàng)建項目目錄。


mkdir goswaggerCD 飄飄然去 mod 初始化 goswagger

安裝招搖


下載_url=$(curl -s https://api.github.com/repos/go-swagger/go-swagger/releases/latest | \
 jq -r '.資產(chǎn)[] | 選擇(.name | 包含("'"$(uname | tr '[:upper:]' '[:lower:]')"'_amd64")) | .browser_download_url')curl -o /usr/local/bin/swagger -L'#' "$download_url"chmod +x /usr/local/bin/swagger

下載依賴

接下來,我們將下載所需的依賴項
對于這個演示,我們將使用:

  • Mux:處理http請求和路由

命令:


去獲取 github.com/gorilla/mux
  • Swagger:處理 swagger 文檔

命令:


去獲取 github.com/go-openapi/runtime/middleware
  • MySQL:處理 MySQL 查詢

命令:


github.com/go-sql-driver/mysql去獲取 github.com/jmoiron/sqlx

從根目錄導(dǎo)入數(shù)據(jù)庫 company.sql

在根目錄下創(chuàng)建main.go。建立數(shù)據(jù)庫連接、API 路由和 Swagger 文檔。


   r := mux.NewRouter()
  dbsqlx := 配置.ConnectDBSqlx()
  hsqlx := 控制器.NewBaseHandlerSqlx(dbsqlx)

  公司 := r.PathPrefix("/admin/company").Subrouter()
  company.HandleFunc("/", hsqlx.PostCompanySqlx).Methods("POST")
  公司.HandleFunc("/", hsqlx.GetCompaniesSqlx).Methods("GET")
  company.HandleFunc("/{id}", hsqlx.EditCompany).Methods("PUT")
  company.HandleFunc("/{id}", hsqlx.DeleteCompany).Methods("DELETE")

使用 Go Swagger 編寫文檔

現(xiàn)在,讓我們看看如何使用 Swagger 進行文檔化。它將由基本配置、模型和 API 路由組成。

基本配置


// 公司 API://版本:0.0.1// 標題:Company Api// 方案:http, https// 主機:localhost:5000// 基本路徑:/// 產(chǎn)生:// - 應(yīng)用程序/json//// 安全定義:// 接口密鑰:// 類型:apiKey// 在:標題// 名稱:授權(quán)//招搖:元包控制器

對于安全定義,我們可以使用 API 密鑰,它可以為每個 API 進行驗證。

楷模

為我們的 API 的請求和響應(yīng)創(chuàng)建模型。下面是一些帶有 swagger 注釋的結(jié)構(gòu)示例。我們可以為每個字段添加名稱、類型、模式、必需和描述。


類型 ReqAddCompany 結(jié)構(gòu) {
  // 公司名稱
  // 輸入:字符串
  名稱字符串 `json:"name"validate:"required,min=2,max=100,alpha_space"`
  // 公司狀況
  // 輸入:int64
  Status int64 `json:"status" validate:"required"`}// swagger:parameters admin addCompany類型 ReqCompanyBody 結(jié)構(gòu) {
  // - 名稱:正文
  // 在:主體
  // 描述:名稱和狀態(tài)
  // 模式:
  // 類型:對象
  // "$ref": "#/definitions/ReqAddCompany"
  // 必需:真
  正文 ReqAddCompany `json:"body"`}// swagger:模型公司類型公司結(jié)構(gòu){
  //公司ID
  // 輸入:int64
  ID int64 `json:"id"`
  // 公司名稱
  // 輸入:字符串
  名稱字符串 `json:"name"`
  // 公司狀況
  // 輸入:int64
  狀態(tài) int64 `json:"status"`}// swagger:model CommonError類型 CommonError 結(jié)構(gòu) {
  // 錯誤狀態(tài)
  // 輸入:int64
  狀態(tài) int64 `json:"status"`
  // 錯誤信息
  // 輸入:字符串
  消息字符串 `json:"message"`}

API路由

我們可以為每條路線添加 swagger 注釋。如果需要,我們可以在其中指定請求和響應(yīng)模型、路由名稱、請求方法、描述和 API 密鑰。


// swagger:route GET /admin/company/ admin listCompany// 獲取公司列表//// 安全:// - api密鑰:[]// 響應(yīng):// 401: 常見錯誤// 200: 獲取公司func (h *BaseHandlerSqlx) GetCompaniesSqlx(w http.ResponseWriter, r *http.Request) {
  響應(yīng):= GetCompanies{}
  公司 := models.GetCompaniesSqlx(h.db)

  響應(yīng).Status = 1
  response.Message = lang.Get("成功")
  response.Data = 公司

  w.Header().Set("內(nèi)容類型", "application/json")
  json.NewEncoder(w).編碼(響應(yīng))}
// swagger:route POST /admin/company/ admin addCompany//創(chuàng)建一個新公司//// 安全:// - api密鑰:[]// 響應(yīng):// 401: 常見錯誤// 200: 獲取公司func (h *BaseHandlerSqlx) PostCompanySqlx(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("內(nèi)容類型", "application/json")
  響應(yīng):=獲取公司{}

  解碼器:= json.NewDecoder(r.Body)
  var reqcompany *models.ReqCompany
  錯誤 := decoder.Decode(&reqcompany)
  fmt.Println(錯誤)

  如果錯誤!=無{
      json.NewEncoder(w).Encode(ErrHandler(lang.Get("invalid_request")))
      返回
  }

  公司,errmessage := models.PostCompanySqlx(h.db, reqcompany)
  如果錯誤消息!=“”{
      json.NewEncoder(w).Encode(ErrHandler(錯誤消息))
      返回
  }

  響應(yīng).Status = 1
  response.Message = lang.Get("插入成功")
  response.Data = 公司
  json.NewEncoder(w).編碼(響應(yīng))}
// swagger:route PUT /admin/company/{id} admin editCompany// 編輯公司//// 消費:// - 應(yīng)用程序/x-www-form-urlencoded// 安全:// - api密鑰:[]// 響應(yīng):// 401: 常見錯誤// 200: 獲取公司func (h *BaseHandlerSqlx) EditCompany(w http.ResponseWriter, r *http.Request) {
  r.ParseForm()

  w.Header().Set("內(nèi)容類型", "application/json")
  變量 := mux.Vars(r)
  響應(yīng):=獲取公司{}
  id, 錯誤 := strconv.ParseInt(vars["id"], 10, 64)
  如果錯誤!=無{
      json.NewEncoder(w).Encode(ErrHandler(lang.Get("invalid_request")))
      返回
  }

  var reqcompany 模型.ReqCompany
  reqcompany.Status, err = strconv.ParseInt(r.FormValue("狀態(tài)"), 10, 64)
  reqcompany.Name = r.FormValue("名稱")

  如果錯誤!=無{
      json.NewEncoder(w).Encode(ErrHandler(lang.Get("invalid_request")))
      返回
  }

  公司,errmessage := models.EditCompany(h.db, &reqcompany, id)
  如果錯誤消息!=“”{
      json.NewEncoder(w).Encode(ErrHandler(錯誤消息))
      返回
  }

  響應(yīng).Status = 1
  response.Message = lang.Get("更新成功")
  response.Data = 公司
  json.NewEncoder(w).編碼(響應(yīng))}
// swagger:route DELETE /admin/company/{id} admin deleteCompany// 刪除公司//// 安全:// - api密鑰:[]// 響應(yīng):// 401: 常見錯誤// 200: 共同成功// 創(chuàng)建句柄刪除獲取公司func (h *BaseHandlerSqlx) DeleteCompany(w http.ResponseWriter, r *http.Request) {
  變量 := mux.Vars(r)

  errmessage := models.DeleteCompany(h.db, vars["id"])

  如果錯誤消息!=“”{
      json.NewEncoder(w).Encode(ErrHandler(錯誤消息))
      返回
  }

  成功響應(yīng):= CommonSuccess{}
  成功響應(yīng).Status = 1
  successresponse.Message = lang.Get("delete_success")

  w.Header().Set("內(nèi)容類型", "application/json")
  json.NewEncoder(w).Encode(成功響應(yīng))}

完成 api 后,我們可以在根目錄中使用以下命令從 swagger 注釋生成 swagger yamlJSON文件。

swagger generate spec -o ./swagger.yaml –scan-models會在根目錄下
生成一個swagger.yaml文件。我們也可以用同樣的方式創(chuàng)建一個JSON文件。

使用這個文件,我們可以在main.go文件中添加文檔的路由。


   // 開發(fā)者文檔
  opts := middleware.SwaggerUIOpts{SpecURL: "/swagger.yaml"}
  sh := middleware.SwaggerUI(opts, nil)
  r.Handle("/文檔", sh)

  // 共享文檔
  // opts1 := middleware.RedocOpts{SpecURL: "/swagger.yaml"}
  // sh1 := middleware.Redoc(opts1, nil)
  // r.Handle("/docs", sh1)

完成這些步驟后,開發(fā)人員文檔將類似于下圖。

Go Swagger 教程:如何使用 go-swagger 創(chuàng)建 Golang API 文檔

有關(guān)要與外部開發(fā)人員共享的只讀 API,請參閱以下文檔。


使用 Swagger 文檔生成客戶端

正如上面一開始提到的,Swagger 不僅僅用于 API 文檔;它還用于 API 文檔。我們還可以使用 Swagger 生成客戶端。讓我們看看下面的 AngularJS 客戶端生成示例。

示例:AngularJS 的客戶端生成。


npm 安裝 ng-swagger-gen --save-devsudo node_modules/.bin/ng-swagger-gen -i ../swagger.yaml -o 后端/src/app

它將為要包含在 Swagger 文檔中的所有 API 創(chuàng)建服務(wù)文件。同樣,您可以為其他框架和技術(shù)生成客戶端。

所以,這是關(guān)于使用 go-swagger 創(chuàng)建 Golang API 文檔。如需完整文檔,請隨時訪問 github 存儲庫:go-swagger-example

結(jié)論

我希望Go Swagger教程對您有所幫助,并消除了您對 Golang API 的 Swagger 文檔的疑慮。如果您是 Golang 愛好者,請訪問Golang 教程頁面以獲取更多此類教程并開始每天學(xué)習(xí)更多內(nèi)容!如果您有任何問題,請隨時發(fā)表評論并聯(lián)系。

有時,許多需求需要熟練、知識淵博且敬業(yè)的開發(fā)人員來完成他們的 Golang 項目。對于此類要求,建議聯(lián)系并聘請熟練的開發(fā)人員。您也在為您的項目尋找這樣的開發(fā)人員嗎?如果是,那為什么要浪費時間?立即聯(lián)系 Bacancy 以聘請具有基礎(chǔ)和高級 Golang 知識的Golang 開發(fā)人員。

言鼎科技

The End