Cum am făcut aplicația Python să zboare cu Rust: Lecții de la JustAPI
De ce viitorul framework-urilor Python ar putea arăta complet diferit
Mi-a trebuit ceva timp să înțeleg de ce un coleg developer petrecea nopți întregi optimizând un API care, în esență, doar răspundea cu "Hello World". Răspunsul? Nu era codul lui. Era infrastructura.
Povestea care stă în spatele numerelor
Să începem direct cu cifrele, pentru că fără context devin doar marketing.
JustAPI atinge 766.000 de cereri pe secundă pe un test simplu. Rutarea durează 51 de nanosecunde pe o configurație cu 500 de rute. Throughput-ul async e de 14× mai rapid cu Tokio multi-threaded și CPython free-threaded.
Ce înseamnă asta pentru tine? Dacă ai un API care procesează mii de cereri pe secundă, fiecare milisecundă salvată se multiplică. Latency mai mic = utilizatori care așteaptă mai puțin. Throughput mai mare = servere care fac față mai multor cereri.
Dar adevărata poveste nu e în cifre. E în ce nu mai trebuie să gestionezi.
Fără uvicorn. Fără Gunicorn. Fără stack ASGI pe care să-l debug-ezi la 3 noaptea când ceva nu merge. Tot pipeline-ul de cereri trăiește în Rust, iar codul tău Python e... doar codul tău.
Arhitectura: Python ca excepție, nu ca regulă
Lanțul arată așa: Kernel (epoll/io_uring) → Tokio connection manager → TLS via rustls → HTTP parsing via Hyper → Router (matchit radix trie) → Middleware (auth, CORS, rate-limiting) → Granița Python via PyO3 → Handler-ul tău → Rust serializer → Răspuns.
Observi unde intră Python? Doar în momentul în care începe logica aplicației tale. Tot ce e înainte — tot ce rulează identic pentru fiecare cerere — e Rust.
Asta e diferența cheie. Dezvoltatorul din spatele proiectului și-a impus o regulă simplă: dacă o funcționalitate poate fi implementată în Rust, trebuie să fie implementată în Rust. Nu "poate fi mai rapidă în Rust". Python e rezervat pentru lipiciul dintre valorile Rust și handlerele tale.
E o constângere care a modelat întregul proiect și a dus la ceva cu adevărat diferit de alte framework-uri Python care au lipit componente Rust deasupra.
Cum se simte asta pentru un developer
Aici devine interesant pentru startup-uri și echipe în creștere.
Primești un framework complet — HTTP/1.1 și HTTP/2, TLS, rutare cu parametri, serializare JSON, documentație OpenAPI automată — cu 30 de linii de cod care arată exact ca Python:
from justapi import JustAPIApp
app = JustAPIApp()
@app.get("/")
def hello():
return {"Hello": "World"}
app.run()
Dar sub acea suprafață familiară, rulezi un server Rust care gestionează TLS, conexiunile și serializarea fără să treacă vreodată în Python. Experience-ul rămâne Pythonic. Performance-ul e Rust.
Pentru echipe care construiesc MVP-uri și poate vor avea nevoie de scalare mai târziu, asta contează. Scrii Python azi. Obții performanță Rust fără să rescrii nimic când trebuie să gestionezi mai mult trafic.
Factorul AI: Un partener de inginerie, nu un înlocuitor
Proiectul ăsta a fost construit cu AI agentic ca participant activ — nu ca autocomplete, ci ca ghid de arhitectură care a ajutat la decizii de design, la transformarea lor în cod, la găsirea bug-urilor și la scrierea testelor.
Merită să discutăm sincer despre asta, pentru că devine din ce în ce mai comun și rareori e discutat transparent.
Dezvoltatorul descrie codebase-ul în trei niveluri: părți pe care le înțelege complet, părți pe care le înțelege suficient să le mențină, și părți scrise de AI pe care le-a revizuit și testat dar nu le-ar putea reproduce din memorie. E deschis că asta face parte din cum există proiectul.
Asta e abordarea corectă. AI accelerează dezvoltarea pe proiecte complexe, și să pretindem altfel nu ajută pe nimeni. Esențial e să înțelegi ce deții tu versus ce ai delegat — și să fii honest despre care e care.
Lecția practică
Framework-uri ca JustAPI reprezintă o schimbare în felul în care ne gândim la rolul Python-ului în sisteme high-performance. Python nu dispare pentru logica aplicațiilor — readability-ul și ecosistemul sunt prea valoroase. Dar presupunerea că framework-ul în sine trebuie să ruleze în Python e contestată.
Fie că JustAPI devine următorul tău framework sau rămâne un experiment interesant, insight-ul de bază are valoare: uită-te la ce rulează identic pe fiecare cerere în stack-ul tău. Aia e probabil teritoriu Rust. Părțile care se schimbă? Păstrează-le în limbajul în care echipa ta e cel mai productivă.
Distanța dintre "funcționează" și "funcționează bine" se îngustează constant. Utilizatorii tăi nu vor observa arhitectura, dar vor observa latency-ul.
Unde e acum proiectul
JustAPI e la versiunea 2.0.10, cu funcționalități documentate incluzând WebSockets, SSE, task-uri în background, un scheduler, acces la baze de date via SQLx, și instrumentar operational precum OpenTelemetry și metrici Prometheus. E disponibil pe PyPI cu wheels pentru Linux, macOS, Windows și build-ul free-threaded CPython 3.14t.
Numerele sunt în repository. Testele trec. Eșecurile sunt documentate. Asta e tipul de transparență inginerească pe care ar trebui să o încurajăm mai mult.
Dacă construiești API-uri Python și performanța contează pentru tine, merită încercat. Viitorul framework-urilor web Python s-ar putea să nu arate ca ce folosești azi.