from justapi import JustAPIApp import json app = JustAPIApp() def hello(request): return {"message": "hello, world"} app.get("/hello", hello) async def hello_async(request): import asyncio await asyncio.sleep(0.001) return {"message": "hello, world async"} app.get("/hello_async", hello_async) def echo(request): try: data = json.loads(request["body"].decode("utf-8")) return data except Exception: return { "status": 400, "headers": [(b"content-type", b"application/json")], "body": b'{"error":"invalid JSON"}' } app.post("/echo", echo) def validate(request): try: data = json.loads(request["body"].decode("utf-8")) return data except Exception: return { "status": 400, "headers": [(b"content-type", b"application/json")], "body": b'{"error":"invalid JSON"}', } app.post("/validate", validate) # Native fast path: same validated echo, served entirely in Rust (no Python # handler call). Uses a real justapi Schema so the Rust validator runs. from justapi import Schema class NativeItemSchema(Schema): id: int name: str price: float @app.post("/validate_native", schema=NativeItemSchema, native=True) def validate_native(request): raise AssertionError("handler must not run in native mode") if __name__ == "__main__": import sys port = sys.argv[1] if len(sys.argv) > 1 else "8080" app.run(f"127.0.0.1:{port}") @app.post("/noop") def noop(request): return {"ok": True}