FastAPI - on disk multi-counter uising JSON
examples/fastapi/counter-on-disk-json/main.py
from fastapi import FastAPI, Response import json import os root = os.path.dirname(os.path.abspath(__file__)) filename = os.path.join(root, 'counter.json') app = FastAPI() @app.get("/{name}") async def count(name): counters = load_counters() if name not in counters: counters[name] = 0 counters[name] += 1 with open(filename, 'w') as fh: json.dump(counters, fh) return {"cnt": counters[name]} @app.get("/") async def main(): counters = load_counters() if counters: html = '<table>\n' for name in sorted(counters.keys()): html += f'<tr><td><a href="/{name}">{name}</a></td><td>{counters[name]}</td></tr>\n' html += '</table>\n' else: html = 'Try accessing <a href="/foo">/foo</a>'; return Response(content=html, media_type="text/html") def load_counters(): if os.path.exists(filename): with open(filename) as fh: counters = json.load(fh) else: counters = {} return counters