Documentation
¶
Overview ¶
Example ¶
package main import ( "github.com/tuotoo/biu" "github.com/tuotoo/biu/box" "github.com/tuotoo/biu/opt" ) // Foo controller type Foo struct{} // WebService implements CtlInterface func (ctl Foo) WebService(ws biu.WS) { ws.Route(ws.GET("/").Doc("Get Bar"). Param(ws.QueryParameter("num", "number"). DataType("integer")). DefaultReturns("Bar", Bar{}), opt.RouteID("example.foo"), opt.RouteTo(ctl.getBar), opt.RouteErrors(map[int]string{ 100: "num not Number", }), ) ws.Route(ws.POST("/"). Doc("Post Req"), opt.RouteID("example.post"), opt.RouteAPI(ctl.post), opt.RouteErrors(map[int]string{ 100: "num not Number", }), ) // add more routes as you like: // ws.Route(ws.POST("/foo"),nil) // ... } // Bar is the response of getBar type Bar struct { Msg string `json:"msg"` Num int `json:"num"` } func (ctl Foo) getBar(ctx box.Ctx) { num, err := ctx.Query("num").Int() ctx.Must(err, 100) ctx.ResponseJSON(Bar{Msg: "bar", Num: num}) } func (ctl Foo) post(ctx box.Ctx, api struct { Form struct{ Num int } }) { ctx.ResponseJSON(Bar{Msg: "POST", Num: api.Form.Num}) } func main() { c := biu.New() c.Filter(biu.LogFilter()) c.AddServices("/v1", nil, biu.NS{ NameSpace: "foo", Controller: Foo{}, Desc: "Foo Controller", }, ) // Note: you should add swagger service after adding services. // swagger document will be available at http://localhost:8080/v1/swagger swaggerService := c.NewSwaggerService(biu.SwaggerInfo{ Title: "Foo Bar", Description: "Foo Bar Service", ContactName: "TuoToo", ContactEmail: "jqs7@tuotoo.com", ContactURL: "https://tuotoo.com", Version: "1.0.0", RoutePrefix: "/v1", }) c.Add(swaggerService) c.Run(":8080", nil) }
Output:
Index ¶
- Constants
- Variables
- func AddServices(prefix string, opts opt.ServicesFuncArr, wss ...NS)
- func AuthFilter(code int, i ...*auth.Instance) restful.FilterFunction
- func Filter(f func(ctx box.Ctx)) restful.FilterFunction
- func FilterWithLogger(f func(ctx box.Ctx), logger log.ILogger) restful.FilterFunction
- func Handle(f func(ctx box.Ctx)) restful.RouteFunction
- func HandleWithLogger(f func(ctx box.Ctx), logger log.ILogger) restful.RouteFunction
- func ListenAndServe(srv *http.Server, addrChan chan<- string) error
- func LogFilter() restful.FilterFunction
- func NewSwaggerService(info SwaggerInfo) *restful.WebService
- func Run(addr string, opts ...opt.RunFunc)
- func WrapHandler(f func(ctx box.Ctx)) http.HandlerFunc
- type Container
- func (c *Container) AddServices(prefix string, opts opt.ServicesFuncArr, wss ...NS)
- func (c *Container) FilterFunc(f func(ctx box.Ctx)) restful.FilterFunction
- func (c *Container) Handle(f func(ctx box.Ctx)) restful.RouteFunction
- func (c *Container) NewSwaggerService(info SwaggerInfo) *restful.WebService
- func (c *Container) NewTestServer() *TestServer
- func (c *Container) Run(addr string, opts ...opt.RunFunc)
- type CtlInterface
- type NS
- type SwaggerInfo
- type TestServer
- type WS
Examples ¶
Constants ¶
const ( // MIME_HTML_FORM is application/x-www-form-urlencoded header MIME_HTML_FORM = "application/x-www-form-urlencoded" // MIME_FILE_FORM is multipart/form-data MIME_FILE_FORM = "multipart/form-data" )
Variables ¶
var AutoGenPathDoc = false
var DefaultContainer = New(restful.DefaultContainer)
Functions ¶
func AddServices ¶
func AddServices(prefix string, opts opt.ServicesFuncArr, wss ...NS)
AddServices adds services with namespace.
func AuthFilter ¶
AuthFilter checks if request contains JWT, and sets UserID in Attribute if exists,
func FilterWithLogger ¶ added in v0.5.0
func HandleWithLogger ¶ added in v0.5.0
func ListenAndServe ¶ added in v0.3.6
ListenAndServe listens on the TCP network address srv.Addr and then calls Serve to handle requests on incoming connections. Accepted connections are configured to enable TCP keep-alives. If srv.Addr is blank, ":http" is used. ListenAndServe always returns a non-nil error.
func LogFilter ¶
func LogFilter() restful.FilterFunction
LogFilter logs
{ remote_addr, method, uri, proto, status_code, content_length, }
for each request
func NewSwaggerService ¶
func NewSwaggerService(info SwaggerInfo) *restful.WebService
NewSwaggerService creates a swagger webservice in /swagger
func WrapHandler ¶
func WrapHandler(f func(ctx box.Ctx)) http.HandlerFunc
WrapHandler wraps a biu handler to http.HandlerFunc
Types ¶
type Container ¶
type Container struct { *restful.Container // contains filtered or unexported fields }
Container of restful
func New ¶
func New(container ...*restful.Container) *Container
New creates a new restful container.
func (*Container) AddServices ¶
func (c *Container) AddServices(prefix string, opts opt.ServicesFuncArr, wss ...NS)
AddServices adds services with namespace for container.
func (*Container) FilterFunc ¶ added in v0.5.0
Filter transform a biu handler to a restful.FilterFunction
func (*Container) NewSwaggerService ¶
func (c *Container) NewSwaggerService(info SwaggerInfo) *restful.WebService
NewSwaggerService creates a swagger webservice in /swagger
func (*Container) NewTestServer ¶ added in v0.2.0
func (c *Container) NewTestServer() *TestServer
NewTestServer returns a Test Server.
type CtlInterface ¶
type CtlInterface interface {
WebService(WS)
}
CtlInterface is the interface of controllers
type NS ¶
type NS struct { NameSpace string // url parent of controller Controller CtlInterface // controller implement CtlInterface Desc string // description of controller of namespace ExternalDesc string // external documentation of controller ExternalURL string // external url of ExternalDesc }
NS contains configuration of a namespace
type SwaggerInfo ¶
type SwaggerInfo struct { Title string Description string TermsOfService string ContactName string ContactURL string ContactEmail string LicenseName string LicenseURL string Version string WebServicesURL string DisableCORS bool // swagger service will running under // http://<api>/<RoutePrefix>/<RouteSuffix> // by default the RouteSuffix is swagger RoutePrefix string RouteSuffix string }
SwaggerInfo contains configuration of swagger documents.
type TestServer ¶ added in v0.2.0
TestServer wraps a httptest.Server
func NewTestServer ¶ added in v0.2.0
func NewTestServer() *TestServer
NewTestServer returns a Test Server.
func (*TestServer) WithT ¶ added in v0.2.0
func (s *TestServer) WithT(t *testing.T) *httpexpect.Expect
WithT accept testing.T and returns httpexpect.Expect