Kami sedang mengembangkan API REST yang antara lain akan dikonsumsi oleh HTML5 frontend melalui javascript. Aplikasi ini untuk digunakan dalam organisasi dan biasanya memiliki sekitar 300 pengguna, tetapi kami ingin skala hingga 1000 pengguna atau lebih.
Biasanya koneksi ke API akan dilakukan dalam LAN sehingga kualitas dan latensi koneksi akan baik, meskipun tidak dikecualikan penggunaan sesekali melalui Internet di mana koneksi bisa lebih lambat dan dengan lebih banyak lag melalui 3G / 4G.
Dua opsi yang kami pikir adalah:
Frontend akan membuat beberapa panggilan asinkron secara simultan ke API untuk memuat berbagai komponen antarmuka.
- Pro: Kesederhanaan.
- Cons: Lebih banyak koneksi ke server.
Pengontrol frontend akan membuat satu panggilan ke API yang lewat sebagai parameter yang objek harus diambil.
- Pro: Hanya satu koneksi ke server, meskipun server akan membuat beberapa koneksi ke database.
- Cons: Memerlukan mekanisme di frontend dan API. Ini menyulitkan desain.
Penjelasan lebih lanjut: Akan ada sumber daya yang berbeda ... / Produk ... / Lokasi dll. Sumber daya ini dapat diambil sendiri, tetapi akan ada sumber daya abstrak lain ... / layar? Produk & Lokasi yang akan mengambil keduanya dalam satu panggilan.
/screen?Product&Locations
adalah pendekatan yang buruk , setidaknya dengan semua pengalaman yang saya miliki mengembangkan REST API dan aplikasi web yang menggunakannya. Dari sudut pandang monolitik murni (misalnya di Ruby on Rails), memiliki rute/screen
yang memuat keduanyaProduct
danLocation
sumber daya sangat baik. Namun, dari perspektif REST , Anda tidak akan pernah ingin rute memuat lebih dari satu (kecuali jika Anda BERGABUNG tabel untuk mendapatkan lebih banyak data sekaligus). Apa yang/screen
harus Anda lakukan adalah memuat halaman tata letak dasar dan Anda AJAX API untuk mendapatkan data (Product
,Location
, dll)./screen
AJAXHTTP GET
ke/products/popular
dan/locations
). API Anda seharusnya bukan yang melakukan banyak pemuatan, karena Anda tidak mungkin menampilkan data dengan cara yang sama di aplikasi web vs Android misalnya.