How to use JSON-RPC with Sanic?

sanic json

We’ll use Sanic to take JSON-RPC requests. It should respond to “ping” with “pong”.

Install Sanic to take requests and Jsonrpcserver to process them:

pip install sanic jsonrpcserver

Create a server.py:

from sanic import Sanic
from sanic.request import Request
from sanic.response import json
from jsonrpcserver import Result, Success, dispatch_to_serializable, method

app = Sanic("JSON-RPC app")


@method
def ping() -> Result:
    return Success("pong")


@app.route("/", methods=["POST"])
async def test(request: Request):
    return json(dispatch_to_serializable(request.body))


if __name__ == "__main__":
    app.run(port=5000)

Start the server:

$ python server.py
[2021-08-19 20:54:48 +1000] [6671] [INFO] Goin' Fast @ http://127.0.0.1:5000
[2021-08-19 20:54:48 +1000] [6671] [INFO] Starting worker [6671]

Test it

$ curl -X POST http://localhost:5000 -d '{"jsonrpc": "2.0", "method": "ping", "id": 1}'
{"jsonrpc":"2.0","result":"pong","id":1}