JsonRpc

Build Status npm version

Schema

{
    "version" : String,
    "id" : Integer,
    "resource" : String,
    "method" : String,
    "params" : Object,
    "result" : *,
    "error" : {
        "code" : Integer,
        "message" : String
    }
}

Usage

New request

var jsonrpc = require('@etk/jsonrpc');
var request = new jsonrpc.Request();
request.setResource('someResource').setMethod('methodName').setParams({'param1' : 'paramValue'});
console.log(request.toString());
// {"version":"1.1.0","id":1,"resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}

equals to

var jsonrpc = require('@etk/jsonrpc');
var request = new jsonrpc.Request({
    resource : 'someResource',
    method : 'methodName',
    params : {param1 : 'paramValue'}
});
console.log(request.toString());
// {"version":"1.1.0","id":1,"resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}

New response

with result

var jsonrpc = require('@etk/jsonrpc');
var response = new jsonrpc.Response();
response.setId(1).setResult('someResult');
console.log(response.toString());
// {"version":"1.1.0","id":1,"result":"someResult"}

equals to

var jsonrpc = require('@etk/jsonrpc');
var request = new jsonrpc.Request({
    id : 1,
    result : 'someResult'
});
console.log(request.toString());
// {"version":"1.1.0","id":1,"result":"someResult"}

with error

var jsonrpc = require('@etk/jsonrpc');
var response = new jsonrpc.Response({
    id : 1,
    error : {
        code : 1,
        message : 'Error message'
    }
});
console.log(response.toString());
// {"version":"1.1.0","id":1,"error":{"code":1,"message":"Error message"}}

equals to

var jsonrpc = require('@etk/jsonrpc');
var response = new jsonrpc.Response({
    id : 1,
    error : {
        code : 1,
        message : 'Error message'
    }
});
console.log(response.toString());
// {"version":"1.1.0","id":1,"error":{"code":1,"message":"Error message"}}

equals to

var jsonrpc = require('@etk/jsonrpc');
var response = new jsonrpc.Response({
    id : 1,
    error : {
        code : 1,
        message : 'Error message'
    }
});
console.log(response.toString());
// {"version":"1.1.0","id":1,"error":{"code":1,"message":"Error message"}}

New notification

var jsonrpc = require('@etk/jsonrpc');
var notification = new jsonrpc.Notification();
notification.setResource('someResource').setMethod('methodName').setParams({'param1' : 'paramValue'});
console.log(notification.toString());
// {"version":"1.1.0","resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}

equals to

var jsonrpc = require('@etk/jsonrpc');
var notification = new jsonrpc.Notification({
    resource : 'someResource',
    method : 'methodName',
    params : {param1 : 'paramValue'}
});
console.log(notification.toString());
// {"version":"1.1.0","resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}

Parse message

var jsonrpc = require('@etk/jsonrpc');
var notification = jsonrpc.parse('{"version":"1.1.0","resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}');
console.log(notification.toString());
// {"version":"1.1.0","resource" : "someResource","method":"methodName","params":{"param1":"paramValue"}}

Callbacks

var jsonrpc = require('@etk/jsonrpc');

var request = new jsonrpc.Request();
request.setMethod('someMethod');
request.setCallback((res) => {
    console.log('Got response for message #' + request.getId());
    console.log(res);
});
console.log("Request", request);

var response = new jsonrpc.Response();
response.setId(request.getId());
response.setResult({some : 'result'});
console.log("Response", response);

// Callback will fire automagicaly after response is parsed
jsonrpc.parse(response.toString());

output

Request JsonRpcRequest {
  message: 
   { version: '1.1.0',
     id: 1,
     resource: '__global__',
     params: {},
     method: 'someMethod' } }

Response JsonRpcResponse {
  message: { version: '1.1.0', id: 1, result: { some: 'result' } } }

Got response for message #1
JsonRpcResponse {
  message: { version: '1.1.0', id: 1, result: { some: 'result' } } }

JSONLess

JSONLess allows non-primitives values like Date or MongoDB ObjectID to be transfered over JSON See JSONLess github.io pages for mor info

Docs

See github.io pages