[goa]golang微服務框架學習(三)-- 使用swagger-ui展示API


既然goa框架自動生成啦swagger-json文件,那么如何用swagger-ui展示出來呢?

這里分三步:

1.下載swagger-ui的web代碼

2.添加swagger.json 和 swagger-ui資源的導出

3.main.go里面mount這兩個資源,然后編譯啟動程序,訪問即可

 

為什么連swagger-ui一並導出?因為在swagger-ui中的test程序,需要請求api,如果時部署在不同端口,會有跨域請求問題(這個坑我踩了)。

 

 

跨域請求解決有很多方法:

1)把所有api設置為可接受跨域請求

2)把程序和swagger-ui部署到同一個域名下(或者設置代理訪問)

3)其它

這里選擇了第2種方法(順便使用goa里面到Files這個controller)。

不多廢話,繼續。。。

 

1.下載swagger-ui的web代碼

直接從swagger-ui的git上拉下來,然后我們要用的就是dist目錄里頭的文件。

 

2.添加swagger.json 和 swagger-ui資源的導出

package design

import (
    . "github.com/goadesign/goa/design"
    . "github.com/goadesign/goa/design/apidsl"
)

//這里的host會生成swagger host
var _ = API("adder", func() {
    Title("The adder API")
    Description("A teaser for goa")
    Host("localhost:8080")
    Scheme("http")
})

var _ = Resource("operands", func() {
    Action("add", func() {
        Routing(GET("add/:left/:right"))
        Description("add returns the sum of the left and right parameters in the response body")
        Params(func() {
            Param("left", Integer, "Left operand")
            Param("right", Integer, "Right operand")
        })
        Response(OK, "text/plain")
    })
    Action("des", func() {
        Routing(GET("des/:left/:right"))
        Description("des returns the sum of the left and right parameters in the response body")
        Params(func() {
            Param("left", Integer, "Left operand")
            Param("right", Integer, "Right operand")
        })
        Response(OK, "text/plain")
    })
})

//這里,添加josn和swagger-ui的資源導出
var _ = Resource("swagger", func() { Origin("*", func() { Methods("GET") // Allow all origins to retrieve the Swagger JSON (CORS) }) Files("/swagger.json", "swagger/swagger.json") }) var _ = Resource("swagger-ui", func() {

  //建立靜態httpserver Files("/swagger-ui/*filepath", "swagger-ui/") })

然后重新生成代碼:

~/gocode/src/playgoa/demo$ goagen bootstrap -d playgoa/demo/design

這個時候,會有兩個新的文件:

swagger.go

swagger-ui.go

 

3.main.go里面mount這兩個資源,然后編譯啟動程序,訪問即可

 然后,需要修改main.go文件

package main

import (
    "playgoa/demo/app"

    "github.com/goadesign/goa"
    "github.com/goadesign/goa/middleware"
)

func main() {
    // Create service
    service := goa.New("adder")

    // Mount middleware
    service.Use(middleware.RequestID())
    service.Use(middleware.LogRequest(true))
    service.Use(middleware.ErrorHandler(service, true))
    service.Use(middleware.Recover())

    // Mount "operands" controller
    c := NewOperandsController(service)
    app.MountOperandsController(service, c)

    //add swagger
    s := NewSwaggerController(service)
    app.MountSwaggerController(service, s)

    //add swagger-ui
    sui := NewSwaggerUIController(service)
    app.MountSwaggerUIController(service, sui)

    // Start service
    if err := service.ListenAndServe(":8080"); err != nil {
        service.LogError("startup", "err", err)
    }
}

然后編譯程序:

~/gocode/src/playgoa/demo$ go build -o playgoa

這里別忘記了把swagger-ui中的dist目錄下的所有文件,copy到demo目錄下的swagger-ui下哦

 qingping.zhang@bogon  ~/gocode/src/playgoa/demo$ ll
total 20704
drwxr-xr-x   8 qingping.zhang  staff       272  7 18 11:54 app
drwxr-xr-x   8 qingping.zhang  staff       272  7 18 11:54 client
drwxr-xr-x   3 qingping.zhang  staff       102  7 18 11:54 design
-rw-r--r--   1 qingping.zhang  staff       794  7 18 11:46 main.go
-rw-r--r--   1 qingping.zhang  staff       807  7 17 18:57 operands.go
-rwxr-xr-x   1 qingping.zhang  staff  10582972  7 18 12:13 playgoa
drwxr-xr-x   4 qingping.zhang  staff       136  7 18 11:54 swagger
drwxr-xr-x  11 qingping.zhang  staff       374  7 18 10:58 swagger-ui
-rw-r--r--   1 qingping.zhang  staff       383  7 18 11:49 swagger-ui.go
-rw-r--r--   1 qingping.zhang  staff       363  7 17 19:10 swagger.go

#在這里。。。 qingping.zhang@bogon 
~/gocode/src/playgoa/demo$ ll swagger-ui total 4160 drwxr-xr-x 7 qingping.zhang staff 238 7 18 10:58 css drwxr-xr-x 4 qingping.zhang staff 136 7 18 10:58 fonts drwxr-xr-x 12 qingping.zhang staff 408 7 18 10:58 images -rw-r--r-- 1 qingping.zhang staff 4314 7 18 10:58 index.html drwxr-xr-x 15 qingping.zhang staff 510 7 18 10:58 lang drwxr-xr-x 16 qingping.zhang staff 544 7 18 10:58 lib -rw-r--r-- 1 qingping.zhang staff 449 7 18 10:58 o2c.html -rw-r--r-- 1 qingping.zhang staff 1823645 7 18 10:58 swagger-ui.js -rw-r--r-- 1 qingping.zhang staff 289384 7 18 10:58 swagger-ui.min.js

啟動運行./playgoa

然后訪問:http://localhost:8080/swagger-ui/index.html 就可以看到效果了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM