Anda berpikir lebih sederhana dan lebih cepat untuk melakukannya dengan JDBC karena Anda tidak mempertimbangkan lingkungan operasi ponsel dan perangkat portabel di dunia nyata. Mereka sering memiliki konektivitas flakey melalui proxy penulisan ulang lalu lintas kereta dan firewall gila. Mereka biasanya menggunakan lapisan transport jaringan yang memiliki tingkat kehilangan paket yang tinggi dan variabel dan latensi yang bervariasi pada banyak urutan besarnya dalam rentang waktu yang singkat. TCP benar-benar tidak bagus dalam lingkungan ini dan khususnya kesulitan dengan koneksi yang berumur panjang.
Manfaat utama dari layanan web adalah:
-
Memiliki koneksi berumur pendek dengan kondisi minimal, sehingga mudah untuk kembali ke tempat Anda berada saat perangkat beralih jaringan WiFi, ke/dari seluler, kehilangan konektivitas sebentar, dll; dan
-
Dapat melewati semua kecuali proxy web yang paling mengerikan dan kejam
Anda akan secara rutin mengalami masalah dengan koneksi JDBC langsung. Salah satu tantangannya adalah dengan andal mengatur waktu koneksi mati, membangun kembali sesi dan melepaskan kunci yang dipegang oleh sesi lama (karena server mungkin tidak memutuskan itu mati pada saat yang sama dengan klien). Lain adalah kehilangan paket yang menyebabkan operasi yang sangat lambat, transaksi database yang berjalan lama, dan masalah konsekuen dengan durasi penguncian dan tugas pembersihan transaksional. Anda juga akan menemukan berbagai macam proxy dan firewall yang gila dan rusak di bawah matahari - proxy yang mendukung CONNECT
tetapi kemudian ternyata menganggap semua lalu lintas adalah HTTP dan memotongnya jika tidak; firewall dengan pelacakan koneksi stateful buggy yang menyebabkan koneksi gagal atau menjadi zombie setengah terbuka; setiap masalah NAT yang dapat Anda bayangkan; operator "membantu" menghasilkan TCP ACK untuk mengurangi latensi, apalagi masalah yang menyebabkan penemuan paket hilang dan ukuran jendela; pemblokiran port yang aneh; dll.
Karena semuanya menggunakan HTTP, Anda dapat mengharapkannya berfungsi - setidaknya, jauh lebih sering daripada yang lainnya. Ini terutama benar sekarang karena situs web umum menggunakan gaya komunikasi REST+JSON bahkan di aplikasi web seluler.
Anda juga dapat menulis panggilan layanan web Anda menjadi idempoten menggunakan token permintaan unik. Itu memungkinkan aplikasi Anda mengirim ulang permintaan modifikasi tanpa takut akan melakukan tindakan terhadap database dua kali. Lihat idempotence dan mendefinisikan idempotensi .
Serius, JDBC dari perangkat seluler mungkin terlihat seperti ide yang bagus sekarang - tetapi satu-satunya cara yang saya pertimbangkan adalah jika semua perangkat seluler berada di satu jaringan WiFi yang andal tinggi di bawah kendali langsung saya. Bahkan kemudian saya akan menghindarinya karena alasan manajemen kinerja basis data jika saya bisa. Anda dapat menggunakan sesuatu seperti PgBouncer untuk menyatukan koneksi di antara banyak perangkat di sisi server sehingga penyatuan koneksi bukanlah masalah besar, tetapi pembersihan koneksi yang hilang dan terbengkalai adalah, seperti lalu lintas tcp keepalive yang diperlukan untuk membuatnya berfungsi dan lama terhenti transaksi dari koneksi yang ditinggalkan.