Mengapa orang menggunakan REST alih-alih layanan berbasis SOAP? [Tutup]

153

Menghadiri demo yang menarik pada REST hari ini, bagaimanapun, saya tidak dapat memikirkan satu alasan (tidak ada satu pun yang disajikan) mengapa REST bagaimanapun juga lebih baik atau lebih sederhana untuk digunakan dan diimplementasikan daripada tumpukan Layanan berbasis SOAP.

Apa beberapa alasan Mengapa orang di "dunia nyata" menggunakan REST alih-alih Layanan berbasis SOAP?

AngryHacker
sumber
37
Dengan layanan web, apakah Anda merujuk ke layanan web gaya SOAP? Karena sejauh yang saya tahu Anda dapat memiliki layanan web yang tenang juga.
James McMahon

Jawaban:

160

Lebih sedikit overhead (tidak ada amplop SOAP untuk membungkus setiap panggilan)

Duplikasi lebih sedikit (HTTP sudah mewakili operasi seperti DELETE, PUT, GET, dll. Yang harus dinyatakan dalam amplop SOAP).

Lebih terstandarisasi - Operasi HTTP dipahami dengan baik dan beroperasi secara konsisten. Beberapa implementasi SOAP bisa menjadi rewel.

Lebih dapat dibaca dan diuji manusia (sulit untuk menguji SOAP hanya dengan browser).

Tidak perlu menggunakan XML (yah Anda juga tidak perlu menggunakan SOAP, tapi itu tidak masuk akal karena Anda sudah melakukan penguraian amplop).

Perpustakaan telah membuat SOAP (semacam) mudah. Tetapi Anda mengambil banyak redundansi di bawahnya seperti yang telah saya catat. ya dalam teori, SOAP dapat digunakan untuk transportasi lain agar tidak naik ke atas lapisan melakukan hal yang sama, tetapi pada kenyataannya hampir semua pekerjaan SOAP yang pernah Anda lakukan adalah melalui HTTP.

Kendall Helmstetter Gelner
sumber
1
Saya ingin menambahkan bahwa komunikasi SOAP antar platform dapat menjadi PITA juga (bukankah itu bagian dari tujuan SOAP?!?).
Justin Bozonier
7
Juga bekerja sangat baik dengan infrastruktur HTTP - mis. GET di-cache secara agresif bersamaan dengan penggunaan etag yang dimodifikasi terakhir
James Strachan
Bekerja sangat baik dengan browser web untuk menyediakan klien universal untuk layanan Anda juga membantu :)
James Strachan
2
Saya berpendapat bahwa SOAP terstandarisasi dengan baik. Jika Anda maksudkan bahwa implementasi belum matang maka mungkin lebih baik untuk membuatnya lebih jelas. Saya akan menghargai beberapa bukti untuk pandangan ini jika Anda menyarankan ini. Saya juga akan mempertanyakan apakah REST lebih mudah dibaca oleh manusia, ini sepenuhnya tergantung pada bagaimana Anda memilih untuk memformat konten Anda. Dan juga ingat bahwa XML dirancang agar dapat dibaca oleh manusia, meskipun sangat jelas seperti yang kita semua tahu.
Howard
6
HTTP sama standarnya dengan SOAP, dan telah ada lebih lama sehingga implementasinya benar-benar stabil secara menyeluruh dan benar-benar dapat dioperasikan. SOAP juga secara inheren akan kurang dapat dibaca bahkan diberikan konten yang identik, karena amplop konten dibungkus bahkan lebih ringkas.
Kendall Helmstetter Gelner
36

Layanan RESTful jauh lebih mudah untuk dikonsumsi daripada layanan berbasis SOAP . Alasan untuk ini adalah bahwa REST didasarkan pada permintaan HTTP normal yang memungkinkan niat untuk disimpulkan dari jenis permintaan yang dibuat (GET = retrive, POST = tulis, DELETE = hapus, dll ...) dan sepenuhnya tanpa kewarganegaraan. Di sisi lain Anda bisa berpendapat bahwa itu kurang fleksibel karena tidak jauh dengan konsep amplop pesan yang berisi konteks permintaan.

Dalam pengalaman saya, SOAP lebih disukai untuk layanan dalam perusahaan dan REST lebih disukai untuk layanan yang diekspos sebagai API publik.

Dengan alat-alat seperti WCF dalam kerangka NET. Sangat sepele untuk mengimplementasikan layanan sebagai REST atau SOAP.

Beberapa bacaan yang relevan:

