ginrpc

package module
v1.0.12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2022 License: Apache-2.0 Imports: 36 Imported by: 0

README

Build Status Go Report Card codecov GoDoc Mentioned in Awesome Go

中文文档

Automatic parameter binding base on go-gin

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

  • go mod:
go get -u github.com/xxjwxc/ginrpc@master

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](https://github.com/grpc/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")
}

// @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>>](https://godoc.org/github.com/xxjwxc/ginrpc)
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
	// 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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddGenOne

func AddGenOne(handFunName, routerPath string, methods []string)

AddGenOne add one to base case

func Default

func Default() *_Base

Default new op obj

func GetStringList

func GetStringList(list []string) string

GetStringList format string

func GetVersion

func GetVersion() string

func New

func New(opts ...Option) *_Base

New new customized base

func SetVersion

func SetVersion(tm int64)

SetVersion user timestamp to replace version

Types

type DefaultGinBeforeAfter

type DefaultGinBeforeAfter struct {
}

DefaultGinBeforeAfter 创建一个默认 BeforeAfter Middleware

func (*DefaultGinBeforeAfter) GinAfter

func (d *DefaultGinBeforeAfter) GinAfter(req *GinBeforeAfterInfo) bool

GinAfter call之后调用

func (*DefaultGinBeforeAfter) GinBefore

func (d *DefaultGinBeforeAfter) GinBefore(req *GinBeforeAfterInfo) bool

GinBefore call之前调用

type GinBeforeAfter

type GinBeforeAfter interface {
	GinBefore(req *GinBeforeAfterInfo) bool
	GinAfter(req *GinBeforeAfterInfo) bool
}

GinBeforeAfter 对象调用前后执行中间件(支持总的跟对象单独添加)

type GinBeforeAfterInfo

type GinBeforeAfterInfo struct {
	C        *gin.Context
	FuncName string      // 函数名
	Req      interface{} // 调用前的请求参数
	Resp     interface{} // 调用后的返回参数
	Error    error       // 错误信息
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context // 占位参数,可用于存储其他参数,前后连接可用

}

GinBeforeAfterInfo 对象调用前后执行中间件参数

type NewAPIFunc

type NewAPIFunc func(*gin.Context) interface{}

NewAPIFunc Custom context support

type Option

type Option interface {
	// contains filtered or unexported methods
}

Option overrides behavior of Connect.

func WithBeforeAfter

func WithBeforeAfter(beforeAfter GinBeforeAfter) Option

WithBeforeAfter set before and after call.设置对象调用前后执行中间件

func WithBigCamel

func WithBigCamel(b bool) Option

WithBigCamel set build is BigCamel.是否大驼峰模式

func WithCtx

func WithCtx(middleware NewAPIFunc) Option

WithCtx use custom context.设置自定义context

func WithDebug

func WithDebug(b bool) Option

WithDebug set build is development.设置debug模式(默认debug模式)

func WithImportFile

func WithImportFile(k, v string) Option

WithImportFile 添加自定义import文件列表

func WithOutDoc

func WithOutDoc(b bool) Option

WithOutDoc set is out doc.是否输出文档

func WithOutPath

func WithOutPath(path string) Option

WithOutPath set output path dir with router.go file.设置输出目录

type RecoverErrorFunc

type RecoverErrorFunc func(interface{})

RecoverErrorFunc recover 错误设置

type Response

type Response struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

Directories

Path Synopsis
Package api The next version of the underlying category will support automatic parsing of a single struct.
Package api The next version of the underlying category will support automatic parsing of a single struct.
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL