diff options
author | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2022-01-31 02:31:43 +0300 |
---|---|---|
committer | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2022-01-31 02:31:43 +0300 |
commit | 440f3f4604f3489113f6705b8da67d839e52360e (patch) | |
tree | 9bc04f896cc79cbb4bb41adbe19aaaaa0592acba /examples/http |
initial
Diffstat (limited to 'examples/http')
-rw-r--r-- | examples/http/main.go | 41 | ||||
-rw-r--r-- | examples/http/test.http | 42 |
2 files changed, 83 insertions, 0 deletions
diff --git a/examples/http/main.go b/examples/http/main.go new file mode 100644 index 0000000..fdef509 --- /dev/null +++ b/examples/http/main.go @@ -0,0 +1,41 @@ +package main + +import ( + "context" + "errors" + "net/http" + + "github.com/neonxp/rpc" +) + +func main() { + s := jsonrpc2.New() + s.Register("multiply", jsonrpc2.Wrap(Multiply)) + s.Register("divide", jsonrpc2.Wrap(Divide)) + + http.ListenAndServe(":8000", s) +} + +func Multiply(ctx context.Context, args *Args) (int, error) { + return args.A * args.B, nil +} + +func Divide(ctx context.Context, args *Args) (*Quotient, error) { + if args.B == 0 { + return nil, errors.New("divide by zero") + } + quo := new(Quotient) + quo.Quo = args.A / args.B + quo.Rem = args.A % args.B + return quo, nil +} + +type Args struct { + A int `json:"a"` + B int `json:"b"` +} + +type Quotient struct { + Quo int `json:"quo"` + Rem int `json:"rem"` +} diff --git a/examples/http/test.http b/examples/http/test.http new file mode 100644 index 0000000..d4e68b3 --- /dev/null +++ b/examples/http/test.http @@ -0,0 +1,42 @@ +POST http://localhost:8000/ +Content-Type: application/json + +{ + "jsonrpc": "2.0", + "method": "multiply", + "params": { + "a": 2, + "b": 3 + }, + "id": 1 +} + +### + +POST http://localhost:8000/ +Content-Type: application/json + +{ + "jsonrpc": "2.0", + "method": "divide", + "params": { + "a": 10, + "b": 3 + }, + "id": 2 +} + +### + +POST http://localhost:8000/ +Content-Type: application/json + +[ + { "jsonrpc": "2.0", "method": "multiply", "params": { "a": 2, "b": 3 }, "id": 10 }, + {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"}, + {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}, + {"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"}, + {"foo": "boo"}, + {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"}, + {"jsonrpc": "2.0", "method": "get_data", "id": "9"} +]
\ No newline at end of file |