1.0.4 • Published 2 years ago
asc-rpc v1.0.4
Implemented JSON RPC specification
Contents
- Install
- Import module
- How to use simple handler
- How to use multiple handlers in one class
- Decorators description
- Samples
- Changelog
Install
npm i --save asc-rpc
Import module
Import module RpcModule
from asc-rpc
, example
JsonRpcModule.forRoot({
path: '/rpc', // path to RPC
})
How to use simple handler
Create simple RPC handler
Create handler
create RPC handler
import { RpcId, RpcPayload, RpcVersion, RpcMethod, IRpcHandler, RpcHandler } from 'asc-rpc';
@RpcHandler({
method: 'test',
})
export class TestHandler implements IRpcHandler<Payload> {
public async invoke(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
}
Add to providers
Add TestHandler
to providers array
Test with cURL
Every request to RPC is POST method and response status = 200
Test with curl
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "test", "id": 2}'
How to use multiple handlers in one class
Create multiple RPC handler in one class
Create handlers
Create RPC class handler
import { RpcId, RpcPayload, RpcVersion, RpcMethod, RpcMethodHandler, RpcHandler } from 'asc-rpc';
@RpcHandler({
method: 'contact',
})
export class ContactHandler {
@RpcMethodHandler('add')
public async add(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
@RpcMethodHandler('delete')
public async delete(
@RpcPayload() payload: Payload,
@RpcVersion() version: string,
@RpcId() id: number | string,
@RpcMethod() method: string
) {
return payload;
}
}
Add to providers
Add ContactHandler
to providers array
Test with cURL
Every request to RPC is POST method and response status = 200
Test with curl contact.add
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "contact.add", "id": 2}'
Test with curl contact.delete
curl -X POST "http://localhost:3000/rpc" -H "accept: application/json" -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "contact.delete", "id": 2}'
Decorators description
field | decorator | description | required | other |
---|---|---|---|---|
params | @RpcPayload() | get payload ( params ) | false | use pipes... |
jsonrpc | @RpcVersion() | get rpc version | true | use pipes... |
method | @RpcMethod() | get rpc version | true | use pipes... |
id | @RpcId() | get client operation id | false | if not send - response not send, RPC notification. use pipes... |