Quali sono le migliori pratiche quando si tratta di progettare un'app di social network per Android (possibile porta iOS successiva a seconda dell'uptake)?
È la mia prima volta che architettoro qualcosa di questa scala da zero, e probabilmente sto già facendo degli errori in fase di progettazione.
Quello che ho già in mente è:
-
Avere un backend Postgresql per archiviare i dati dei clienti. Ho intenzione di creare un utente 'app' per gestire tutte le richieste RESTful in arrivo, che porta al mio prossimo punto ..
-
Connetti il database all'app tramite un'interfaccia RESTful (non penso che la piattaforma sia eccessivamente importante ma sto guardando Go o Puma / Sinatra o Flask perché voglio ridurre al minimo il sovraccarico e mantenere tutto il più efficiente possibile).
-
Autentica gli utenti usando qualsiasi plugin di autenticazione adatto all'interfaccia RESTful e poi ..
-
Tunnel tutto il traffico attraverso un socket SSL che apro sull'app che si connetterà all'interfaccia (questa è una delle aree in cui non ho una grande quantità di conoscenza / esperienza)
-
Carica dati relativi ad altri utenti e li memorizza localmente in un db sqlite crittografato sul dispositivo Android che creerò come parte del processo di avvio dell'app. Le immagini saranno l'unico tipo di media che permetterò. Pulirò il dl sqlite ogni volta che l'utente accede all'app o quando raggiunge una certa dimensione, cioè oltre 3 mb.
-
Crea l'abbonamento dell'app in modo tale da verificare le credenziali dell'utente ogni volta che accedono. Controllerò lo stato dell'abbonamento e abiliterò di conseguenza un comportamento diverso.
-
Affronta problemi di connessione pesante inserendo Pgbouncer nel db.
-
Memorizza le immagini dell'utente sul mio server come normali file di immagine e quando vengono selezionati gli utenti pertinenti, li invierò all'app tramite il socket.
-
Esegui l'intero server come una macchina virtuale, possibilmente da macchine CoreOS / Docker, che suona come un buon adattamento da quello che ho letto.
C'è qualcosa di sbagliato in qualsiasi parte del mio progetto previsto? C'è qualcosa di necessario che ho perso?