JSON-RPC 2.0 server on top of FastAPI. Write JSON-RPC methods the same way you write FastAPI endpoints and get OpenAPI, Swagger UI and OpenRPC for free.
π Documentation: https://smagafurov.github.io/fastapi-jsonrpc/
pip install fastapi-jsonrpc
import fastapi_jsonrpc as jsonrpc from pydantic import BaseModel from fastapi import Body app = jsonrpc.API() api_v1 = jsonrpc.Entrypoint('/api/v1/jsonrpc') class MyError(jsonrpc.BaseError): CODE = 5000 MESSAGE = 'My error' class DataModel(BaseModel): details: str @api_v1.method(errors=[MyError]) def echo(data: str = Body(..., examples=['hello'])) -> str: if data == 'error': raise MyError(data={'details': 'boom'}) return data app.bind_entrypoint(api_v1) if __name__ == '__main__': import uvicorn uvicorn.run('app:app', port=5000, access_log=False)
Run it with uvicorn and open:
POST /api/v1/jsonrpcβ JSON-RPC endpointGET /docsβ Swagger UIGET /openapi.jsonβ OpenAPI schemaGET /openrpc.jsonβ OpenRPC schema
- All of FastAPI β
Depends,Body,Header,Cookie, Pydantic models, async/await. - Auto-generated OpenAPI and OpenRPC schemas.
- Typed errors with Pydantic
DataModelincluded in the schema. - Batch requests and notifications.
- Context-manager JSON-RPC middlewares.
- Optional Sentry integration (
fastapi_jsonrpc.contrib.sentry.FastApiJsonRPCIntegration). - Pytest plugin for capturing JSON-RPC errors in tests.
See the full docs at https://smagafurov.github.io/fastapi-jsonrpc/.
# Install dependencies uv sync --frozen --group dev # Run tests uv run --frozen python -m pytest # Run a single test uv run --frozen python -m pytest tests/test_jsonrpc.py::test_name -x # Change dependencies β edit pyproject.toml, then: uv lock # Build and publish uv build uv publish
MIT β see LICENSE.