Eric Schoonover
sumber
9
Pemahaman saya adalah bahwa file WSDL dapat digunakan untuk menghasilkan kelas untuk mengekspos metode layanan web. Tentunya ini membuat konsumsi layanan semudah memanggil fungsi? Bisakah Anda jelaskan pandangan Anda?
Howard
1
Howard May: Dengan asumsi Anda memanggil fungsi hanya menggunakan tipe data primitif, ini tentu benar. Tetapi dalam hal ini Anda tidak bisa benar-benar memperdebatkan SABUN lebih mudah daripada istirahat. Jika Anda memiliki tipe data yang kompleks, pemrosesan WSDL dapat bekerja dengan baik antara dua mesin dengan tumpukan WS yang sama. Tapi Anda pasti akan memiliki masalah segera setelah Anda mencampur tumpukan. Berhenti menjadi begitu mudah setelah Anda harus menggali WSDL dengan tangan untuk men-debug ketidakcocokan.
Joseph Holsten
1
Pada 2014, hampir setiap platform, bahkan yang kuno, mendukung WSDL. Kelas proxy membuat penggunaan API sangat sederhana. Kami menerapkan layanan push dan saya sedang mempertimbangkan REST, tetapi saya benar-benar kesulitan melihat manfaat apa pun.
JohnOpincar
13

Saya akan berasumsi bahwa ketika Anda mengatakan "layanan web" yang Anda maksud adalah SOAP dan standar WS- *. (Kalau tidak, saya bisa berpendapat bahwa layanan REST adalah "layanan web".)

Argumen kanonik adalah bahwa layanan REST lebih cocok dengan desain web - yaitu, desain HTTP dan infrastruktur terkait. Dengan demikian, menggunakan layanan REST akan lebih kompatibel dengan alat dan teknik web yang ada.

Tentu saja, begitu Anda menelusuri spesifik, Anda mengetahui bahwa kedua pendekatan memiliki kekuatan dalam skenario yang berbeda. Apakah itu spesifik yang Anda minati?

Bruce
sumber
10

Overhead tidak begitu penting sebagai arsitektur yang baik.

REST bukan protokol, melainkan arsitektur yang mendorong desain skalabel yang baik. Ini sering dipilih karena terlalu banyak kebebasan dalam RPC dapat dengan mudah menyebabkan desain yang buruk.

Alasan lainnya adalah biaya protokol RESTful yang dapat diprediksi melalui HTTP karena dapat meningkatkan teknologi yang ada (terutama proxy). Biaya awal RPC cukup rendah tetapi cenderung meningkat secara signifikan dengan intensifikasi beban.

Piotr Czapla
sumber
7

REST adalah implementasi-agnostik dan jauh lebih transparan, dan ini membuatnya bagus untuk API publik, terutama untuk situs web besar seperti Flickr, Amazon atau Digg yang menggunakan API mereka sebagai alat pemasaran dan benar-benar ingin orang menggunakan data mereka. Mereka tidak ingin memegang 1000 pengembang pemula yang mencoba men-debug bahasa scripting mereka dari perpustakaan SOAP buggy pilihan.

Versus SOAP dan WSDL, yang lebih baik untuk aplikasi internal, di mana Anda memiliki pustaka drop-in dan orang-orang terkenal yang tahu di kedua ujungnya. (Dan Anda mungkin tidak perlu peduli tentang hal-hal seperti load-balancing skala Internet, caching HTTP dll.) Kemudian Anda mendapatkan API yang didokumentasikan sendiri, pertahankan jenis, dll. Dengan nol kerja.

joelhardi
sumber
Jawaban yang bagus, tetapi saya tidak setuju bahwa SOAP berarti Anda tidak dapat melakukan load-balancing skala internet.
HDave
7

Harus membaca disertasi Roy Fielding yang paling bagus tentang topik ini. Dia membuat kasus yang sangat baik dan pasti JAUH dari waktunya ketika dia menulisnya (2000).

Piko
sumber
5

REST memungkinkan operasi non-mutasi Anda (yang umumnya menggunakan kata kerja GET) di- cache . Yaitu, di-cache oleh klien dan / atau di-cache oleh proxy. Ini bisa menjadi kemenangan besar!

David
sumber
8
Itu hanya 'menggunakan HTTP dengan benar,' dan bukan REST.
aehlke
0

Ini sangat sederhana dan ramping. Anda bisa melakukannya dengan browser melalui kata kerja http: GET. Saya belum menemukan browser yang dapat secara manual melakukan permintaan POST http generik dengan mudah

Ray Lu
sumber
1
Periksa Fiddler. Ini bukan browser tetapi cara yang bagus untuk membangun HTTP POST tanpa kode. fiddler2.com/fiddler2
Eric Schoonover
Saya biasanya melakukannya dengan memodifikasi permintaan yang ada dengan Charles. Saya punya Fiddler juga.
Ray Lu
0

Inilah satu titik data: Amazon menawarkan APInya dalam format REST dan SOAP dan 85% penggunaannya adalah REST.

REST lebih mudah diimplementasikan, lebih mudah dipahami dan kinerja lebih tinggi.

pbreitenbach
sumber
7
Apakah Anda memiliki referensi untuk pernyataan "kinerja tinggi" Anda?
James McMahon
3
Di mana Anda mendapatkan penggunaan 85%? Ini sangat baik untuk diketahui (jika saya bisa melihat buktinya)
schmoopy
3
Membaca spesifikasi API secara manual, mencetak halaman, dll. Lebih mudah diterapkan daripada "Klik Kanan, Tambahkan Referensi Layanan"? (VS2010)
BlueChippy
@schmoopy Dari blog Amazon: aws.typepad.com/aws/2005/09/rest_vs_soap.html
joerage