123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package blademaster_test
- import (
- "io/ioutil"
- "log"
- "time"
- "go-common/library/net/http/blademaster"
- "go-common/library/net/http/blademaster/binding"
- "go-common/library/net/http/blademaster/middleware/auth"
- "go-common/library/net/http/blademaster/middleware/verify"
- "go-common/library/net/http/blademaster/tests"
- )
- // This example start a http server and listen at port 8080,
- // it will handle '/ping' and return response in html text
- func Example() {
- engine := blademaster.Default()
- engine.GET("/ping", func(c *blademaster.Context) {
- c.String(200, "%s", "pong")
- })
- engine.Run(":8080")
- }
- // This example use `RouterGroup` to separate different requests,
- // it will handle ('/group1/ping', '/group2/ping') and return response in json
- func ExampleRouterGroup() {
- engine := blademaster.Default()
- group := engine.Group("/group1", blademaster.CORS())
- group.GET("/ping", func(c *blademaster.Context) {
- c.JSON(map[string]string{"message": "hello"}, nil)
- })
- group2 := engine.Group("/group2", blademaster.CORS())
- group2.GET("/ping", func(c *blademaster.Context) {
- c.JSON(map[string]string{"message": "welcome"}, nil)
- })
- engine.Run(":8080")
- }
- // This example add two middlewares in the root router by `Use` method,
- // it will add CORS headers in response and log total consumed time
- func ExampleEngine_Use() {
- timeLogger := func() blademaster.HandlerFunc {
- return func(c *blademaster.Context) {
- start := time.Now()
- c.Next()
- log.Printf("total consume: %v", time.Since(start))
- }
- }
- engine := blademaster.Default()
- engine.Use(blademaster.CORS())
- engine.Use(timeLogger())
- engine.GET("/ping", func(c *blademaster.Context) {
- c.String(200, "%s", "pong")
- })
- engine.Run(":8080")
- }
- // This example add two middlewares in the root router by `UseFunc` method,
- // it will log total consumed time
- func ExampleEngine_UseFunc() {
- engine := blademaster.Default()
- engine.UseFunc(func(c *blademaster.Context) {
- start := time.Now()
- c.Next()
- log.Printf("total consume: %v", time.Since(start))
- })
- engine.GET("/ping", func(c *blademaster.Context) {
- c.String(200, "%s", "pong")
- })
- engine.Run(":8080")
- }
- // This example start a http server through the specified unix socket,
- // it will handle '/ping' and return reponse in html text
- func ExampleEngine_RunUnix() {
- engine := blademaster.Default()
- engine.GET("/ping", func(c *blademaster.Context) {
- c.String(200, "%s", "pong")
- })
- unixs, err := ioutil.TempFile("", "engine.sock")
- if err != nil {
- log.Fatalf("Failed to create temp file: %s", err)
- }
- if err := engine.RunUnix(unixs.Name()); err != nil {
- log.Fatalf("Failed to serve with unix socket: %s", err)
- }
- }
- // This example show how to render response in json format,
- // it will render structures as json like: `{"code":0,"message":"0","data":{"Time":"2017-11-14T23:03:22.0523199+08:00"}}`
- func ExampleContext_JSON() {
- type Data struct {
- Time time.Time
- }
- engine := blademaster.Default()
- engine.GET("/ping", func(c *blademaster.Context) {
- var d Data
- d.Time = time.Now()
- c.JSON(d, nil)
- })
- engine.Run(":8080")
- }
- // This example show how to render response in protobuf format
- // it will marshal whole response content to protobuf
- func ExampleContext_Protobuf() {
- engine := blademaster.Default()
- engine.GET("/ping.pb", func(c *blademaster.Context) {
- t := &tests.Time{
- Now: time.Now().Unix(),
- }
- c.Protobuf(t, nil)
- })
- engine.Run(":8080")
- }
- // This example show how to render response in XML format,
- // it will render structure as XML like: `<Data><Time>2017-11-14T23:03:49.2231458+08:00</Time></Data>`
- func ExampleContext_XML() {
- type Data struct {
- Time time.Time
- }
- engine := blademaster.Default()
- engine.GET("/ping", func(c *blademaster.Context) {
- var d Data
- d.Time = time.Now()
- c.XML(d, nil)
- })
- engine.Run(":8080")
- }
- // This example show how to protect your handlers by HTTP basic auth,
- // it will validate the baisc auth and abort with status 403 if authentication is invalid
- func ExampleContext_Abort() {
- engine := blademaster.Default()
- engine.UseFunc(func(c *blademaster.Context) {
- user, pass, isok := c.Request.BasicAuth()
- if !isok || user != "root" || pass != "root" {
- c.AbortWithStatus(403)
- return
- }
- })
- engine.GET("/auth", func(c *blademaster.Context) {
- c.String(200, "%s", "Welcome")
- })
- engine.Run(":8080")
- }
- // This example show how to using the default parameter binding to parse the url param from get request,
- // it will validate the request and abort with status 400 if params is invalid
- func ExampleContext_Bind() {
- engine := blademaster.Default()
- engine.GET("/bind", func(c *blademaster.Context) {
- v := new(struct {
- // This mark field `mids` should exist and every element should greater than 1
- Mids []int64 `form:"mids" validate:"dive,gt=1,required"`
- Title string `form:"title" validate:"required"`
- Content string `form:"content"`
- // This mark field `cid` should between 1 and 10
- Cid int `form:"cid" validate:"min=1,max=10"`
- })
- err := c.Bind(v)
- if err != nil {
- // Do not call any write response method in this state,
- // the response body is already written in `c.BindWith` method
- return
- }
- c.String(200, "parse params by bind %+v", v)
- })
- engine.Run(":8080")
- }
- // This example show how to using the json binding to parse the json param from post request body,
- // it will validate the request and abort with status 400 if params is invalid
- func ExampleContext_BindWith() {
- engine := blademaster.Default()
- engine.POST("/bindwith", func(c *blademaster.Context) {
- v := new(struct {
- // This mark field `mids` should exist and every element should greater than 1
- Mids []int64 `json:"mids" validate:"dive,gt=1,required"`
- Title string `json:"title" validate:"required"`
- Content string `json:"content"`
- // This mark field `cid` should between 1 and 10
- Cid int `json:"cid" validate:"min=1,max=10"`
- })
- err := c.BindWith(v, binding.JSON)
- if err != nil {
- // Do not call any write response method in this state,
- // the response body is already written in `c.BindWith` method
- return
- }
- c.String(200, "parse params by bindwith %+v", v)
- })
- engine.Run(":8080")
- }
- func ExampleEngine_Inject() {
- v := verify.New(nil)
- auth := auth.New(nil)
- engine := blademaster.Default()
- engine.Inject("^/index", v.Verify, auth.User)
- engine.POST("/index/hello", func(c *blademaster.Context) {
- c.JSON("hello, world", nil)
- })
- engine.Run(":8080")
- }
|