Apa faktor penentu dalam memilih untuk mengekspos layanan web sebagai layanan SABUN atau REST?

30

Sejauh yang saya lihat, mengkonsumsi SOAP memerlukan tumpukan SOAP, jadi lebih sulit bagi klien Anda untuk mengkonsumsi yaitu mereka perlu memastikan bahwa mereka memiliki tumpukan SOAP di tempat yang memformat data POST dan header dengan benar dan kemudian memberi Anda kembali beberapa struktur data, sedangkan dengan REST Anda hanya membuat permintaan GET HTTP dengan argumen dalam string kueri dan mendapatkan kembali beberapa teks yang saya kira mungkin XML.

Jadi apa yang diberikan kelebihan / kompleksitas SOAP Anda, kapan Anda membutuhkannya dan kapan Anda bisa dan harus Anda lakukan tanpanya?


sumber

Jawaban:

17

Saya telah mengimplementasikan REST API sebelumnya dan saya sangat menyukainya. Secara umum ketika Anda menerapkan REST lebih dari SOAP, klien / server Anda lebih ortogonal yang berarti bahwa Anda dapat lebih bebas mengubah server tanpa mempengaruhi klien Anda. Ortogonalitas ini adalah karena menggunakan komunikasi yang lebih abstrak dan sudah didefinisikan dengan baik melalui kata kerja HTTP. Selain itu, penggunaan hyperlink yang tertanam dalam respons REST Anda membuatnya lebih mudah untuk memperpanjang dan menumbuhkan API Anda yang relatif bebas rasa sakit. Klien seharusnya mengikuti tautan tersemat ini untuk mendapatkan sumber daya baru seperti manusia akan mengikuti tautan pada laman web untuk 'menelusuri' untuk informasi lebih lanjut.

Dengan mengatakan itu, saya memiliki beberapa rekan kerja yang diberitahu bahwa mereka harus menggunakan sabun dan mereka mengeluh tentang hal itu sepanjang waktu. Jadi saya meneliti keduanya lebih detail.

Secara umum yang saya temukan adalah bahwa REST sangat cocok untuk aplikasi yang sangat terdistribusi , ketika Anda memiliki ratusan, ribuan atau jutaan klien . Salah satu alasannya adalah orthogonality yang disebutkan di atas, yang lain adalah caching yang Anda dapatkan secara gratis karena Anda menggunakan HTTP.

SOAP mungkin menjadi cara yang lebih cepat untuk pergi ketika Anda membutuhkan API yang lebih kecil untuk satu atau dua klien dengan cepat dan Anda tidak terlalu khawatir tentang skalabilitas. Mungkin juga lebih cocok untuk Anda jika Anda tidak memiliki arsitektur yang terstruktur di sekitar sumber daya , karena mungkin Anda perlu waktu untuk merestrukturisasi aplikasi Anda untuk bahkan dapat mengimplementasikan REST.

c_maker
sumber
2
Anda mendapatkan caching karena paradigma sumber daya dan kurangnya negara, bukan karena HTTP.
dietbuddha
@dietbuddha HTTP memberi Anda implementasi secara gratis.
Jacob Raihle
17

Ini mungkin poin kecil, tetapi REST sepenuhnya didasarkan pada HTTP.

SOAP tidak memerlukan HTTP, dan Anda bebas menggunakan transportasi apa pun yang Anda suka.

Pesan SOAP dapat dialihkan secara tidak sinkron dan andal sedangkan REST adalah paradigma yang sangat sinkron.

REST tidak memberi tahu Anda apa pun tentang seperti apa data yang Anda kirim dan terima. Ada WADL, tetapi kebanyakan Anda mengandalkan dokumentasi dari API yang benar. SOAP memiliki sirkus teknologi XML untuk membuat deskripsi data lebih rentan terhadap kesalahan. WSDL, Skema ...

Pada akhirnya REST pada dasarnya memberi Anda sistem file berdasarkan HTTP. Jika sistem Anda dapat masuk ke dalam paradigma itu - maka itu mungkin merupakan pilihan yang baik.

sylvanaar
sumber
+1 untuk menyebutkan beberapa transportasi. Jika Anda benar-benar membutuhkan protokol transport-agnostik (yang misalnya mendukung operasi melalui SMTP atau sejenisnya), REST tidak aktif. Biasanya HTTP cukup baik, namun ...
sleske
6
Saya tidak melihat bagaimana REST terkait dengan HTTP? Itu detail implementasi. Sebagian besar implementasi REST menggunakan HTTP, tetapi saya tidak mengerti mengapa saya tidak bisa mengimplementasikan REST melalui protokol lain, seperti FTP.
edalorzo
REST tidak membatasi komunikasi dengan referensi
nmtoken
7

Jadi apa yang diberikan kelebihan / kompleksitas SOAP Anda, kapan Anda membutuhkannya dan kapan Anda bisa dan harus Anda lakukan tanpanya?

Perbedaan terbesar antara keduanya adalah bahwa REST seharusnya menjadi stateless, sedangkan SOAP tidak . Dalam praktiknya banyak implementasi REST yang benar-benar mengimplementasikan beberapa status dalam sesi melalui sesuatu seperti OAuth.

Perbedaan lainnya adalah REST sangat "resource" atau berorientasi kata benda . Anda berinteraksi dengan sumber daya melalui operasi CRUD. Apa pun yang tidak sesuai dengan paradigma ini menjadi rumit dan canggung.

SOAP di sisi lain hanyalah protokol RPC (panggilan prosedur jarak jauh) . Itu tidak datang dengan paradigma, itu hanya lapisan transport.

