mirror of
https://github.com/kataras/iris.git
synced 2025-12-18 02:17:05 +00:00
example: gRPC-compatible controller
as requested at: https://github.com/kataras/iris/issues/1449 Former-commit-id: a0af1a78bcfef85f297c5087c8cbb00124226036
This commit is contained in:
59
_examples/mvc/grpc-compatible/main.go
Normal file
59
_examples/mvc/grpc-compatible/main.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/kataras/iris/v12"
|
||||
"github.com/kataras/iris/v12/mvc"
|
||||
)
|
||||
|
||||
// See https://github.com/kataras/iris/issues/1449
|
||||
// for more details but in-short you can convert Iris MVC to gRPC methods by
|
||||
// binding the `context.Context` from `iris.Context.Request().Context()` and gRPC input and output data.
|
||||
|
||||
func main() {
|
||||
app := newApp()
|
||||
app.Logger().SetLevel("debug")
|
||||
|
||||
// POST: http://localhost:8080/login
|
||||
// with request data: {"username": "makis"}
|
||||
// and expected output: {"message": "makis logged"}
|
||||
app.Listen(":8080")
|
||||
}
|
||||
|
||||
func newApp() *iris.Application {
|
||||
app := iris.New()
|
||||
|
||||
mvc.New(app).
|
||||
// Request-scope binding for context.Context-type controller's method or field.
|
||||
// (or import github.com/kataras/iris/v12/hero and hero.Register(...))
|
||||
Register(func(ctx iris.Context) context.Context {
|
||||
return ctx.Request().Context()
|
||||
}).
|
||||
// Bind loginRequest.
|
||||
Register(func(ctx iris.Context) loginRequest {
|
||||
var req loginRequest
|
||||
ctx.ReadJSON(&req)
|
||||
return req
|
||||
}).
|
||||
Handle(&myController{})
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
type myController struct{}
|
||||
|
||||
type loginRequest struct {
|
||||
Username string `json:"username"`
|
||||
}
|
||||
|
||||
type loginResponse struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func (c *myController) PostLogin(ctx context.Context, input loginRequest) (loginResponse, error) {
|
||||
// [use of ctx to call a gRpc method or a database call...]
|
||||
return loginResponse{
|
||||
Message: input.Username + " logged",
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user