Multi-Protocol APIs
JustAPI supports four API protocols out of the box, all within a single application.
1. REST API (OpenAPI 3.1)
Section titled “1. REST API (OpenAPI 3.1)”The default protocol. All route decorators generate OpenAPI 3.1 documentation automatically.
@app.get("/items/{item_id}")def read_item(request, item_id: int): return {"item_id": item_id}Interactive docs:
| URL | UI |
|---|---|
/docs |
Swagger UI |
/redoc |
ReDoc |
/scalar |
Scalar API Reference |
/openapi.json |
Raw spec |
2. GraphQL
Section titled “2. GraphQL”Mount a GraphQL endpoint with GraphiQL UI in one line:
app.graphql(path="/graphql")# GraphiQL IDE at http://localhost:8000/graphqlGraphQL uses async-graphql under the hood, compiled to Rust native code.
3. gRPC / Protobuf
Section titled “3. gRPC / Protobuf”Define a Protobuf service and mount it:
from justapi import Schema
class RPCRequest(Schema): method: str params: dict
@app.post("/rpc", body_schema=RPCRequest)def handle_rpc(request): data = request.json() return {"status": "OK", "method": data["method"]}gRPC uses tonic and prost in the Rust runtime for high-performance binary serialization.
4. JSON-RPC 2.0
Section titled “4. JSON-RPC 2.0”Standard JSON-RPC 2.0 endpoint:
from justapi import Schema
class JSONRPCRequest(Schema): jsonrpc: str = "2.0" method: str params: list | dict = [] id: int | str = 1
@app.post("/jsonrpc", body_schema=JSONRPCRequest)def handle_jsonrpc(request): req = request.json() if req["method"] == "ping": return {"jsonrpc": "2.0", "result": "pong", "id": req["id"]}Protocol Comparison
Section titled “Protocol Comparison”| Feature | REST | GraphQL | gRPC | JSON-RPC |
|---|---|---|---|---|
| Data format | JSON | JSON (query) | Protobuf (binary) | JSON |
| Schema | OpenAPI | GraphQL Schema | .proto file |
JSON Schema |
| Caching | Native HTTP | Manual | Manual | Manual |
| Streaming | SSE | Subscriptions | Bidirectional | No |
| Best for | General APIs | Complex queries | Internal services | RPC/Web3 |
| JustAPI setup | Auto | app.graphql() |
@app.post |
@app.post |
Scaffolding with CLI
Section titled “Scaffolding with CLI”# Generate a project with your preferred protocoljustapi create my_api --api-type graphqljustapi create my_api --api-type grpcjustapi create my_api --api-type jsonrpcjustapi create my_api --api-type restSee Also
Section titled “See Also”- CLI Project Scaffolder — Generate multi-protocol projects
- JustAPIApp —
graphql()method - Streaming Output — SSE and streaming responses