dietbuddha
sumber
1
Baik SOAP dan REST hanya sarana untuk mencapai hasil akhir. Mereka mungkin atau mungkin tidak cocok untuk tugas itu. Jadi REST juga bisa dilihat sebagai layer transport. Bahkan tampilan keadaan / kurang tidak berlaku: Anda dapat merancang kedua rasa dengan kedua - dan jenis API lainnya. Anda bahkan dapat memiliki API ganda, yang memiliki SOAP dan titik akhir REST. Dan titik akhir XML-RPC. Dan titik akhir Apache Thrift. Dan titik akhir Protokol Google Buffer. Lalu apa lagi. Pada akhirnya, semuanya hanyalah RPC.
JensG
4

REST juga menggunakan postingan. Faktanya ketika menggunakan REST, kata kerja http memberi tahu Anda operasi apa yang sedang terjadi.

REST dan SOAP hanyalah standar berbeda untuk mengirimkan data melalui internet.

Setelah menggunakan keduanya, saya biasanya akan merekomendasikan menggunakan REST daripada SOAP kecuali Anda tahu orang-orang yang akan mengkonsumsi layanan web Anda menggunakan .net dan Visual Studio. Umumnya jauh lebih mudah untuk mengkonsumsi layanan web REST kecuali dengan .net VS yang melakukan sebagian besar pekerjaan untuk Anda ketika Anda menggunakan SOAP.

Tom Squires
sumber
4
Ada dukungan SOAP yang baik di Jawa juga.
4

Satu hal yang akan saya sebutkan adalah interoperabilitas - jika Anda akan memanggil layanan Anda dari aplikasi yang ditulis dalam .NET dan server ditulis dalam Java (atau kombinasi lainnya) maka pilih REST. Saya telah melihat terlalu banyak sedikit ketidaksesuaian antara implementasi SOAP sehingga sulit untuk mempertimbangkannya lagi.

gbjbaanb
sumber
2
Setuju. SOAP adalah standar industri tetapi terlalu rumit, menghasilkan banyak implementasi yang rusak atau tidak lengkap. Selain itu, SOAP biasanya memiliki jejak kaki terbesar dalam hal kinerja dan lalu lintas dibandingkan dengan pendekatan lainnya.
JensG
1

Jika Anda hanya menginginkan panduan visual sederhana untuk membantu Anda mengukur SOAP dan REST terhadap persyaratan aplikasi Anda ...

Vijay Prasad Gupta telah menyusun bagan alur yang sederhana dan bermanfaat.

Tautan langsung ke diagram alir: https://drive.google.com/file/d/0B3zMtAq1Rf-sdVFNdThvNmZWRGc/edit

Tautan ke artikel: https://www.linkedin.com/pulse/20140818062318-7933571-soap-vs-rest-flowchart-to-determine-the-right-web-services-protocol-for-your-needs

JTech
sumber
Itu sebenarnya bagan alur yang cukup baik. Saya terkejut bahwa tidak ada satu jawaban pun di sini yang membahas kelebihan SOAP daripada REST. Namun, bagan alur itu. Saya pikir saya mungkin menyertakan diagram alur sebagai gambar di sini alih-alih menghubungkan ke itu, hanya untuk memastikan itu tetap dengan jawabannya?
jleach
-2

Sekarang tahun 2015. Saya berharap bahwa sabun telah mati sekarang, tetapi masih tetap seperti bau busuk. Untuk apa pun kecuali yang paling dasar dari aplikasi "contoh", mengintegrasikan dengan layanan SOAP penuh dengan tantangan. Ini adalah arsitektur yang kompleks, dengan banyak pilihan di berbagai tingkatan, dikombinasikan dengan keunikan dari berbagai implementasi dan ketidakcocokan yang halus (dan tidak begitu halus). Saya tidak pernah memiliki satu pun pengalaman bagus dengannya. REST, di sisi lain, sangat mudah: semua orang mengerti HTTP. Untuk sebagian besar kasus, JSON memiliki lebih banyak utilitas daripada XML InfoSet.

Untuk memberi Anda gambaran tentang kompleksitas SOAP, coba mengintegrasikan perpustakaan SOAP ke proyek Anda. Untuk Java, klien Apache Axis2 paling mendasar (menggunakan pengikatan data ADB sederhana) menarik 23 JAR baru. Dua puluh tiga! 20MB perpustakaan mengasapi. CXF serupa: 21 JAR, ketika saya terakhir menghitung.

Jika Anda benar-benar ingin, Anda dapat melakukan REST dengan perpustakaan HTTP sederhana.

Cornel Masson
sumber
1
ini berbunyi lebih seperti kata-kata kasar, lihat Bagaimana Menjawab
agas
Kamu benar. Maaf, saya dibanjiri sup SABUN pada saat itu: D
Cornel Masson
1
Kami memiliki keluhan yang sama dengan CORBA / IDL di tahun 90-an. Lalu tiba-tiba "Protokol Akses Objek Sederhana" .. itu akan menjadi sederhana! Itu akan keren! Itu akan cepat. Sepuluh tahun kemudian, itu dianggap terlalu rumit. JSON (IMAO benar-benar roda persegi untuk operasi transfer data dalam pengaturan lab siswa atau dibatasi "Saya tahu apa yang saya lakukan" situasi perbaikan cepat) dan operasi tenang. Bilas, ulangi ...
David Tonhofer
Saya takut setiap pernyataan benar tentang sabun harus dibaca sebagai kata-kata kasar. Desainnya tegas dan memberi Anda banyak opsi di mana Anda hanya ingin mengirim beberapa data. Mengenai beberapa antarmuka SOAP saya bekerja dengan, masing-masing adalah kekacauan yang sangat berlebihan (bukan kesalahan SOAP, tetapi afinitas terhadap SOAP berkorelasi dengan afinitas terhadap bloatware). Maaf sudah mengomel.
maaartinus