Luego de
crear nuestro proyecto con echo, vamos a agregar
swagger.
Empezamos agregando la librería de swag
go get -d github.com/swaggo/swag/cmd/swag
go install github.com/swaggo/swag/cmd/swag@latest
Luego ejecutamos Swag en la carpeta raíz del proyecto Go que contiene el archivo main.go, Swag analizará los comentarios y generará los archivos necesarios (carpeta docs y docs/doc.go).
swag init
y luego agregamos echo para swagger
go get -u github.com/swaggo/echo-swagger
Y ahora tenemos swagger en nustro proyecto echo :
package main
import (
"github.com/labstack/echo/v4"
"github.com/swaggo/echo-swagger"
_ "github.com/swaggo/echo-swagger/example/docs" // docs is generated by Swag CLI, you have to import it.
)
// @title Swagger Example API
// @version 1.0
// @description This is a sample server Petstore server.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host petstore.swagger.io
// @BasePath /v2
func main() {
e := echo.New()
e.GET("/swagger/*", echoSwagger.WrapHandler)
e.Logger.Fatal(e.Start(":1323"))
}
En mi caso solo tengo que agregar :
el import :
y el router :
e.GET("/swagger/*", echoSwagger.WrapHandler)
y tengo estos 2 servicios con su documentación :
// HealthCheck godoc
// @Summary Show the status of server.
// @Description get the status of server.
// @Tags root
// @Accept */*
// @Produce json
// @Success 200 {object} map[string]interface{}
// @Router /health/check [get]
func HealthCheck(c echo.Context) error {
return c.JSON(http.StatusOK, map[string]interface{}{
"data": "Server is up and running",
})
}
// Info godoc
// @Summary Show the info of server.
// @Description get the info of server.
// @Tags root
// @Accept */*
// @Produce json
// @Success 200 {object} computer.SysInfo
// @Router /health/info [get]
func Info(c echo.Context) error {
return c.JSON(http.StatusOK, computer.Info())
}
Y se genero el siguiente swagger.json :
{
"swagger": "2.0",
"info": {
"contact": {}
},
"paths": {
"/health/check": {
"get": {
"description": "get the status of server.",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"tags": [
"root"
],
"summary": "Show the status of server.",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/health/info": {
"get": {
"description": "get the info of server.",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"tags": [
"root"
],
"summary": "Show the info of server.",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/computer.SysInfo"
}
}
}
}
}
},
"definitions": {
"computer.SysInfo": {
"type": "object",
"properties": {
"disk": {
"type": "integer"
},
"hostname": {
"type": "string"
},
"platform": {
"type": "string"
},
"ram": {
"type": "integer"
},
"ram available": {
"type": "integer"
},
"ram free": {
"type": "integer"
},
"uptime": {
"type": "integer"
}
}
}
}
}
Dejo link : https://github.com/swaggo/echo-swagger