Golang is awesome for developing web apps. And people have created a bunch of awesome Web-Frameworks, Web helper libraries. If we consider the entire ecosystem of web apps in Golang everything except API documentation seems to be in place. So we have created the first API doc generator for Golang based web apps and calling it Yet another.
Most of the web services expose their APIs to the mobile or third party developers. Documenting them is somewhat pain in the ass. We are trying to reduce the pain, at least for in house projects where you don't have to expose your documentation to the world. YAAG generates simple bootstrap based API documentation without writing a single line of comments.
YAAG is a middleware. You have to add YAAG handler in your routes and you are done. Just go on calling your APIs using POSTMAN, Curl or from any client, and YAAG will keep on updating the API Doc html. (Note: We are also generating a json file containing data af all API calls)
- Import github.com/betacraft/yaag/yaag
- Import github.com/betacraft/yaag/middleware
- Initialize yaag
yaag.Init(&yaag.Config{On: true, DocTitle: "Core", DocPath: "apidoc.html"})
- Use it in your handlers as
http.HandleFunc("/", middleware.HandleFunc(handler))
####Sample code
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
yaag.Init(&yaag.Config{On: true, DocTitle: "Core", DocPath: "apidoc.html", BaseUrls : map[string]string{"Production":"","Staging":""} })
http.HandleFunc("/", middleware.HandleFunc(handler))
http.ListenAndServe(":8080", nil)
}
- Import github.com/betacraft/yaag/yaag
- Import github.com/betacraft/yaag/middleware
- Initialize yaag
yaag.Init(&yaag.Config{On: true, DocTitle: "Gorilla Mux", DocPath: "apidoc.html"})
- Use it in your handlers as
r.HandleFunc("/", middleware.HandleFunc(handler))
####Sample code
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, time.Now().String())
}
func main() {
yaag.Init(&yaag.Config{On: true, DocTitle: "Gorilla Mux", DocPath: "apidoc.html"})
r := mux.NewRouter()
r.HandleFunc("/", middleware.HandleFunc(handler))
http.ListenAndServe(":8080", r)
}
- Import github.com/betacraft/yaag/yaag
- Import github.com/betacraft/yaag/martiniyaag
- Initialize yaag
yaag.Init(&yaag.Config{On: true, DocTitle: "Martini", DocPath: "apidoc.html"})
- Add Yaag middleware like
m.Use(martiniyaag.Document)
####Sample Code
func main() {
yaag.Init(&yaag.Config{On: true, DocTitle: "Martini", DocPath: "apidoc.html"})
m := martini.Classic()
m.Use(martiniyaag.Document)
m.Get("/", func() string {
return "Hello world!"
})
m.Run()
}
- Add yaag.record = true in conf/app.conf (before starting to record the api calls)
- import github.com/betacraft/yaag/filters in app/init.go
- add 'filters.FilterForApiDoc' in revel.Filters
- Start recording Api calls
- Import github.com/betacraft/yaag/yaag
- Import github.com/betacraft/yaag/gin
- Initialize yaag
yaag.Init(&yaag.Config(On: true, DocTile: "Gin", DocPath: "apidpc.html"))
- Add yaag middleware like
r.User(yaag_gin.Document())
####Sample Code
import (
"net/http"
yaag_gin "github.com/betacraft/yaag/gin"
"github.com/betacraft/yaag/yaag"
"gopkg.in/gin-gonic/gin.v1"
)
func main() {
r := gin.Default()
yaag.Init(&yaag.Config{On: true, DocTitle: "Gin", DocPath: "apidoc.html", BaseUrls: map[string]string{"Production": "", "Staging": ""}})
r.Use(yaag_gin.Document())
// use other middlewares ...
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World!")
})
r.Run(":8080")
}
- Aniket Awati (aniket@betacraft.co)
- Akshay Deo (akshay@betacraft.co)
- Kaustubh Deshmukh (kaustubh@betacraft.co)
- Brian Newsom (Brian.Newsom@Colorado.edu)
This project is initiated by Betacraft during GopherGala 2015.