-
Notifications
You must be signed in to change notification settings - Fork 0
Home
vinod edited this page Jan 16, 2024
·
2 revisions
gin middleware to automatically generate RESTful API documentation with Swagger 2.0.
- Add comments to your API source code, See Declarative Comments Format.
- Download Swag for Go by using:
go get -u github.com/swaggo/swag/cmd/swag
Starting in Go 1.17, installing executables with go get
is deprecated. go install
may be used instead:
go install github.com/swaggo/swag/cmd/swag@latest
- Run the Swag at your Go project root path(for instance
~/root/go-project-name
), Swag will parse comments and generate required files(docs
folder anddocs/doc.go
) at~/root/go-project-name/docs
.
swag init
- Download gin-swagger by using:
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files
Import following in your code:
import "github.com/swaggo/gin-swagger" // gin-swagger middleware
import "github.com/swaggo/files" // swagger embed files
Now assume you have implemented a simple api as following:
// A get function which returns a hello world string by json
func helloCall(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello, You created a Web App!"})
}
So how to use gin-swagger on api above? Just follow the following guide.
- Add Comments for apis and main function with gin-swagger rules like following:
// helloCall godoc
// @Summary hellow example
// @Schemes
// @Description Hello
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} Hello, You created a Web App!
// @Router / [get]
func helloCall(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello, You created a Web App!"})
}
- Use
swag init
command to generate a docs, docs generated will be stored atdocs/
. - import the docs like this:
I assume your project named
github.com/go-project-name/docs
.
import (
_ "github.com/vinodnextcoder/go-web-app/docs"
)
-
build your application and after that, go to http://localhost:3001/swagger/index.html ,you to see your Swagger UI.
-
The full code and folder relatives here:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
_ "github.com/vinodnextcoder/go-web-app/docs"
)
// @title Swagger Example API
// @version 1.0
// @description This is a sample gin web server
// @contact.name vinod
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @host localhost:3001
// @BasePath /
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
func main() {
router := gin.Default()
router.GET("/", helloCall)
router.GET("/about", aboutCall)
router.GET("/user/:name", getUser)
router.GET("/user", getUsers)
router.POST("/user", addUser)
router.GET("/userData/:id", getUserByID)
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
router.Run(":3001")
}
Demo project tree, swag init
is run at relative .
.
├── docs
│ ├── docs.go
│ ├── swagger.json
│ └── swagger.yaml
├── go.mod
├── go.sum
└── main.go