Need help with ginrpc?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

xxjwxc
189 Stars 22 Forks GNU General Public License v3.0 48 Commits 7 Opened issues

Description

gin auto binding,grpc, and annotated route,gin 注解路由, grpc,自动参数绑定工具

Services available

!
?

Need anything else?

Contributors list

# 11,941
Go
golang
uber
MySQL
48 commits

Build Status Go Report Card codecov GoDoc Mentioned in Awesome Go

中文文档

Automatic parameter binding base on go-gin

img

doc

doc

Golang gin automatic parameter binding

  • Support for RPC automatic mapping
  • Support object registration
  • Support annotation routing
  • base on go-gin on json restful style
  • implementation of parameter filtering and binding with request
  • code registration simple and supports multiple ways of registration
  • grpc-go bind support
  • Support swagger MORE
  • Support markdown/mindoc MORE
  • Support call before and after deal(

    ginrpc.WithBeforeAfter
    )
  • DEMO

Installing

API details

Three interface modes are supported

  • func(*gin.Context) // go-gin Raw interface

func(*api.Context) // Custom context type

  • func(*api.Context,req) // Custom context type,with request

func(api.Context,req)

  • func(gin.Context,req) // go-gin context,with request

func(*gin.Context,req)

  • func(gin.Context,req)(*resp,error) // go-gin context,with request,return parameter and error ==> grpc-go

func(*gin.Context,req)(resp,error)

一. Parameter auto binding,Object registration (annotation routing)

Initialization project (this project is named after
gmsec
)

``` go mod init gmsec ```

coding more>>

package main

import ( "fmt" "net/http"

_ "gmsec/routers" // Debug mode requires adding [mod] / routes to register annotation routes.debug模式需要添加[mod]/routers 注册注解路由
"github.com/xxjwxc/public/mydoc/myswagger" // swagger 支持

"github.com/gin-gonic/gin"
"github.com/xxjwxc/ginrpc"
"github.com/xxjwxc/ginrpc/api"

)

type ReqTest struct { Access_token string json:"access_token" UserName string json:"user_name" binding:"required" // With verification mode Password string json:"password" }

// Hello ... type Hello struct { }

// Hello Annotated route (bese on beego way) // @Router /block [post,get] func (s *Hello) Hello(c *api.Context, req *ReqTest) { fmt.Println(req) c.JSON(http.StatusOK, "ok") }

// Hello2 Route without annotation (the parameter is 2 default post) func (s *Hello) Hello2(c *gin.Context, req ReqTest) { fmt.Println(req) c.JSON(http.StatusOK, "ok") }

// grpc-go // with request,return parameter and error // TestFun6 Route without annotation (the parameter is 2 default post) func TestFun6(c *gin.Context, req ReqTest) (*ReqTest, error) { fmt.Println(req) //c.JSON(http.StatusOK, req) return &req, nil }

func main() {

// swagger
myswagger.SetHost("https://localhost:8080")
myswagger.SetBasePath("gmsec")
myswagger.SetSchemes(true, false)
// -----end --
base := ginrpc.New()
router := gin.Default() // or router :=  gin.Default().Group("/xxjwxc")
base.Register(router, new(Hello)) // object register like(go-micro)
router.POST("/test6", base.HandlerFunc(TestFun6))                            // function register
base.RegisterHandlerFunc(router, []string{"post", "get"}, "/test", TestFun6) 
router.Run(":8080")

}

- Annotation routing related instructions

// @Router /block [post,get]
@Router tag  
/block router 
[post,get] method 

  • @Router - [-]
    indicates ignore

#### Note: if there is no annotation route in the object function, the system will add annotation route by default. Post mode: with req (2 parameters (CTX, req)), get mode is a parameter (CTX)

1. Annotation route will automatically create
[mod]/routes/gen_router.go
file, which needs to be added when calling:

```
_ "[mod]/routers" // Debug mode requires adding [mod] / routes to register annotation routes

```

By default, the [gen_router. Data] file will also be generated in the root directory of the project (keep this file, and you can embed it without adding the above code)

2. way of annotation route :

more to saying  [gmsec](https://github.com/gmsec/gmsec)

3. Parameter description

ginrpc.WithCtx : Set custom context

ginrpc.WithDebug(true) : Set debug mode

ginrpc.WithOutDoc(true) : output markdown/swagger api doc

ginrpc.WithBigCamel(true) : Set big camel standard (false is web mode, _, lowercase)

ginrpc.WithBeforeAfter(&ginrpc.DefaultGinBeforeAfter{}) : Before After call

more>>

4. Execute curl to automatically bind parameters. See the results directly

  curl 'http://127.0.0.1:8080/xxjwxc/block' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
  curl 'http://127.0.0.1:8080/xxjwxc/hello.hello2' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'

二. swagger/markdown/mindoc Document generation description

    ginrpc.WithOutDoc(true) : output markdown/swagger

1.For object registration 'ginrpc. Register' mode, document export is supported

2.Export supports annotation routing, Parameter annotation and default value (
tag '.
default')

3.Default export path:(
/docs/swagger/swagger.json
,
/docs/markdown
)

4 struct demo

type ReqTest struct {
    AccessToken string `json:"access_token"`
    UserName    string `json:"user_name" binding:"required"` // 带校验方式
    Password    string `json:"password"`
}

三. Support to call Middleware

  • using
    ginrpc.WithBeforeAfter(&ginrpc.DefaultGinBeforeAfter{})
  • You can also implement functions (single types) on objects
    go
    // GinBeforeAfter Execute middleware before and after the object call (support adding the object separately from the object in total)
    type GinBeforeAfter interface {
        GinBefore(req *GinBeforeAfterInfo) bool
        GinAfter(req *GinBeforeAfterInfo) bool
    }
    

Stargazers over time

Stargazers over time

coding address:ginprc Please give star support

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.