Open podhmo opened 2 years ago
motivation
how to use
$ go install github.com/podhmo/apikit/cmd/apikit@latest
$ go mod init m
$ apikit init m/foo
$ go run m/foo/gen.go
// generate http.Handler
translates from
design/ListArticle.go
func ListArticle(ctx context.Context, db *DB, limit *int) ([]*Article, error) {
// do something
return nil, nil
}
to
handler/ListArticle.go (auto-generated)
func ListArticle(getProvider func(*http.Request) (*http.Request, Provider, error)) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
req, provider, err := getProvider(req)
if err != nil {
runtime.HandleResult(w, req, nil, err)
return
}
var ctx context.Context = req.Context()
var db *design.DB
{
var err error
db, err = provider.DB(ctx)
if err != nil {
runtime.HandleResult(w, req, nil, err)
return
}
}
var queryParams struct {
limit *int `query:"limit"`
}
if err := runtime.BindQuery(&queryParams, req); err != nil {
_ = err // ignored
}
result, err := design.ListArticle(ctx, db, queryParams.limit)
runtime.HandleResult(w, req, result, err)
}
}
*DB
is component*limit
is query string parameters
inspired by