Cum să contruiești un Acvariu, partea I

În urma discuțiilor pe care le-am purtat cu Tibi, am lăsat abandonat soluția pentru Acvariu bazată pe Zamboni în favoarea implementării uneia a noastre. Încă vom folosi Fireplace pentru interfață, doar partea de backend o vom scrie noi.

Arhitectura

Sistemul din spatele Acvariului este unul destul de complex, așa că merită explicat.

Zilnic, un script Python (la care am lucrat astăzi) descarcă o arhivă cu toate aplicațiile disponibile în Firefox Marketplace de la un URL de forma https://marketplace.cdn.mozilla.net/dumped-apps/tarballs/YYYY-MM-DD.tgz

Acest script introduce informațiile privitoare la aplicații într-o bază de date. Având în vedere că fiecare dump zilnic de la Mozilla conține toate aplicațiile din Firefox Marketplace, va trebui să avem grijă să nu introducem o aplicație de mai multe ori în baza de date.

Nu toate aplicațiile din Firefox Marketplace sunt libere, așa că trebuiesc filtrate înainte de a fi afișate în Acvariu. Pentru aprobare ne folosim de o interfață de administrare scrisă tot în Python. Interfața comunică direct cu baza de date și permite afișarea aplicațiilor în funcție de anumite criterii (starea aplicației: reviewed sau not reviewed, tipul de aplicație: hosted sau packaged ș.a.)

După ce trec de procesul de filtrare, aplicațiile sunt marcate în baza de date ca fiind acceptate (libere) sau neacceptate (nelibere).

Fireplace nu poate să comunice direct cu baza de date (și nici nu ar trebui, având în vedere că e o aplicație Javascript ce rulează local, la fiecare client în parte), așa că trebuie să implementăm o aplicație Web ce furnizează API-ul Marketplace, cu care Fireplace știe să comunice.

Din fericire, API-ul nu este deloc greoi și nu trebuie implementat în întregime. Spre exemplu, nu sunt necesare părțile legate de Payments, Submissions, Abuse și Accounts.

Furnizorul de API este tot o aplicație Python, scrisă cu ajutorul framework-ului Flask. Acesta permite atașarea foarte ușoară de funcții la URL-uri, fiind astfel foarte potrivit pentru dezvoltarea de API-uri.

Ultima componentă, interfața Fireplace, comunică cu baza de date prin intermediul furnizorului de API și este singura aplicație cu care utilizatorii de rând ai Acvariului vor avea de-a face. Codul pentru Fireplace există deja și va trebui modificat doar minor, pentru a afișa licența aplicațiilor din Acvariu.

Ca să recapitulăm, avem:

  • Baza de date
  • Scriptul ce descarcă dump-urile zilnice de la Mozilla și le adaugă în baza de date
  • Interfața de administrare și review
  • Furnizorul de API
  • Fireplace

În articolele viitoare voi detalia fiecare componentă în parte.