it-swarm-id.com

Pro dan Kontra dari RESTful architecture

Diskusi paling umum yang pernah saya lihat mengenai pro dan kontra dari REST cenderung membingkai diskusi itu relatif terhadap SOAP. Saya tidak punya pengalaman dalam keduanya. Saya saat ini dihadapkan dengan keputusan yang kekurangan saya pengalaman membuat saya sulit untuk mengevaluasi. Saya mulai mengembangkan aplikasi yang memiliki beberapa komponen - terutama aspek administrasi yang memungkinkan pemilik untuk mengelola beberapa situs - dan antarmuka pengguna yang menghadap publik yang memungkinkan pengguna untuk berinteraksi dengan data yang dimiliki pada Host. Saya perlu mengevaluasi implikasi yang memungkinkan bagian yang terakhir di-host di mana saja dan berkomunikasi dengan yang pertama melalui arsitektur RESTful - atau menuntut bahwa kedua komponen berada pada Host yang sama. Apa implikasi kunci dari pengembangan arsitektur RESTful, khususnya berkenaan dengan kapasitasnya di bidang-bidang berikut:

1: Keamanan 2: Kinerja 3: Kompleksitas antarmuka

EDIT: Melihat beberapa jawaban untuk pertanyaan ini - saya harus mengklarifikasi. Saya tidak mencari perbandingan dengan SOAP - lebih merupakan gambaran dari REST aplikasi vs aplikasi di mana semua komponen berada pada satu Host. (Terima kasih atas jawaban-jawaban itu) meskipun!)

20
sunwukung

Mengingat area-area itu, saya bisa memberikan gambaran kasar, tapi saya tidak bisa menarik kesimpulan untuk Anda. Ada dua area utama di mana kedua protokol berbeda:

  • Format pesan
  • Penemuan layanan

Format pesan paling mudah dipahami. Kemasan SOAP untuk permintaan dan respons cukup berat. Ada amplop SOAP yang berisi bagian tajuk dan bagian tubuh. Header dapat digunakan oleh beberapa filter dalam rantai permintaan untuk melakukan semacam identifikasi, otorisasi, dll. Namun, XML mahal untuk diurai, yang menghasilkan penalti tertentu untuk skalabilitas sistem Anda. Seberapa besar tergantung pada lapisan pemrosesan SOAP di tumpukan Anda.

Penemuan layanan adalah tempat Anda mungkin akan memiliki pertengkaran paling banyak. REST pada dasarnya menyediakan poin akhir yang dapat diprediksi , dan isi dari permintaan adalah permintaan HTTP sederhana. Keuntungannya adalah tidak ada overhead tambahan, dan pengguna akhir dapat menebak bagaimana melakukan apa yang mereka butuhkan setelah mereka memahami struktur URL situs Anda. Tentu saja, orang yang sadar keamanan yang naif akan melihat itu sebagai kelemahan. Lagipula, dengan SOAP, Anda harus mengonsumsi WSDL untuk mengetahui titik akhir. Tentu saja, dengan SOAP Anda diberi seluruh format pesan sehingga Anda dapat membuat lebih banyak serangan yang ditargetkan.

Dipecah berdasarkan kategori yang Anda berikan:

Keamanan

Tak satu pun secara inheren lebih aman daripada yang lain. Gunakan prinsip keamanan yang baik:

  • Enkripsi komunikasi
  • Pastikan Anda mengautentikasi dan mengotorisasi pengguna sebelum diproses
  • Kebiasaan pengkodean yang baik untuk menghindari serangan langsung
  • Dan itu hanya daftar pendek.

Ingat ketidakjelasan! = Keamanan.

Kinerja

Baik kinerja mentah dan skalabilitas akan masuk ke REST karena permintaan mengikuti protokol HTTP sederhana. Kebanyakan SOAP tumpukan menggunakan parsing SAX (parsing berbasis peristiwa) yang sangat meningkatkan skalabilitas tumpukan SOAP, tetapi ada dampak yang terukur terhadap overhead. SOAP memiliki overhead pemrosesan HTTP normal di samping overhead parsing XML. REST hanya memiliki overhead pemrosesan HTTP.

Kompleksitas

Dari perspektif sistem, REST menang. Ada lebih sedikit bagian yang bergerak, rantai permintaan yang lebih ramping, dll. Itu berarti lebih mudah untuk membuatnya dapat diandalkan.

Dari perspektif programmer, SOAP dapat menang jika IDE atau kerangka kerja yang Anda gunakan memberikan dukungan yang baik untuk itu. Pada dasarnya, dengan REST tanggung jawab ada pada Anda untuk melakukan pekerjaan preprocessing (otentikasi/otorisasi/dll) sementara dengan SOAP banyak yang dapat diselesaikan dengan rantai pemrosesan yang dapat dicolokkan.

