Saya pada dasarnya telah melakukan hal-hal berikut ketika membuat layanan REST:
- HTML diminta
- layanan mengembalikan halaman web yang diinginkan tetapi tanpa "sumber daya" yang diminta, mis. data
- halaman web berisi JavaScript yang mengeluarkan permintaan AJAX ke layanan yang sama (tipe konten berbeda)
- layanan kemudian mengembalikan data aktual (JSON) dan halaman menampilkannya
Di satu sisi tampaknya tidak efisien (2 permintaan) tetapi kemudian saya menggunakan ini, "kinerja tidak menjadi perhatian", yang berarti aplikasi internal traffic rendah dan situs web sederhana dan memuat cepat.
Alasan saya akhirnya dengan ini adalah bahwa halaman web kemudian dapat menjadi hampir murni Html + JavaScript dan hampir tidak ada hal-hal sisi server diperlukan, terutama tidak ada loop, untuk membuat tabel dan hal-hal seperti itu (yang saya pikir sangat jelek dibandingkan dengan hal-hal seperti slickgrid), misalnya pemisahan data dan tampilan.
Sekarang sebelum saya menggunakan ini, apakah ini ide yang bagus atau haruskah saya berhenti melakukannya?
web-services
rest
anti-patterns
pemula_
sumber
sumber
Jawaban:
Jika Anda meminta sumber daya dan tidak mengandung data, maka itu bukan layanan REST. Layanan yang menyediakan data aktual di json mungkin, tetapi bagian HTML tidak. Untuk aplikasi web itu tidak masalah.
Teknik ini berfungsi, tetapi Anda harus menyadari keterbatasannya:
Saya juga akan mencatat bahwa kode yang menghasilkan HTML pada dasarnya sama apakah menjalankan sisi server atau sisi klien. Anda memiliki pilihan yang jauh lebih besar dari kedua bahasa dan kerangka kerja di sisi server dan saya yakin ada beberapa padanan slickgrid juga.
Anda dapat, dan harus, tetap mempertahankan pemisahan data dan tampilan di sisi server. Sistem template dapat, dan seharusnya, cukup mengambil data sebagai struktur data atau bahkan json (terutama jika layanan sebenarnya dalam bahasa yang berbeda dari sistem template) dan hanya perlu memperluas template dengan data tersebut.
Dan tidak, saya tidak berpikir tentang PHP; itu adalah sistem template yang paling tidak mampu di luar sana (meskipun ada beberapa yang lebih baik dibangun di atasnya). Saya berpikir Genshi atau XSLT atau sesuatu yang lebih maju yang menyediakan widget web.
sumber
Tidak ada yang salah dengan melakukan ini, selama Anda memastikan untuk menyusun kode Anda dengan bersih. Anda bahkan dapat menyajikan konten statis dari mis. Apache daripada layanan web Anda.
sumber
Ini praktik yang bagus. Dan itu dilakukan sepanjang waktu, althogugh seperti @JanHudec tunjukkan, menyebutnya layanan REST salah. Tetapi banyak situs web melakukan hal ini tepat untuk alasan yang Anda tunjukkan.
sumber
Saya tidak akan menyebutnya anti-pola, apa yang Anda gambarkan adalah lebih atau kurang klien yang gemuk , tidak sama sekali berbeda dengan layanan seperti Trello. Tanggung jawab awal server adalah mengirim DOM dan sumber daya apa pun yang diperlukan untuk membuat klien bekerja. Saya telah mengerjakan proyek serupa dalam otomatisasi pusat data dan pemantauan jaringan.
Klien memulai sebagai DOM yang jarang, menarik beberapa data melalui XHR (kadang-kadang melalui JSONP) dan akhirnya melekatkan dirinya ke server socket. Contoh yang bahkan lebih mendasar adalah aplikasi obrolan.
Satu-satunya alasan untuk tidak melakukannya adalah sangat sulit untuk memperbaikinya. Jika Anda merasa nyaman dengan pemrograman fungsional asinkron dan semua balapan dan tantangan lain yang dapat dihadirkannya, maka Anda tidak akan kesulitan mempertahankannya. Lebih penting lagi, Anda tidak akan kesulitan menulisnya sehingga orang lain akhirnya bisa memeliharanya.
Jika pemikiran untuk menambahkan lebih banyak fitur mulai menakuti Anda, atau Anda mulai menemukan bahwa debugging adalah mimpi buruk, maka Anda mungkin ingin mempertimbangkan metode lain dalam produksi saat Anda terus bereksperimen dan belajar.
Ini adalah desain yang valid selama Anda tidak menggali lubang untuk diri sendiri. Jika Anda memiliki sekumpulan JS acak di mana-mana alih-alih antarmuka yang bersih, maka Anda mungkin ingin memberi faktor ulang atau mengerjakan proyek secara berbeda. Sebagian besar fungsi Anda yang ditetapkan untuk dijalankan setelah semua sumber daya dimuat harus anonim dan dimasukkan dari antarmuka yang bersih. Jika tidak, Anda mungkin menuju masalah.
sumber
seperti yang dikatakan @Jan Hudec, pendekatan Anda pasti tidak bisa disebut REST. Meskipun bagian di mana permintaan klien untuk sumber daya bisa. Lebih baik jika klien menangani bagian presentasi, seperti
backbone
halnya. Ini berkomunikasi dengan server REST untuk sumber daya dan menampilkan mereka menggunakanviews
.sumber
Ini mungkin anti-pola, tapi saya pikir itu juga masa depan aplikasi web. Alih-alih mucking tentang dengan JavaScript, Anda harus menggunakan setidaknya perpustakaan templating. Solusi yang lebih baik adalah kerangka kerja MVC sisi klien seperti AngularJS (yang kebetulan saya gunakan sekarang).
Untuk beberapa referensi lainnya, berikut adalah posting blog populer yang membandingkan beberapa kerangka kerja, dan inilah situs yang mengimplementasikan program yang sama menggunakan banyak kerangka kerja.
Juga: Komentar Jan Hudec tentang interaksi mesin pencari dan pembaca layar adalah valid. Jika Anda bekerja di situs eCommerce (di mana pagerank penting), maka Anda mungkin tidak ingin menggunakan kerangka kerja sisi klien. Tetapi untuk aplikasi internal, ini biasanya bukan masalah.
sumber
Apa yang kamu lakukan terdengar bagus! Namun jika respons json Anda mengandung HTML apa pun maka Anda membuang-buang waktu.
Poin lain adalah klien bodoh Anda mungkin harus mendapatkan data jsonnya dari proyek yang berbeda. Anda harus bertujuan untuk pemisahan yang tepat antara klien dan layanan maka Anda akan memiliki layanan tenang yang tepat
sumber