Tumpukan khas untuk aplikasi web adalah database, server dengan kode sisi server, dan pengguna dengan browser dengan HTML / CSS / JavaScript.
Sebelum AJAX ekstensif, MVC di mana pengontrolnya adalah kode sisi server dikenali. Server harus merutekan permintaan jawaban untuk halaman web dinamis (yaitu solusi html templated seperti JSP dan ASP). Server untuk mengoordinasikan panggilan ke database dan memutuskan halaman dinamis mana yang digunakan untuk menjawab permintaan halaman. Hasil dari semua ini adalah bahwa server akhirnya mengandung logika bisnis, meskipun logika bisnis tidak sangat terkait dengan ide melayani halaman.
Sekarang kita pindah ke "Web 2.0" server server halaman statis yang menggunakan JavaScript untuk mengisi sendiri dan mengubah apa yang mereka sajikan. Dapat di JavaScript. JavaScript sering mengimplementasikan layanan RESTful yang berarti menetapkan permintaan basis data.
Jadi server dibiarkan dengan peran melayani file aktual dan menjawab panggilan AJAX. Dan menjawab panggilan AJAX hanyalah manajemen sesi dan memberikan keamanan. Dan sungguh, apa yang seharusnya bisa dilihat oleh pengguna adalah data yang harus ditentukan dalam database.
Jadi dari sana, haruskah server diturunkan ke peran perantara bodoh yang hanya sesekali melakukan sesuatu seperti mengirim email atau mematikan layanan web? Bisakah logika bisnis semua hidup dalam JavaScript (ketika itu bukan rahasia) atau hidup dalam prosedur yang tersimpan ketika itu?
Apakah masuk akal untuk bahkan mungkin menggabungkan server dan database atau membuat solusi ERP seperti fungsi SAP sebagai server?
Di sinilah Anda salah. REST bukan CRUD.
Sumber daya yang diekspos oleh REST bukan catatan basis data Anda; mereka sepenuhnya dikelola objek yang berperilaku sesuai dengan logika bisnis Anda. Ketika server menerima POST atau PUT, itu seharusnya tidak hanya memvalidasi dan menyimpan. Itu harus melakukan apa pun yang sesuai untuk aplikasi.
Contoh sederhana: aplikasi seperti twitter menerima tweet sebagai pesan POST pada wadah yang diberikan. Server kemudian menganalisis konteks ("siapa Anda?", "Saluran apa ini?") Dan konten ("ada tagar?", Indeks teks, dll.) Dan menyimpan semua ini di antrian masing-masing. Mungkin menambahkan referensi langsung ke semua pengikut Anda.
Itu banyak pekerjaan di luar hanya menambahkan sumber daya ke wadah, itu semua ditentukan oleh logika bisnis Anda. Dan itu milik server.
sumber
Kekhawatiran saya dengan pendekatan ini mungkin karena kesalahpahaman desain Anda, jadi jangan ragu untuk menembak saya.
namun, pikirkan tentang skala, kemampuan perawatan, dan keamanan produk.
Jika produk Anda tumbuh secara besar-besaran, basis data menjadi penghambat, sehingga sementara "kinerja" menyarankan untuk memasukkan logika bisnis ke dalam prosedur yang tersimpan, basis data menempatkan beban CPU tambahan pada server basis data Anda, memajukan hari ketika server mencapai kapasitas maksimal. Tidak seperti server web, database ACID tidak mudah ditingkatkan dengan menggunakan perangkat keras paralel. Jika produk Anda tidak akan pernah sesukses itu, ini bukan masalah.
Memikirkan mempertahankan logika bisnis dalam javascript yang berjalan di webbrowswers, di mana browser yang berbeda akan memerlukan javascriopt yang berbeda, beberapa versi browser, dll ... Mengapa membuat masalah ini lebih rumit daripada yang sudah ada?
Seperti yang dikatakan Javiar, menggunakan pendekatan REST sebagai API basis data untuk produk Anda benar-benar tidak masuk akal. Manfaat dari antarmuka REST adalah bahwa orang lain akan memikirkan berbagai cara untuk menggunakan dan menanyakan antarmuka REST Anda. Namun ini adalah sumber daya logika bisnis pos publik dan bukan sumber daya catatan tabel tingkat rendah. Pikiran membuat permintaan data tingkat rendah seperti tersedia melalui api HTTP terdengar seperti mimpi buruk keamanan.
sumber
Walaupun ada banyak aliran pemikiran tentang ini, dan tentu saja tidak ada satu cara yang dapat disebut "jalan yang benar" secara universal, sementara yang lain adalah "jalan yang salah" secara universal, ada sejumlah alasan untuk mengisolasi logika bisnis di sisi server , dan mengakses objek dan layanan tersebut melalui layanan RESTful.
Jawaban singkatnya adalah sebagian besar tentang manajemen risiko, serta pemantauan dan peningkatan kinerja.
Secara terperinci:
Alasan terpenting nomor 1 adalah keamanan. Klien tidak boleh dipercaya untuk mengirimkan apa pun selain sampah ke server, dan dengan menjaga sisi keamanan aspek server, Anda mengisolasi risiko potensial dari pengguna jahat yang merusak sistem Anda. Ingat, Javascript benar-benar sisi klien, dan mudah berubah, sehingga Anda TIDAK BISA PERCAYA OUTPUT.
Alasan nomor 2 adalah pemisahan keprihatinan. Programmer javascript Anda mungkin bukan pakar keamanan, dan guru keamanan Anda mungkin tidak terlalu hebat dalam Javascript. Dengan mengisolasi logika bisnis dari logika presentasi, Anda menghindari melintasi masalah ini, karena javascript tidak akan diizinkan untuk mengakses sumber daya di luar tingkat izinnya, dan diberikan kesalahan, yang penanganannya berada dalam ketentuan Script Programmer. Demikian juga, petugas Keamanan tidak akan men-debug Javascript untuk melihat bagaimana keamanan dipertahankan.
Alasan nomor 3 adalah kinerja. Logika bisnis berpotensi menuntut sumber daya server dan basis data. Dengan menjaga logika itu diisolasi dari elemen UI Anda, Anda kemudian dapat mengurangi sebagian aplikasi Anda, membuatnya lebih mudah untuk mengatasi kemacetan. Selain itu, jauh lebih mudah untuk mengisolasi proses bisnis mana yang memuat backend sistem atau database Anda jika proses bisnis dijalankan di server.
Akibat wajar di sini adalah bahwa seringkali beberapa proses bisnis akan menggunakan data yang sama, dan karenanya Anda dapat menerapkan caching di sisi server untuk mengurangi beban sistem secara keseluruhan yang mungkin tidak mungkin / aman untuk memberikan akses kode sisi klien.
Akhirnya, saya akan mengusulkan bahwa untuk mempertahankan standar ACID, Business Logic benar-benar perlu ada di server. Saya ingat mempertahankan produk penagihan yang berjalan di browser web, dengan hanya koneksi database ke server. Jika penagihan harian (yang bisa memakan waktu satu jam atau lebih pada hari yang baik!) Terputus, katakanlah, oleh browser yang ditutup atau mogok, mungkin butuh beberapa jam untuk memilah kekacauan yang dibuatnya dari database, yang tersisa dalam keadaan tidak konsisten. Ingat, ini juga melibatkan kartu kredit, jadi catatan tagihan juga harus diperiksa terhadap prosesor!
Logika bisnis sisi server sebagian besar sepele untuk memastikan pembaruan ACID, karena ada kerangka kerja untuk bahasa apa pun untuk mempertahankan transaksi, baik di tingkat aplikasi atau basis data. Jika Anda melakukan ini melalui beberapa pembaruan dari klien web ... Anda akan mendapatkan kondisi yang tidak konsisten di beberapa titik, dan itu kemungkinan akan mempengaruhi aplikasi Anda.
Meskipun tergoda untuk memikirkan layanan RESTful hanya sebagai cara untuk mengakses database, Anda tidak boleh jatuh ke dalam perangkap ini, karena itu adalah resep yang baik untuk bencana. Model objek yang Anda paparkan melalui layanan RESTful dapat terkait dengan database Anda, tetapi harus benar-benar merangkum logika bisnis Anda alih-alih hanya menggunakannya sebagai mesin CRUD.
sumber