Preferensi Saya

Saya sangat nyaman dengan permintaan HTTP, dan saya tahu cara kerja web. Akibatnya, pendekatan REST lebih disukai bagi saya. Namun, saya tahu bahwa beberapa klien saya merasa tidak nyaman dengan itu. Mereka telah membaca beberapa artikel industri mengecam keamanan REST vs SOAP, dll. Intinya adalah bahwa tidak ada pendekatan yang menjamin keamanan. Ada pada Anda untuk memastikan aplikasi seaman yang dibutuhkan. Jelas, aplikasi web sosial tidak menuntut (atau menginginkan) keamanan sebanyak bank atau sistem pemerintah. Banyak SOAP tumpukan menyertakan prosesor yang dapat Anda pasang untuk memberikan kemiripan keamanan, tetapi masih merupakan tanggung jawab Anda untuk mencari dan meletakkannya di tempat.

13
Berin Loritsch
  1. Keamanan: Gunakan HTTPS. Ini berlaku untuk keduanya.
  2. Kinerja: . REST lebih murah CPU (kurang parsing, marshalling, membuka bungkus). Juga, caching dengan REST adalah sepotong kue.
  3. Kompleksitas: REST menuntut lebih sedikit dalam hal pengaturan, hanya saja GET/POST. SOAP membutuhkan administrasi yang lebih banyak untuk dipelihara (wsdl dll), tetapi sedikit lebih mudah jika IDE mendukungnya.

Saya pikir SABUN terlalu kembung ketika Anda dapat melakukan hal yang sama dengan REST dan beberapa jenis konten/mime. Juga, SOAP membawa banyak overhead, karena sifat pembungkusnya dan fakta bahwa itu lebih umum dan tidak terbatas pada HTTP. SOAP tergoda untuk menggunakan jika IDE mendukungnya dengan benar dan Anda tidak ingin belajar HTTP. Tetapi bagi saya, REST jauh lebih mudah digunakan dan banyak lebih banyak web friendly.

Saat ini, ada sangat bagus REST API untuk digunakan. Jika Anda ke Jawa, maka Jax-RS benar-benar keren. Untuk beberapa orang, ini seperti porno .

12
Martin Wickman

Saya pikir keuntungan terbesar dari REST adalah untuk keluar dari arsitektur RPC. REST mengekspos sumber daya, bukan proses. Itu memungkinkan Anda untuk membuat sistem yang terikat secara longgar, di mana perubahan, peningkatan, bahkan kegagalan satu bagian berdampak terbatas (negatif) pada bagian lain.

Sayangnya, penyalahgunaan REST adalah untuk mengekspos struktur data dalam Anda (dalam kasus terburuk, itu adalah CRUD dari database Anda, ugh). Itu membuatnya sangat sulit untuk melakukannya dengan aman Penggunaan yang benar adalah untuk mengekspos objek tingkat tinggi yang relevan dengan bagian dari sistem yang Anda tangani, dan secara bebas mengembalikan kode status kesalahan pada setiap inkonsistensi.

Bagian lain yang sering diabaikan dari REST adalah idempotensi sebagian besar kata kerja. Tidak hanya GET, tetapi juga PUT dan DELETE harus hasil yang persis sama jika diterapkan sekali atau beberapa kali (Anda bebas dari mengembalikan 404 jika sudah dihapus, atau 'tidak ada perubahan' jika klien PUTting sama). Itu mengarah ke sistem yang kuat dan kurang saling ketergantungan interpretasi yang tepat dari semantik.

8
Javier

Standar WS- * sebagian besar tentang menjalankan RPC melalui SOAP/HTTP. Jadi, semua pemikiran yang masuk ke CORBA dan J2EE dan pendahulunya sebagian besar telah pindah untuk melakukan hal-hal yang sama dalam XML. Ini berarti hal-hal seperti deklarasi tipe dan kontrak layanan, pertukaran metadata, keamanan deklaratif dll. Semua hal yang nyata "perusahaan". Terus-menerus digunakan di perusahaan, terus terang.

Orang yang membangun aplikasi web internet seperti Anda, hampir pasti akan lebih baik menggunakan arsitektur yang tenang. Hampir semua platform dapat mengkonsumsinya dan melakukannya secara sederhana dan tanpa khawatir tentang versi spesifikasi mana yang Anda gunakan dan segudang quirks konversi jenis khusus alat, dll.

3
Jeremy

Hanya keuntungan besar dari SOAP dibandingkan dengan saat ini REST implementasi adalah bahwa SOAP lebih mudah digunakan - kebanyakan klien RESTful membutuhkan saya untuk memahami antarmuka dan menulis semacam klien.Untuk SOAP, saya hanya menunjuk wsdl.exe dan menghasilkan kelas untuk saya.

0
Wyatt Barnett