Perché utilizzare i servizi Web anziché l'accesso diretto a un database relazionale per un'app Android?


19

Ho cercato sul web come accedere in modo efficiente a un database centrale in una posizione remota e ho incontrato suggerimenti per utilizzare i servizi Web anziché l'accesso diretto (ad esempio JDBC ecc.) A un database. Mi chiedo il motivo di ciò e di altri suggerimenti .

Risposte:


25

L'aggiunta di un livello di servizio Web ti dà l'opportunità di rendere il tuo client più leggero, sia in termini di potenza della CPU richiesta sia in termini di larghezza di banda utilizzata durante l'elaborazione. Entrambi i fattori sono estremamente importanti per gli utenti finali:

  • L'uso di meno CPU aumenta la durata della batteria,
  • L'uso di una larghezza di banda inferiore riduce i pagamenti mensili per gli utenti con piani misurati

Introducendo un livello di applicazione Web si sposta la maggior parte dell'elaborazione da un client portatile a bassa potenza, larghezza di banda ridotta, memoria ridotta a un server collegato, ad alta potenza ad alta larghezza di banda, che ha più memoria di esso esigenze: un ambiente in cui l'elaborazione e le comunicazioni costano una frazione di ciò che costano a un cliente.

Ma aspetta, c'è qualcosa anche per te: suddividendo il sistema ottieni un maggiore controllo sulle regole aziendali, sulla struttura del database e sulle versioni di ciò che è là fuori. Quando lasci che un client mobile si connetta direttamente al database, il tuo progetto viene "sposato" con quella struttura del database: quasi ogni modifica interromperebbe la retrocompatibilità con un client che potrebbe essere riluttante ad aggiornare la sua app.

Al contrario, l'aggiunta di un servizio Web nel mezzo ti consente di far evolvere l'interfaccia verso i client mobili in modi più gestibili: ad esempio, potresti mantenere la vecchia interfaccia in posizione, aggiungerne una nuova che funzioni "in parallelo" con essa, e quindi del tutto ristrutturare il database senza rompere un singolo client.

Se segui alcuni principi di progettazione piuttosto elementari durante la progettazione del tuo servizio web, potresti anche ottenere vantaggi significativi riutilizzando l'infrastruttura lato server matura che è stata implementata: ad esempio, puoi ottenere gratuitamente servizi cache e proxy.

Infine, questo aprirà la porta ad altri sviluppatori esponendo la tua applicazione a piattaforme che non potresti fornire assistenza, giocando in definitiva a vantaggio della tua azienda.


1
"sia in termini di potenza della CPU richiesta che di larghezza di banda utilizzata durante l'elaborazione" era il punto chiave che stavo cercando. Grazie
yesildal,

4
Inoltre, se la tua app comunica direttamente con il database, sei solo un compilatore inverso lontano da qualcuno che elimina ogni tabella nel tuo database. Con un'app Web, puoi usare un controllo molto più preciso e fermare cose del genere
Earlz,

1
@Earlz: non che lo farei volentieri per una webapp, ma la maggior parte dei server di database ha autorizzazioni piuttosto solide e ben definite. Nessuna scusa per un utente Web con autorizzazioni per la tabella di rilascio.
Wyatt Barnett,

1
@WyattBarnett ok ... senza procedure memorizzate e simili, come permetteresti ad un utente di aggiornare il proprio profilo utente? autorizzazione di lettura / scrittura per la tabella USERS ... Che cosa impedirebbe loro di eliminare o modificare le righe che non sono le loro .. o addirittura leggere le righe che non sono le loro. Sono abbastanza sicuro che nessun server di database abbia questo tipo di grana fine senza usare procedure memorizzate o qualcosa del genere
Earlz,

@Earlz - nessuno di cui io sia a conoscenza, ma questo è oltre al punto - perché parlerai direttamente con il tuo database e ignorerai deliberatamente le funzionalità del database per renderlo sano di mente? E faresti qualcosa incentrato sul profilo e aggiornerai pesantemente in questo modo?
Wyatt Barnett,

13

Mette uno strato di astrazione tra l'app e il DB. Questo ti offre molti vantaggi come:

  • Limitare l'accesso al DB solo alle parti necessarie all'app. Ciò semplifica il codice dell'app e mantiene sicuro il tuo DB.
  • Assorbe il funzionamento interno del DB, quindi se in seguito hai deciso di modificare lo schema, le query o persino l'intero database, il collegamento all'app non viene interrotto fintanto che mantieni correttamente il livello intermedio.
  • Consente di aggiungere funzionalità al di fuori dell'ambito di un DB. Dati di cache che sono abbastanza costanti per esempio. Le regole aziendali sono un'altra parte che dovrebbe essere separata dal DB.

1
Un altro vantaggio è che consente di aggiungere una cache, lato client o lato server (o entrambi, per scopi diversi).
TMN,

@TMN - Buon punto!
Sistema

Ok, ma questi fatti sono validi anche per qualsiasi tipo di applicazione Web, vero? L'inserimento di un livello (servizi Web) aumenta i tempi di risposta per un'app mobile che dovrebbe rispondere rapidamente?
yesildal,

1
@yesildal - Sì, sono ancora validi. In realtà, sono validi per tutti i tipi di applicazione. Tuttavia, nelle app Web non è necessario attenersi all'uso dei servizi Web e semplicemente isolare queste funzioni nel proprio assembly (ad esempio). Il motivo dell'utilizzo dei servizi Web per le app remote (come le app telefoniche) è che il server DB non è nelle immediate vicinanze.
Sistema

@yesildal - re performance: non proprio, se hai 1 utente allora sì, ci sarà un ulteriore ritardo nella restituzione del risultato, ma se hai un milione di utenti le cose sono diverse e dividere il codice in 2 server può rendere il prestazioni complessive più veloci.
gbjbaanb,

4

Un altro motivo per non esporre direttamente il DB: il trasporto. La maggior parte dei database relazionali, il tipo di cose con cui si parla con JDBC, non sono progettati per l'internet pubblica in generale. La connessione Internet wireless è una fine orribilmente inaffidabile di detta Internet pubblica. La gestione delle eccezioni sarebbe da incubo e probabilmente finiresti per scrivere il retro del livello dei servizi Web all'interno della tua app per evitare di perdere transazioni.

Esistono alcuni tipi più recenti di database che parlano HTTP e potrebbero essere adatti a questo tipo di cose. Tendono anche a presentare modi per inserire il codice dell'applicazione nel database. Potresti voler dare un'occhiata a CouchDb o RavenDb - entrambi sono dbs di documenti con funzionalità di mappa / riduzione che funzionano su json e http, proprio come molti moderni servizi web.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.