Skip to content

gitamped/seed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

seed

A RPC over HTTP server.

Example

cd into examples directory. Run go build . Run ./examples .

	// New RPCServer
	s := server.NewServer(mid.CommonMiddleware)

	// Register GreeterServicer
	gs := NewGreeterServicer()
	gs.Register(s)

	// Listen
	fmt.Println(`Listening on port 8080`)
	fmt.Println(`test cmd: curl -X POST  --data '{"name": "seed client"}' http://localhost:8080/v1/GreeterService.Greet`)
	http.Handle("/v1/", s)
	log.Fatal(http.ListenAndServe(":8080", nil))

Routes

Routes are defined by the RpcEndpoint

type RPCEndpoint struct {
	Roles   []string
	Handler func(GenericRequest, []byte) (any, error)
}

Registering a Service

Service must implement the RPCService interface

type RPCService interface {
	Register(s *Server)
}

// Register implements GreeterRpcService
func (gs GreeterServicer) Register(s *server.Server) {
	s.Register("GreeterService", "Greet", server.RPCEndpoint{Roles: []string{}, Handler: gs.GreetHandler})
}
// GreetHandler validates input data prior to calling Greet
func (gs GreeterServicer) GreetHandler(r server.GenericRequest, b []byte) (any, error) {
	var gr GreetRequest
	if err := json.Unmarshal(b, &gr); err != nil {
		return nil, fmt.Errorf("Unmarshalling data: %w", err)
	}

	if err := validate.Check(gr); err != nil {
		return nil, fmt.Errorf("validating data: %w", err)
	}

	return gs.Greet(gr, r), nil
}

About

A RPC over HTTP server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages