2009-06-25 8 views
6

Sto scrivendo un'applicazione client desktop Java che recupera i dati da un server MySQL remoto. Per scopi di sviluppo ho avuto la connessione diretta al server MySQL (cioè con DriverManager.getConnection (databaseURL) ecc.), Ma ho intenzione di passare a utilizzare un servizio web (una volta che è stato creato). La mia domanda è se non potessi continuare con la connessione diretta?È ragionevole collegare un client desktop direttamente a MySQL?

Qual è il servizio Web che mi darà altro che più codice da scrivere? Dovrei implementare la mia autenticazione; cosa c'è che non va semplicemente affidandosi a MySQL?

(Sto formulando questa domanda piuttosto in negativo, perché ho l'idea che questo paradigma sia in qualche modo disapprovato in questi giorni, è proprio per questo che lo sto chiedendo, perché mi sembra che sia perfettamente a posto cosa da fare.)

Grazie per qualsiasi suggerimento che potresti essere in grado di darmi!

risposta

2

Beh, a patto che tu dia al cliente un utente con solo le giuste autorizzazioni, non vedo nulla errato con collegamento diretto a MySQL. Forse se avremo molti e molti di questi client in esecuzione, il che manterrà molte connessioni a MySQL aperte, mentre un servizio web potrebbe usare una singola connessione e gestire il carico da tutti i client.

La vera utilità di un servizio Web è quando si ha molta logica aziendale che non può essere presente nel database. Mettere questa logica nel client è una pessima idea perché gli utenti possono eseguire versioni obsolete e così via. Inoltre, un servizio Web consente di avere diversi tipi di client (come un client Windows, un client Web, ecc.) Senza dover riscrivere alcuna logica oltre alla presentazione.

3

vari motivi (in nessun ordine particolare):

  • Variazione logica di business in un solo luogo, le modifiche allo schema di database non hanno alcun effetto sui client (solo il servizio)
  • MySQLs sistema di autorizzazione è piuttosto grossolana
  • Più sicuro, dal momento che non c'è bisogno di aprire il DB al mondo esterno
  • servizi Web operano attraverso le porte HTTP standart, meno problemi con i firewall
  • non c'è bisogno t o installare i driver ODBC

Naturalmente, i servizi Web non sono una panacea universale. Alcuni dei suddetti potrebbero non essere applicabili nel tuo scenario particolare, utilizzare ciò che è meglio per te.

0

Un servizio Web consente di memorizzare nella cache i dati, riducendo lo sforzo sul database. Inoltre, renderà più semplice l'esposizione dei dati dal sistema ad altri sistemi. Un'altra cosa è la flessibilità: con un servizio Web come un altro livello, è possibile modificare le modifiche della stringa di connessione/schema per tutti i client in un'unica posizione, non sarà necessario ridistribuire il client.
Avrai mai bisogno di qualcuno di questi? Di solito non vado per paradigmi, come dici tu, ma penso che un servizio web possa avere un senso. Tuttavia, solo tu conosci il design della tua applicazione: quante persone useranno questo client? Una connessione al server MySQL richiede software/configurazioni speciali sul computer client? (Oracle lo fa, per esempio).

0

Questo feed nelle altre risposte, ma si consideri che se si consente ai client di connettersi direttamente a un server centrale questo darà loro le credenziali necessarie per eseguire qualsiasi query all'interno del database in cui stanno lavorando. Non sono sicuro Quanto è buono il supporto in MySQL per limitare l'utilizzo delle risorse, ma scommetto che in questo momento un determinato client potrebbe connettersi al server del database e lanciare una query scritta in modo così grave che mette in ginocchio il server DB. Non lo farebbero necessariamente con intenti malevoli, forse stanno solo cercando di implementare una funzionalità extra che non hai pensato.

Quindi, in pratica, ciò che il servizio Web ti consente di fare è togliere energia all'utente. Potenza di cui non hanno bisogno in questo caso. A meno che i clienti gestiscano il proprio server di database, ovviamente, ma questo è un ambiente completamente diverso. (se vogliono mandare in crash il proprio DB, è il loro business)

+0

Sì, questo sembrava essere un problema grave, ma ho pensato che avrei potuto limitare l'accesso dei client alle stored procedure appropriate e tutto sarebbe andato bene. Forse c'è dell'altro però. –

+0

Perché non incorporare la stringa di connessione con un nome utente/passaggio all'interno dell'app? In questo modo l'app ha accesso completo al database, ma l'utente reale non conosce ancora le credenziali di accesso. Ovviamente, controlli il codice dell'app, quindi dov'è la preoccupazione? – JoeCool

+0

@JoeCool per un utente malintenzionato, trovare le credenziali è semplice come eseguire 'stringhe' sul contenitore decompresso. È possibile proporre soluzioni a questo, ma hanno tutti lo stesso problema di base che ha il DRM, vale a dire che a un certo punto è necessario ottenere gli accessi utente in chiaro sul sistema dell'utente. L'utente controlla quel sistema, in modo che possa arrivare a quelli. Questo non è un grosso problema se la tua app è una cosa interna utilizzata da 3 dipendenti durante la sua intera vita, più ancora quando la distribuisci effettivamente a molte persone, alcune delle quali potrebbero non piacerti molto. – wds

0

Il collegamento diretto al database comporta, ovviamente, avere l'interfaccia per il database direttamente accessibile da Internet. Ciò significa che, a meno che tu non sia molto attento a come hai impostato le tue autorizzazioni, potresti rendere vulnerabile l'intero database all'attacco. Mentre con un servizio Web, l'unico accesso che un utente può avere sul database è l'accesso/funzionalità disponibile tramite il servizio Web. Sottolineerei che proteggere e mantenere in maniera corretta un database MySQL aperto sulla rete è più di una seccatura rispetto al codice aggiuntivo coinvolto nella creazione di un livello di autenticazione del servizio Web.

Inoltre, se è necessario modificare le tabelle in qualsiasi modo, è necessario aggiornare le applicazioni client, anziché aggiornare semplicemente il servizio Web, se le query vengono generate dal client.

0

Più di una domanda che una risposta, quali sono le implicazioni di velocità tra i 2 approcci? collegamento diretto a mysql o utilizzo di un servizio Web

Problemi correlati