Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/adriano-di-giovanni/jr2

An extremely lightweight JSON-RPC 2.0 compliant client and server for Javascript.
https://github.com/adriano-di-giovanni/jr2

json-rpc-client json-rpc-server json-rpc2

Last synced: 1 day ago
JSON representation

An extremely lightweight JSON-RPC 2.0 compliant client and server for Javascript.

Awesome Lists containing this project

README

        

# jr2

jr2 is an extremely lightweight [JSON-RPC 2.0](http://www.jsonrpc.org/specification) compliant client and server for Javascript.

It is transport-independent, runs in client and server environments, has no dependencies.

It is tiny (< 2kB).

## Installation

```bash
npm install --save jr2
```

You can use jr2 with module bundlers.

The `jr2` npm package also includes precompiled production and development [UMD](https://github.com/umdjs/umd) builds in the `dist` folder. They can be used without a bundler.

The UMD builds make jr2 available as `window.jr2` global variable.

jr2 works in [any modern browser](http://caniuse.com/#feat=es5) and Node.js.

## Usage

### Client

```Javascript
import { createClient } from 'jr2'

const client = createClient()

const request = client.request('sum', [1, 2, 4], 1)

console.log(request) // { jsonrpc: '2.0', method: 'sum', params: [1, 2, 4], id: 1 }
```

### Server

```javascript
import { createServer } from 'jr2'

const delegate = {
sum(params, { responseWithResult }, callback) {
const result = params.reduce((a, b) => a + b, 0)
callback(null, responseWithResult(result))
},
}

const server = createServer(delegate)

const request = {
jsonrpc: '2.0',
method: 'sum',
params: [1, 2, 4],
id: 1,
}

server.handle(request, (err, response) => {
console.log(response) // { jsonrpc: '2.0', result: 7, id: 1 }
})
```

#### Delegate

The delegate implements server methods as functions. Functions are invoked with
`(params, context, callback)` and `this` is bound to the delegate.

The `params` argument can be an array of positional parameters or an object for named parameters.

The `context` argument is an object implementing two helper functions: `responseWithResult(result)` and `responseWithError(code, message, data)`. These helper functions help you create a compliant response and automatically match the id of the response with the id of the related request.

The `callback` argument is a function. It is expected to be invoked with `(err, response)`.

## License

MIT