podhmo / apikit

api toolkit (WIP)
MIT License
0 stars 0 forks source link

write README #116

Open podhmo opened 2 years ago

podhmo commented 2 years ago

inspired by

podhmo commented 2 years ago

motivation

podhmo commented 2 years ago

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

simplify

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)
    }
}