Go to file
Ethan Buchman 7ea86f6506 fix test race and update readme 2016-06-21 15:19:56 -04:00
client add blank client interface 2016-05-04 10:39:43 -04:00
server Remove go-alert dependency 2016-05-08 14:58:28 -07:00
types support unix domain websockets 2016-02-19 02:05:24 +00:00
LICENSE Initial commit 2016-01-12 15:26:00 -05:00
README.md fix test race and update readme 2016-06-21 15:19:56 -04:00
rpc_test.go fix test race and update readme 2016-06-21 15:19:56 -04:00
version.go version bump 2016-01-20 13:07:57 -05:00

README.md

go-rpc

CircleCI

HTTP RPC server supporting calls via uri params, jsonrpc, and jsonrpc over websockets

How To

Define some types and routes:

// Define a type for results and register concrete versions with go-wire
type Result interface{}

type ResultStatus struct {
	Value string
}

var _ = wire.RegisterInterface(
	struct{ Result }{},
	wire.ConcreteType{&ResultStatus{}, 0x1},
)

// Define some routes
var Routes = map[string]*rpcserver.RPCFunc{
	"status": rpcserver.NewRPCFunc(StatusResult, "arg"),
}

// an rpc function
func StatusResult(v string) (Result, error) {
	return &ResultStatus{v}, nil
}

Now start the server:

mux := http.NewServeMux()
rpcserver.RegisterRPCFuncs(mux, Routes)
wm := rpcserver.NewWebsocketManager(Routes, nil)
mux.HandleFunc("/websocket", wm.WebsocketHandler)
go func() {
	_, err := rpcserver.StartHTTPServer("0.0.0.0:46657", mux)
	if err != nil {
		panic(err)
	}
}()

Note that unix sockets are supported as well (eg. /path/to/socket instead of 0.0.0.0:46657)

Now see all available endpoints by sending a GET request to 0.0.0.0:46657. Each route is available as a GET request, as a JSONRPCv2 POST request, and via JSONRPCv2 over websockets

Examples