Categorygithub.com/MikeLINGxZ/rome-router
modulepackage
0.2.0-main
Repository: https://github.com/mikelingxz/rome-router.git
Documentation: pkg.go.dev

# README

Rome-Router

a simple framework base gin that you can easy to code your web server

What is that?

when I use gin to codding my web server,i always need to bind request and write response.I think,if we can codding web api like codding proto server,that will be easy and distinct.

In order to make codding web api easy, I write this repo.when I use it,I just need to define a struct and some method,the framework will auto bind to router use POST with JSON.

method format like: func (ctx *gin.Context,req {struct}) (resp {struct ptr},err error)
OR
autoBind will router the method that param start with *gin.Context and params less than 2

How to use?

install

go get github.com/MikeLINGxZ/rome-router

define your router

apiRouter := []simple_server_runner.Router{
    {
        Path:        "/api",
        Method:      "POST",
        HandlerFunc: &ApiServer{},
        ChildRouter: []simple_server_runner.Router{
            {
                Path:        "/Login",
                Method:      "POST",
                HandlerFunc: Login,
                ChildRouter: []simple_server_runner.Router{
                    {
                        Path:   "/Username",
                        Method: "GET",
                        HandlerFunc: func (ctx *gin.Context) error {
                            return nil
                        },
                        ChildRouter: nil,
                        Middlewares: []gin.HandlerFunc{Auth()},
                    },
                }
                Middlewares: nil,
            },
        },
        Middlewares: nil,
    }
}

init your default server and run

server := simple_server_runner.NewServer()
server.AddRouter(router)
err := server.Run(":8787")
if err != nil {
    panic(err)
}

you will see

[GIN-debug] GET    /                         --> github.com/MikeLINGxZ/simple-server-runner.(*Server).bindRouter.func1 (3 handlers)
[GIN-debug] POST   /api/LoginOut             --> github.com/MikeLINGxZ/simple-server-runner.(*Server).bindGroupRouter.func1 (3 handlers)
[GIN-debug] POST   /api/Login                --> github.com/MikeLINGxZ/simple-server-runner.(*Server).bindRouter.func1 (3 handlers)
[GIN-debug] GET    /api/Login/Username       --> github.com/MikeLINGxZ/simple-server-runner.(*Server).bindRouter.func1 (4 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8787

Custom your response

runner.SetResponse(func(ctx *gin.Context, data interface{}, errInterface interface{}) {
    resp := CustomResponse{}
    if errInterface != nil {
        err, ok := errInterface.(*CustomResponse)
        if ok {
            resp.Error = err.Error
        } else {
            resp.Error = "gg"
        }
        ctx.JSON(http.StatusBadGateway, resp)
        return
    }
    resp.Data = data
    ctx.JSON(http.StatusOK, resp)
    return
})

Empty request OR Empty response

you don't have to define an empty struct yourself.

func GetAge(ctx *gin.Context) error {
	// todo 
	return nil
}

visible errors

visible errors will show error to client

func CustomErrorWithAuto(ctx *gin.Context) error {
	log.Println("NothingToDo")
	return simple_server_runner.NewCustomError("test error")
}

custom error will show show:

{
    "code": 500,
    "msg": "your custom error",
    "data": null
}

other error will show:

{
  "code": 500,
  "msg": "internal error",
  "data": null
}

# Packages

No description provided by the author

# Functions

NewServer init an empty server.
NewServerWithRouters init a server with routers.

# Structs

Router a router config.
Server is the main server.

# Type aliases

No description provided by the author