Wilian Gabriel
Wilian Gabriel

Reputation: 21

How to use swaggo (swagger doc) in GoLang lang with http.ServeMux?

In documentation https://github.com/swaggo/swag is using gin to initialize server, but in my application i'm using http.ServeMux and how initialize swaggo without use gin server

in Docs use

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

how can I use something like ...

mu.Handle("/swagger/*any", swaggerFiles.Handler)

......

follows as my initial idea, but don't work... rsrs

func Server() *http.ServeMux {
    docs.SwaggerInfo.Title = "Swagger Example API"
    docs.SwaggerInfo.Description = "This is a sample server Petstore server."
    docs.SwaggerInfo.Version = "1.0"
    docs.SwaggerInfo.Host = "petstore.swagger.io"

    mu := http.NewServeMux()
    mu.Handle("/metrics", promhttp.Handler())
    mu.Handle("/swagger/*any", swaggerFiles.Handler)
    mu.HandleFunc("/helloWorld", handlers.NewHelloWorldHandler().HelloWorldHandler)
    mu.HandleFunc("/production/", handlers.NewProductionHandler().ProductionHandler)
    return mu
}

Upvotes: 2

Views: 3480

Answers (1)

colm.anseo
colm.anseo

Reputation: 22027

If you have your swagger files built for distribution (i.e. static files) and are in say the directory: /some/dir/path/static/swagger

This should work with go's http router:

staticFilesPath := "/some/dir/path/static"
staticRoute := "/static/"

h := http.NewServeMux()

// static file handler for route '/static/*'
h.Handle(
    staticRoute,
    http.StripPrefix(
        staticRoute,
        http.FileServer(http.Dir(staticFilesPath)),
    ),
)

I find it helpful to add this also:

// (redirect a route if not recognized - remove in production)
//
// unrecognized routes will redirect to Swagger API docs
h.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w, r, staticRoute + "swagger/", http.StatusSeeOther)
})

Upvotes: 1

Related Questions