osamingo / Jsonrpc
Licence: mit
The jsonrpc package helps implement of JSON-RPC 2.0
Stars: ✭ 143
Programming Languages
go
31211 projects - #10 most used programming language
Projects that are alternatives of or similar to Jsonrpc
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (+31.47%)
Mutual labels: api, json-rpc, json
Jsonrpcserver
Process JSON-RPC requests in Python
Stars: ✭ 126 (-11.89%)
Mutual labels: api, rpc, json-rpc
Co
Art of C++. Flag, logging, unit-test, json, go-style coroutine and more.
Stars: ✭ 2,264 (+1483.22%)
Mutual labels: rpc, json-rpc, json
Jstp
Fast RPC for browser and Node.js based on TCP, WebSocket, and MDSF
Stars: ✭ 132 (-7.69%)
Mutual labels: api, rpc, json
Rpc
Simple RPC style APIs with generated clients & servers.
Stars: ✭ 192 (+34.27%)
Mutual labels: api, rpc, json-rpc
Libjson Rpc Cpp
C++ framework for json-rpc (json remote procedure call)
Stars: ✭ 653 (+356.64%)
Mutual labels: rpc, json-rpc, json
Getty
a netty like asynchronous network I/O library based on tcp/udp/websocket; a bidirectional RPC framework based on JSON/Protobuf; a microservice framework based on zookeeper/etcd
Stars: ✭ 532 (+272.03%)
Mutual labels: rpc, json-rpc, json
Spyne
A transport agnostic sync/async RPC library that focuses on exposing services with a well-defined API using popular protocols.
Stars: ✭ 992 (+593.71%)
Mutual labels: api, rpc, json
Smoke
💨 Simple yet powerful file-based mock server with recording abilities
Stars: ✭ 142 (-0.7%)
Mutual labels: api, json
Json Serverless
Transform a JSON file into a serverless REST API in AWS cloud
Stars: ✭ 108 (-24.48%)
Mutual labels: api, json
Symfony Jsonapi
JSON API Transformer Bundle for Symfony 2 and Symfony 3
Stars: ✭ 114 (-20.28%)
Mutual labels: api, json
Httpbin
HTTP Request & Response Service, written in Python + Flask.
Stars: ✭ 10,423 (+7188.81%)
Mutual labels: api, json
Invoice As A Service
💰 Simple invoicing service (REST API): from JSON to PDF
Stars: ✭ 106 (-25.87%)
Mutual labels: api, json
Flickr Sdk
Almost certainly the best Flickr API client in the world for node and the browser
Stars: ✭ 104 (-27.27%)
Mutual labels: api, json
Mockit
A tool to quickly mock out end points, setup delays and more...
Stars: ✭ 1,534 (+972.73%)
Mutual labels: api, json
Crudapi
Go implementation of a RESTful JSON API exposing CRUD functionality relying on a custom storage.
Stars: ✭ 121 (-15.38%)
Mutual labels: api, json
Api Response
Simple and ready to use API response wrapper for Laravel.
Stars: ✭ 123 (-13.99%)
Mutual labels: api, json
Sabisu Rails
Simple and powerful engine for exploring your Rails api application
Stars: ✭ 129 (-9.79%)
Mutual labels: api, json
jsonrpc
About
- Simple, Poetic, Pithy.
- No
reflect
package.- But
reflect
package is used only when invoke the debug handler.
- But
- Support GAE/Go Standard Environment.
- Compliance with JSON-RPC 2.0.
Note: If you use Go 1.6, see v1.0.
Install
$ go get -u github.com/osamingo/jsonrpc/v2
Usage
package main
import (
"context"
"log"
"net/http"
"github.com/intel-go/fastjson"
"github.com/osamingo/jsonrpc/v2"
)
type (
EchoHandler struct{}
EchoParams struct {
Name string `json:"name"`
}
EchoResult struct {
Message string `json:"message"`
}
PositionalHandler struct{}
PositionalParams []int
PositionalResult struct {
Message []int `json:"message"`
}
)
func (h EchoHandler) ServeJSONRPC(c context.Context, params *fastjson.RawMessage) (interface{}, *jsonrpc.Error) {
var p EchoParams
if err := jsonrpc.Unmarshal(params, &p); err != nil {
return nil, err
}
return EchoResult{
Message: "Hello, " + p.Name,
}, nil
}
func (h PositionalHandler) ServeJSONRPC(c context.Context, params *fastjson.RawMessage) (interface{}, *Error) {
var p PositionalParams
if err := jsonrpc.Unmarshal(params, &p); err != nil {
return nil, err
}
return PositionalResult{
Message: p,
}, nil
}
func main() {
mr := jsonrpc.NewMethodRepository()
if err := mr.RegisterMethod("Main.Echo", EchoHandler{}, EchoParams{}, EchoResult{}); err != nil {
log.Fatalln(err)
}
if err := mr.RegisterMethod("Main.Positional", PositionalHandler{}, PositionalParams{}, PositionalResult{}); err != nil {
log.Fatalln(err)
}
http.Handle("/jrpc", mr)
http.HandleFunc("/jrpc/debug", mr.ServeDebug)
if err := http.ListenAndServe(":8080", http.DefaultServeMux); err != nil {
log.Fatalln(err)
}
}
Advanced
package main
import (
"log"
"net/http"
"github.com/osamingo/jsonrpc/v2"
)
type (
HandleParamsResulter interface {
jsonrpc.Handler
Name() string
Params() interface{}
Result() interface{}
}
Servicer interface {
MethodName(HandleParamsResulter) string
Handlers() []HandleParamsResulter
}
UserService struct {
SignUpHandler HandleParamsResulter
SignInHandler HandleParamsResulter
}
)
func (us *UserService) MethodName(h HandleParamsResulter) string {
return "UserService." + h.Name()
}
func (us *UserService) Handlers() []HandleParamsResulter {
return []HandleParamsResulter{us.SignUpHandler, us.SignInHandler}
}
func NewUserService() *UserService {
return &UserService{
// Initialize handlers
}
}
func main() {
mr := jsonrpc.NewMethodRepository()
for _, s := range []Servicer{NewUserService()} {
for _, h := range s.Handlers() {
mr.RegisterMethod(s.MethodName(h), h, h.Params(), h.Result())
}
}
http.Handle("/jrpc", mr)
http.HandleFunc("/jrpc/debug", mr.ServeDebug)
if err := http.ListenAndServe(":8080", http.DefaultServeMux); err != nil {
log.Fatalln(err)
}
}
Result
Invoke the Echo method
POST /jrpc HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 82
Content-Type: application/json
Host: localhost:8080
User-Agent: HTTPie/0.9.6
{
"jsonrpc": "2.0",
"method": "Main.Echo",
"params": {
"name": "John Doe"
},
"id": "243a718a-2ebb-4e32-8cc8-210c39e8a14b"
}
HTTP/1.1 200 OK
Content-Length: 68
Content-Type: application/json
Date: Mon, 28 Nov 2016 13:48:13 GMT
{
"jsonrpc": "2.0",
"result": {
"message": "Hello, John Doe"
},
"id": "243a718a-2ebb-4e32-8cc8-210c39e8a14b"
}
Invoke the Positional method
POST /jrpc HTTP/1.1
Accept: */*
Content-Length: 133
Content-Type: application/json
Host: localhost:8080
User-Agent: curl/7.61.1
{
"jsonrpc": "2.0",
"method": "Main.Positional",
"params": [3,1,1,3,5,3],
"id": "243a718a-2ebb-4e32-8cc8-210c39e8a14b"
}
HTTP/1.1 200 OK
Content-Length: 97
Content-Type: application/json
Date: Mon, 05 Nov 2018 11:23:35 GMT
{
"jsonrpc": "2.0",
"result": {
"message": [3,1,1,3,5,3]
},
"id": "243a718a-2ebb-4e32-8cc8-210c39e8a14b"
}
Access to debug handler
GET /jrpc/debug HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:8080
User-Agent: HTTPie/0.9.6
HTTP/1.1 200 OK
Content-Length: 408
Content-Type: application/json
Date: Mon, 28 Nov 2016 13:56:24 GMT
[
{
"handler": "EchoHandler",
"name": "Main.Echo",
"params": {
"$ref": "#/definitions/EchoParams",
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"EchoParams": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
}
},
"result": {
"$ref": "#/definitions/EchoResult",
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"EchoResult": {
"additionalProperties": false,
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
}
}
}
}
]
License
Released under the MIT License.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].