https://github.com/lucassaldanha/vertx-jsonrpc
JSON-RPC 2.0 service implemented in Java using Vert.x 4
https://github.com/lucassaldanha/vertx-jsonrpc
json-rpc vertx
Last synced: about 1 year ago
JSON representation
JSON-RPC 2.0 service implemented in Java using Vert.x 4
- Host: GitHub
- URL: https://github.com/lucassaldanha/vertx-jsonrpc
- Owner: lucassaldanha
- License: apache-2.0
- Created: 2019-08-14T05:02:20.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-03-26T03:02:01.000Z (over 5 years ago)
- Last Synced: 2025-04-05T06:41:22.440Z (about 1 year ago)
- Topics: json-rpc, vertx
- Language: Java
- Homepage:
- Size: 97.7 KB
- Stars: 8
- Watchers: 2
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# JSON-RPC 2.0 Service
This is an example implementation of a JSON-RPC 2.0 service in Java using
[Vert.x](https://vertx.io/) 4.
The main principles behind this implementation are:
- [JSON-RPC 2.0 spec](https://www.jsonrpc.org/specification) compliant
- Channel agnostic: Thin integration layer between the JSON-RPC code and the transport channel
(e.g. HTTP, WebSockets, IPC, etc)
- Extendable: New JSON-RPC methods can be added with low effort
This project started as a prototype and now it can help others also implementing JSON-RPC services
using Vert.x.
## Architecture
There are three main components in this architecture:
- JsonRpcServer
- JsonRpcMessageProcessor
- JsonRpcMethodRegistry
The first three components have been implemented as
[Verticles](https://vertx.io/docs/vertx-core/java/#_verticles) and communicate via the
[EventBus](https://vertx.io/docs/vertx-core/java/#_verticles).
### JsonRpcServer
The server is responsible for the handling different channels. For example. the HttpJsonRpcServer
handles HTTP requests.
For each different channel that we want to support, we need a new JsonRpcServer that will
encode/decode messaged from the channel to the JsonRpcMessageProcessor.
### JsonRpcMessageProcessor
The processor is a main piece in the JSON-RPC service. It is responsible for parsing the messages
received from the server and decoding it into a JSON-RPC request. On a successful decoding, the
processor will dispatch the request to the respective JSON-RPC method to get a result.
### JsonRpcMethodRegistry
The registry is where all implemented JSON-RPC methods are registered and made available to the
application. For each JsonRpcMethod, the registry will setup the proper listeners on the EventBus.
Each JSON-RPC method should implement the JsonRpcMethod interface and be registered in the registry
to be available. There are two example methods implemented, one to add and one to subtract numbers.
## Example
```
--> request
<-- response
--> { "jsonrpc": "2.0", "id": "1", "method": "add", "params": [2, 3] }
<-- { "jsonrpc": "2.0", "id": "1", "result": 5 }
--> { "jsonrpc": "2.0", "id": "1", "method": "subtract", "params": [5, 1] }
<-- { "jsonrpc": "2.0", "id": "1", "result": 4 }
```
If you want to test yourself, run Main.java and use the following command:
```
$ curl --request POST \
--url http://localhost:8080 \
--data '{"jsonrpc": "2.0", "method": "add", "params": [2, 3], "id": "1"}'
${"jsonrpc":"2.0","id":"1","result":5}
```
(by default, the application starts a HTTP server listening on port 8080)
## Missing features
- Support for by-name parameters
- Extended config option (e.g. http server listening port)
- Global error handler
- Nested method namespacing