Quickly write RESTful APIs in go with automatic openapi schema generation.
This project is highly experimental -- the API is likely to change (currently only basic post requests are even implemented). This is in no way production ready.
This project was inspired by the simplicity of FastAPI.
Due to limitations of typing in go this library will probably not be production ready pre go 1.18 as handlers must be passed as interface{}
s and validated at runtime (Scary I know! 😱). Once generics hit I hope to rewrite the handler implementation to restore compile time type checking & safety.
go get github.com/fcjr/shiftapi
package main
import (
"log"
"net/http"
"github.com/fcjr/shiftapi"
)
type Person struct {
Name string `json:"name"`
}
type Greeting struct {
Hello string `json:"hello"`
}
// This is your http handler!
// ShiftAPI is responsible for marshalling the request body
// and marshalling the return value.
func greeter(p *Person) (*Greeting, *shiftapi.Error) {
return &Greeting{
Hello: p.Name,
}, nil
}
func main() {
api := shiftapi.New(&shiftapi.Params{
SchemaInfo: &shiftapi.SchemaParams{
Title: "Greeter Demo API",
},
})
err := api.POST("/greet", greeter, http.StatusOK, &shiftapi.HandlerOpts{
Summary: "Greeter Method",
Description: "It greets you by name.",
})
if err != nil {
log.Fatal(err)
}
log.Fatal(api.Serve())
// redoc will be served at http://localhost:8080/docs
}