No description
examples/http | ||
http | ||
rpc | ||
go.mod | ||
README.md |
JSON-RPC 2.0
Golang implementation of JSON-RPC 2.0 server with generics.
Go 1.18+ required
Features:
- Batch request and responses
- WebSocket transport
Usage (http transport)
- Create JSON-RPC/HTTP server:
import "github.com/neonxp/jsonrpc2/http" ... s := http.New()
- Write handler:
Handler must have exact two arguments (context and input of any json serializable type) and exact two return values (output of any json serializable type and error)func Multiply(ctx context.Context, args *Args) (int, error) { return args.A * args.B, nil }
- Wrap handler with
rpc.Wrap
method and register it in server:s.Register("multiply", rpc.Wrap(Multiply))
- Use server as common http handler:
http.ListenAndServe(":8000", s)
Custom transport
See http/server.go for example of transport implementation.
Complete example
package main
import (
"context"
"net/http"
httpRPC "github.com/neonxp/jsonrpc2/http"
"github.com/neonxp/jsonrpc2/rpc"
)
func main() {
s := httpRPC.New()
s.Register("multiply", rpc.Wrap(Multiply))
s.Register("divide", rpc.Wrap(Divide))
http.ListenAndServe(":8000", s)
}
func Multiply(ctx context.Context, args *Args) (int, error) {
//...
}
func Divide(ctx context.Context, args *Args) (*Quotient, error) {
//...
}
type Args struct {
A int `json:"a"`
B int `json:"b"`
}
type Quotient struct {
Quo int `json:"quo"`
Rem int `json:"rem"`
}