Versi cepat:
Gunakan lapisan tengah layanan web yang berjalan pada host publik yang Anda kontrol (mungkin tetapi tidak harus host database). Buka metode layanan web publik untuk melakukan pekerjaan terbatas yang ingin Anda izinkan dan tidak ada yang lain.
Pertanyaan terkait:
- Driver JDBC PostgreSQL dengan Android
- Bagaimana cara menghubungkan ke server PostgreSQL melalui JDBC di Android?
Opsi implementasi
Secara pribadi saya akan menggunakan server aplikasi Java seperti Apache Tomcat atau JBoss AS 7 dan saya akan menulis metode layanan web saya menggunakan JAX-RS untuk menghasilkan API gaya REST yang bagus untuk digunakan oleh aplikasi saya. Itulah yang saya ketahui dan berfungsi dengan baik, tetapi Anda memiliki banyak opsi termasuk implementasi dari:
-
REST-like API (Java's JAX-RS impls Jersey dan RESTEAsy, berbagai alat bahasa lainnya) yang menggunakan permintaan HTTP dan menghasilkan balasan JSON atau XML.
-
SOAP dengan WSDL, lapisan "layanan web" klasik. Di Jawa dilakukan dengan JAX-WS di antara opsi lainnya. Sebagian besar bahasa memiliki alat untuk SOAP+WSDL tetapi agak buruk untuk digunakan terutama pada perangkat yang terhubung sebentar-sebentar seperti ponsel.
-
XML-RPC jika Anda suka rasa sakit
Ada beberapa quickstarts JAX-RS di cepat mulai JBoss AS 7 daftar; hanya mencari "JAX-RS". "ini atau ini .
Pertimbangan penting
Gunakan HTTPs jika memungkinkan, dan jika akses tidak untuk publik gunakan skema otentikasi HTTP yang sesuai seperti HTTP Basic auth over HTTPs. Setiap implementasi layanan web yang layak akan menawarkan opsi otentikasi atau mendukung platform yang dijalankannya. Hindari godaan untuk menerapkan otentikasi dan manajemen pengguna Anda sendiri di lapisan layanan web, Anda akan mengacaukan; gunakan auth di lapisan HTTP yang sudah ditulis dan diuji. Ini mungkin memerlukan penggunaan sesuatu seperti mod_auth_pgsql
Apache , ranah keamanan JDBC JBoss AS 7, dll. Satu-satunya kasus yang saya pertimbangkan untuk tidak melakukan autentikasi HTTP per pengguna yang tepat adalah di mana saya tidak perlu memisahkan pengguna saya untuk alasan keamanan, saya hanya peduli bahwa itu adalah aplikasi saya yang mengakses server , yaitu jika persyaratan keamanan saya cukup lemah. Dalam hal ini saya akan menggunakan nama pengguna/kata sandi tetap untuk seluruh aplikasi dan mungkin sertifikat klien X.509 jika Android mendukungnya.
Ingatlah bahwa tidak peduli bagaimana Anda mengamankan sesuatu, semua kredensial diketahui oleh pengguna atau dapat diekstraksi secara sepele dari .apk sehingga Anda masih harus menganggap siapa pun dapat mengakses metode layanan web Anda, bukan hanya aplikasi Anda. Tulis sesuai dengan itu.
Jangan jangan cukup kirim SQL dari aplikasi Anda melalui panggilan layanan web ke server dan kembalikan hasilnya sebagai JSON. Ini sangat tidak aman, juga jelek dan kikuk. Tulis metode layanan web untuk setiap tugas individu yang Anda inginkan agar dapat dilakukan oleh aplikasi dan simpan SQL di server. Ingatlah untuk menggunakan kueri berparameter dan berhati-hatilah dengan risiko injeksi SQL lainnya. Metode layanan web ini dapat menggunakan satu atau beberapa kueri untuk menghasilkan satu balasan - misalnya, Anda dapat mengumpulkan catatan "Pelanggan" dan semua catatan "Alamat" dan "Kontak" terkait kemudian mengembalikan hasilnya dalam objek JSON yang bagus perangkat Android dapat menghabiskan, menghemat banyak perjalanan pulang pergi jaringan yang lambat dan tidak dapat diandalkan.
Apa pun yang Anda gunakan, pastikan untuk melakukan panggilan layanan web di utas pekerja latar belakang dan tidak memblokir antarmuka pengguna. Bersiaplah untuk timeout dan kesalahan, dan untuk kebutuhan percobaan ulang. Uji aplikasi Anda dengan mensimulasikan kehilangan koneksi yang terputus-putus, latensi tinggi, dan tingkat kehilangan paket yang tinggi, serta memastikannya tetap dapat digunakan.