Saat ini saya merencanakan aplikasi yang akan digunakan di perusahaan. Diperlukan untuk membangun Aplikasi Desktop. Saat ini mereka tidak yakin apakah aplikasi tersebut akan tersedia di ponsel atau browser dalam waktu dekat.
Saya memiliki dua kemungkinan:
Akses database secara langsung dari Aplikasi Desktop
Buat REST API dan sambungkan ke ini
Bisakah saya menggunakan API REST jika aplikasi tetap hanya Aplikasi Desktop dalam perusahaan? Saya tahu itu mungkin, tetapi apakah itu "benar"? (Praktik terbaik)
Ada beberapa (mungkin) keuntungan dan kerugian untuk membuat secara langsung API REST:
Kekurangan:
- Butuh waktu lebih lama untuk berkembang
- Lebih kompleks
- Server bekerja lebih banyak
- ̶Se̶̶c̶̶u̶̶r̶̶i̶̶t̶̶y̶̶ ̶̶i̶̶s̶̶s̶̶u̶̶e̶̶s̶̶? ̶
- Lebih lambat? (Server dan Aplikasi Desktop berada di Jaringan yang sama)
Keuntungan:
- Bermigrasi ke platform lain lebih mudah
- Logika Bisnis juga diperlukan saat memanggil langsung basis data. Tidak akan butuh waktu lebih lama untuk berkembang
- Hal yang sama berlaku untuk kompleksitas
- Keamanan (sebagaimana disebutkan oleh tkausl dalam komentar)
- Maintainability (seperti yang disebutkan oleh WindRaven dalam komentar)
Security issues
sebagai kerugian untuk REST-API?Jawaban:
Ketika datang ke aplikasi besar dengan database besar yang berisi jutaan catatan, Anda segera menyadari, memilih, memperbarui, menyisipkan, dan menghapus sama sekali tidak cukup.
Jadi Anda mulai berpikir dengan cara yang berbeda. Anda membuat prosedur dan pemicu untuk menangani hal-hal yang lebih rumit secara langsung dalam database dan ini tidak terlalu baik. Database menawarkan kinerja hebat saat melakukan operasi CRUD. Prosedur yang panjang? Tidak terlalu banyak.
Masalah dengan prosedur
Sekarang bayangkan, bahwa Anda beralih ke database yang tidak mendukung konsep prosedur? Apa yang akan kamu lakukan? Anda terpaksa memindahkan prosedur ke basis kode Anda, di mana Anda dapat yakin bahwa sekali Anda memprogram di katakanlah Java, itu akan selalu tetap di sana, tidak peduli mesin database mana yang Anda pilih.
Belum lagi, prosedur Anda biasanya merupakan bagian dari logika bisnis Anda dan itu bukan ide yang baik untuk memiliki logika bisnis Anda terpecah di basis kode dan basis data Anda.
Idealnya, Anda harus selalu memiliki mediator antara database dan klien yang menerapkan aturan bisnisnya sendiri. Menyediakan akses langsung ke database bukanlah ide yang baik, karena ketika Anda melakukannya, orang yang memiliki akses memiliki akses langsung ke tabel dan dapat melakukan hampir semua hal dengan data yang ada.
Kekurangan
Keuntungan
sumber
Inilah pendapat saya tentang masalah ini: Anda memiliki gagasan yang tepat tentang keinginan untuk menggunakan layanan web, tetapi Anda mungkin berencana menggunakan teknologi yang salah.
Ketika Anda mengatakan REST, saya berasumsi Anda sedang berbicara tentang Asp.Net WebApi. Itu teknologi yang salah untuk aplikasi intranet. REST & WebApi luar biasa, jangan salah paham, tetapi untuk aplikasi internal apa pun, layanan web WCF adalah cara untuk menurut hemat saya. Mereka memungkinkan klien untuk merujuk titik akhir layanan seperti perpustakaan kelas, yang berarti Anda tidak berurusan dengan XML atau JSON di klien desktop Anda. Anda bekerja dengan kelas & objek.
Bagaimanapun, ya. Anda punya ide yang tepat. Jika mereka tidak yakin apakah mereka akan membutuhkan klien berbasis web, maka Anda harus membuat arsitek sistem Anda untuk dengan mudah menambahkannya jika mereka memutuskan mereka menginginkannya nanti. Jauh lebih mudah untuk menambahkan berbagai jenis klien ketika Anda memiliki arsitektur berorientasi layanan.
sumber
Lihatlah dengan cara ini, itu jelas merupakan pola umum dan mungkin bisa digambarkan sebagai praktik terbaik.
Bergantung pada platform Anda, Anda mungkin menemukan alat yang hampir membuat masalah hilang - Microsoft memiliki dukungan ODATA untuk aplikasi terhubung yang seharusnya membuat formulir di atas data secara langsung begitu Anda telah menaiki kurva belajar.
Lebih pragmatis - mendefinisikan API yang Anda butuhkan untuk lapisan data Anda di aplikasi desktop dan kode untuk API itu. Letakkan semua akses basis data di belakang API itu - yang sebenarnya membuat segalanya lebih baik dari perspektif pengembangan aplikasi - dan kemudian lokasi kode akses basis data yang sebenarnya menjadi kurang signifikan (API yang sama dapat diimplementasikan oleh kode yang berbicara langsung ke basis data atau dengan kode yang berbicara secara tidak langsung ke database melalui titik akhir istirahat). Jika Anda mulai dengan implementasi langsung maka versi REST secara substansial akan menjadi pembungkus putaran API yang sama sehingga Anda tidak akan dihukum terlalu buruk ...
Ini mungkin tidak sesederhana yang saya inginkan - tetapi ini adalah pola yang baik, ini memberi Anda fleksibilitas yang mungkin Anda butuhkan tanpa pergi jauh ke jalur YAGNI .
sumber