Saya telah membaca artikel tentang perbedaan antara SOAP dan REST sebagai protokol komunikasi layanan web, tetapi saya berpikir bahwa keuntungan terbesar untuk REST dibandingkan SOAP adalah:
REST lebih dinamis, tidak perlu membuat dan memperbarui UDDI (Deskripsi Universal, Discovery, dan Integrasi).
REST tidak terbatas pada format XML saja. Layanan web yang tenang dapat mengirim teks biasa / JSON / XML.
Tetapi SOAP lebih terstandarisasi (Misalnya: keamanan).
Jadi, apakah saya benar dalam poin-poin ini?
rest
web-services
http
soap
definition
Abdulaziz
sumber
sumber
Jawaban:
Sayangnya, ada banyak informasi yang salah dan kesalahpahaman di sekitar REST. Tidak hanya pertanyaan dan jawaban Anda oleh @cmd yang mencerminkan hal itu, tetapi sebagian besar pertanyaan dan jawaban yang terkait dengan subjek pada Stack Overflow.
SOAP dan REST tidak dapat dibandingkan secara langsung, karena yang pertama adalah protokol (atau setidaknya mencoba untuk menjadi) dan yang kedua adalah gaya arsitektur. Ini mungkin salah satu sumber kebingungan di sekitarnya, karena orang cenderung menyebut REST API HTTP yang bukan SOAP.
Mendorong hal-hal sedikit dan mencoba untuk membuat perbandingan, perbedaan utama antara SOAP dan REST adalah tingkat penghubung antara implementasi klien dan server. Klien SOAP bekerja seperti aplikasi desktop khusus, yang dipasangkan dengan erat ke server. Ada kontrak yang kaku antara klien dan server, dan semuanya diperkirakan akan putus jika kedua pihak mengubah sesuatu. Anda perlu pembaruan terus-menerus mengikuti perubahan apa pun, tetapi lebih mudah untuk memastikan apakah kontraknya diikuti.
Klien REST lebih mirip browser. Ini adalah klien generik yang tahu cara menggunakan protokol dan metode standar, dan aplikasi harus sesuai di dalamnya. Anda tidak melanggar standar protokol dengan membuat metode tambahan, Anda memanfaatkan metode standar dan membuat tindakan dengan mereka pada jenis media Anda. Jika dilakukan dengan benar, ada lebih sedikit kopling, dan perubahan dapat ditangani dengan lebih anggun. Klien seharusnya memasuki layanan REST dengan nol pengetahuan tentang API, kecuali untuk titik masuk dan jenis media. Dalam SOAP, klien membutuhkan pengetahuan sebelumnya tentang segala hal yang akan digunakannya, atau bahkan tidak akan memulai interaksi. Selain itu, klien REST dapat diperpanjang dengan kode sesuai permintaan yang disediakan oleh server itu sendiri,
Saya pikir ini adalah poin penting untuk memahami tentang apa REST, dan bagaimana bedanya dengan SOAP:
REST adalah protokol yang independen. Itu tidak digabungkan ke HTTP. Cukup banyak seperti Anda dapat mengikuti tautan ftp di situs web, aplikasi REST dapat menggunakan protokol apa pun yang ada skema URI standar.
REST bukan pemetaan metode CRUD ke HTTP. Baca jawaban ini untuk penjelasan terperinci tentang itu.
REST adalah standar seperti bagian yang Anda gunakan. Keamanan dan otentikasi dalam HTTP distandarisasi, jadi itulah yang Anda gunakan saat melakukan REST melalui HTTP.
REST bukan REST tanpa hypermedia dan HATEOAS . Ini berarti bahwa klien hanya mengetahui titik masuk URI dan sumber daya yang seharusnya mengembalikan tautan yang harus diikuti klien. Generator dokumentasi mewah yang memberikan pola URI untuk semua yang dapat Anda lakukan dalam REST API sepenuhnya tidak penting. Mereka tidak hanya mendokumentasikan sesuatu yang seharusnya mengikuti standar, tetapi ketika Anda melakukannya, Anda menggabungkan klien ke satu momen tertentu dalam evolusi API, dan setiap perubahan pada API harus didokumentasikan dan diterapkan, atau itu akan pecah.
REST adalah gaya arsitektur web itu sendiri. Saat Anda memasukkan Stack Overflow, Anda tahu apa itu Pengguna, Pertanyaan, dan Jawaban, Anda tahu jenis media, dan situs web memberi Anda tautan ke sana. API REST harus melakukan hal yang sama. Jika kami mendesain web dengan cara yang menurut orang dilakukan REST, alih-alih memiliki beranda dengan tautan ke Pertanyaan dan Jawaban, kami akan memiliki dokumentasi statis yang menjelaskan bahwa untuk melihat pertanyaan, Anda harus mengambil URI
stackoverflow.com/questions/<id>
, ganti id dengan Question.id dan rekatkan itu di browser Anda. Itu omong kosong, tapi itulah yang banyak orang pikirkan REST.Poin terakhir ini tidak dapat cukup ditekankan. Jika klien Anda membuat URI dari template dalam dokumentasi dan tidak mendapatkan tautan dalam representasi sumber daya, itu bukan REST. Roy Fielding, penulis REST, menjelaskan pada posting blog ini: REST APIs harus digerakkan oleh hypertext .
Dengan mengingat hal di atas, Anda akan menyadari bahwa meskipun REST mungkin tidak terbatas pada XML, untuk melakukannya dengan benar dengan format lain, Anda harus merancang dan membakukan beberapa format untuk tautan Anda. Hyperlink adalah standar dalam XML, tetapi tidak di JSON. Ada rancangan standar untuk JSON, seperti HAL .
Akhirnya, REST bukan untuk semua orang, dan bukti dari itu adalah bagaimana kebanyakan orang memecahkan masalah mereka dengan sangat baik dengan API HTTP yang mereka keliru disebut REST dan tidak pernah berani lebih dari itu. REST kadang-kadang sulit dilakukan, terutama di awal, tetapi membayar seiring waktu dengan evolusi yang lebih mudah di sisi server, dan ketahanan klien terhadap perubahan. Jika Anda perlu sesuatu dilakukan dengan cepat dan mudah, jangan repot-repot tentang mendapatkan REST dengan benar. Mungkin bukan itu yang Anda cari. Jika Anda memerlukan sesuatu yang harus tetap online selama bertahun-tahun atau bahkan puluhan tahun, maka REST adalah untuk Anda.
sumber
REST
vsSOAP
adalah tidak pertanyaan yang tepat untuk bertanya.REST
, Tidak sepertiSOAP
ini tidak protokol.REST
adalah gaya arsitektur dan desain untuk arsitektur perangkat lunak berbasis jaringan.REST
konsep disebut sebagai sumber daya. Representasi sumber daya harus tanpa kewarganegaraan. Itu diwakili melalui beberapa jenis media. Beberapa contoh jenis media termasukXML
,JSON
, danRDF
. Sumber daya dimanipulasi oleh komponen. Komponen meminta dan memanipulasi sumber daya melalui antarmuka seragam standar. Dalam kasus HTTP, interface ini terdiri dari HTTP ops standar misalnyaGET
,PUT
,POST
,DELETE
.Pertanyaan @ Abdulaziz menerangi fakta itu
REST
danHTTP
sering digunakan bersama-sama. Hal ini terutama disebabkan oleh kesederhanaan HTTP dan pemetaannya yang sangat alami untuk prinsip RESTful.Prinsip REST Fundamental
Komunikasi Client-Server
Arsitektur client-server memiliki pemisahan keprihatinan yang sangat berbeda. Semua aplikasi yang dibangun dengan gaya RESTful juga harus pada prinsipnya client-server.
Tanpa kewarganegaraan
Setiap permintaan klien ke server mensyaratkan bahwa negaranya sepenuhnya diwakili. Server harus dapat sepenuhnya memahami permintaan klien tanpa menggunakan konteks server atau status sesi server apa pun. Oleh karena itu, semua status harus disimpan pada klien.
Cacheable
Batasan cache dapat digunakan, sehingga memungkinkan data respons ditandai sebagai dapat disimpan atau tidak. Setiap data yang ditandai sebagai dapat disimpan kembali dapat digunakan kembali sebagai respons terhadap permintaan berikutnya yang sama.
Antarmuka Seragam
Semua komponen harus berinteraksi melalui antarmuka seragam tunggal. Karena semua interaksi komponen terjadi melalui antarmuka ini, interaksi dengan berbagai layanan sangat sederhana. Antarmukanya sama! Ini juga berarti bahwa perubahan implementasi dapat dilakukan secara terpisah. Perubahan seperti itu, tidak akan mempengaruhi interaksi komponen mendasar karena antarmuka yang seragam selalu tidak berubah. Salah satu kelemahannya adalah Anda terjebak dengan antarmuka. Jika pengoptimalan dapat diberikan ke layanan tertentu dengan mengubah antarmuka, Anda kurang beruntung karena REST melarang ini. Namun, sisi baiknya, REST dioptimalkan untuk web, karenanya popularitas REST yang luar biasa atas HTTP!
Konsep di atas menggambarkan karakteristik REST dan membedakan arsitektur REST dari arsitektur lain seperti layanan web. Penting untuk dicatat bahwa layanan REST adalah layanan web, tetapi layanan web belum tentu merupakan layanan REST.
Lihat posting blog ini pada Prinsip Desain REST untuk detail lebih lanjut tentang REST dan butir-butir di atas.
EDIT: perbarui konten berdasarkan komentar
sumber
SOAP ( Simple Object Access Protocol ) dan REST ( Representation State Transfer ) keduanya indah di jalan mereka. Jadi saya tidak membandingkannya. Sebagai gantinya, saya mencoba untuk menggambarkan gambar, ketika saya lebih suka menggunakan REST dan ketika SOAP.
Apa itu payload?
Sekarang, misalnya, saya harus mengirim Telegram dan kita semua tahu bahwa biaya telegram akan tergantung pada beberapa kata.
Jadi, katakan di antara saya di bawah ini disebutkan dua pesan ini, mana yang lebih murah untuk dikirim?
atau
Saya tahu jawaban Anda akan menjadi yang kedua meskipun keduanya mewakili pesan yang sama, yang kedua lebih murah mengenai biaya.
Jadi saya mencoba mengatakan bahwa, mengirim data melalui jaringan dalam format JSON lebih murah daripada mengirimkannya dalam format XML mengenai payload .
Inilah manfaat atau kelebihan REST pertama dari SOAP . SOAP hanya mendukung XML, tetapi REST mendukung format yang berbeda seperti teks, JSON, XML, dll. Dan kita sudah tahu, jika kita menggunakan Json maka pasti kita akan berada di tempat yang lebih baik mengenai muatan.
Sekarang, SOAP mendukung hanya XML, tetapi juga memiliki kelebihannya.
Betulkah! Bagaimana?
SOAP bergantung pada XML dalam tiga cara Amplop - yang mendefinisikan apa yang ada dalam pesan dan bagaimana memprosesnya.
Seperangkat aturan penyandian untuk tipe data, dan akhirnya tata letak panggilan prosedur dan tanggapan berkumpul.
Amplop ini dikirim melalui transportasi (HTTP / HTTPS), dan RPC (Remote Procedure Call) dijalankan, dan amplop dikembalikan dengan informasi dalam dokumen berformat XML.
Poin penting adalah bahwa salah satu keunggulan SOAP adalah penggunaan transportasi "generik" tetapi REST menggunakan HTTP / HTTPS . SOAP dapat menggunakan hampir semua transportasi untuk mengirim permintaan tetapi REST tidak bisa. Jadi di sini kita mendapat keuntungan menggunakan SABUN.
Seperti yang telah saya sebutkan di paragraf di atas "REST using HTTP / HTTPS" , jadi masuklah sedikit lebih dalam pada kata-kata ini.
Ketika kita berbicara tentang REST melalui HTTP, semua langkah-langkah keamanan yang diterapkan HTTP diwarisi, dan ini dikenal sebagai keamanan tingkat transportasi dan mengamankan pesan hanya saat berada di dalam kabel tetapi setelah Anda mengirimnya di sisi lain Anda tidak tahu berapa banyak tahapan yang harus dilalui sebelum mencapai titik sebenarnya di mana data akan diproses. Dan tentu saja, semua tahapan itu bisa menggunakan sesuatu yang berbeda dari HTTP. Jadi Istirahat tidak sepenuhnya aman, kan?
Tetapi SOAP mendukung SSL seperti REST dan juga mendukung WS-Security yang menambahkan beberapa fitur keamanan perusahaan. WS-Security menawarkan perlindungan dari penciptaan pesan untuk konsumsi itu . Jadi untuk keamanan tingkat transportasi, celah apa pun yang kami temukan dapat dicegah menggunakan WS-Security.
Selain itu, karena REST dibatasi oleh protokol HTTP- nya, maka dukungan transaksinya tidak sesuai dengan ACID dan tidak dapat memberikan komitmen dua fase di seluruh sumber daya transnasional yang didistribusikan.
Tetapi SOAP memiliki dukungan komprehensif untuk manajemen transaksi berbasis ACID untuk transaksi jangka pendek dan manajemen transaksi berbasis kompensasi untuk transaksi jangka panjang. Ini juga mendukung komitmen dua fase di seluruh sumber daya yang didistribusikan .
Saya tidak menarik kesimpulan apa pun, tetapi saya akan lebih memilih layanan web berbasis SOAP sementara keamanan, transaksi, dll. Adalah masalah utama.
Berikut adalah "Tutorial Java EE 6" di mana mereka mengatakan bahwa desain RESTful mungkin sesuai ketika kondisi berikut dipenuhi . Silahkan lihat.
Semoga Anda menikmati membaca jawaban saya.
sumber
REST ( RE presentasional S tate T ransfer)
RE s presentational S tate Object adalah T ransferred adalah REST yaitu kita tidak mengirim Object, kami mengirim state of Object. REST adalah gaya arsitektur. Itu tidak mendefinisikan begitu banyak standar seperti SOAP. REST adalah untuk mengekspos API Publik (yaitu API Facebook, Google Maps API) melalui internet untuk menangani operasi CRUD pada data. REST berfokus pada mengakses sumber daya yang disebutkan melalui antarmuka tunggal yang konsisten.
SOAP ( S imple O bject A ccess P rotocol)
SOAP membawa protokolnya sendiri dan berfokus pada mengekspos potongan-potongan logika aplikasi (bukan data) sebagai layanan. SOAP memperlihatkan operasi. SOAP berfokus pada mengakses operasi bernama, setiap operasi menerapkan beberapa logika bisnis. Meskipun SOAP sering disebut sebagai layanan web, ini keliru. SOAP memiliki sedikit jika ada hubungannya dengan Web. REST menyediakan layanan Web sejati berdasarkan URI dan HTTP.
Mengapa REST?
application/xml
atauapplication/json
untuk POST dan/user/1234.json
atau DAPATKAN/user/1234.xml
untuk GET.Mengapa sabun
sumber1
sumber2
sumber
Perbedaan antara Istirahat dan Sabun
SABUN MANDI
BERISTIRAHAT
Untuk lebih jelasnya silakan lihat di sini
sumber
IMHO Anda tidak dapat membandingkan SOAP dan REST di mana itu adalah dua hal yang berbeda.
SOAP adalah protokol dan REST adalah pola arsitektur perangkat lunak. Ada banyak kesalahpahaman di internet untuk SOAP vs REST .
SOAP mendefinisikan format pesan berbasis XML yang digunakan aplikasi layanan web untuk berkomunikasi satu sama lain melalui internet. Untuk melakukan itu aplikasi perlu pengetahuan sebelumnya tentang kontrak pesan, tipe data, dll.
REST mewakili keadaan (sebagai sumber daya) server dari URL. Ini adalah stateless dan klien tidak boleh memiliki pengetahuan sebelumnya untuk berinteraksi dengan server di luar pemahaman hypermedia.
sumber
Sudah ada jawaban teknis, jadi saya akan mencoba memberikan beberapa intuisi.
Katakanlah Anda ingin memanggil fungsi di komputer jauh, diimplementasikan dalam beberapa bahasa pemrograman lain (ini sering disebut panggilan prosedur jarak jauh / RPC ). Asumsikan fungsi tersebut dapat ditemukan di URL tertentu, disediakan oleh orang yang menulisnya. Anda harus (entah bagaimana) mengirimnya pesan, dan mendapatkan respons. Jadi, ada dua pertanyaan utama untuk dipertimbangkan.
Untuk pertanyaan pertama, definisi resmi adalah WSDL . Ini adalah file XML yang menjelaskan, dalam format terperinci dan ketat, apa saja parameternya, apa jenisnya, nama, nilai default, nama fungsi yang akan dipanggil, dll . Contoh WSDL di sini menunjukkan bahwa file tersebut adalah manusia -baca (tetapi tidak mudah).
Untuk pertanyaan kedua, ada berbagai jawaban. Namun, satu-satunya yang digunakan dalam praktik adalah SOAP . Gagasan utamanya adalah: bungkus XML sebelumnya (pesan aktual) ke dalam XML lain (berisi info penyandian dan hal-hal bermanfaat lainnya), dan kirimkan melalui HTTP. Metode POST dari HTTP digunakan untuk mengirim pesan, karena selalu ada isi .
Gagasan utama dari seluruh pendekatan ini adalah Anda memetakan URL ke suatu fungsi , yaitu untuk suatu tindakan . Jadi, jika Anda memiliki daftar pelanggan di beberapa server, dan Anda ingin melihat / memperbarui / menghapus satu, Anda harus memiliki 3 URL:
myapp/read-customer
dan di isi pesan, sampaikan id pelanggan untuk dibaca.myapp/update-customer
dan di dalam tubuh, berikan id pelanggan, serta data barumyapp/delete-customer
dan id di badanPendekatan REST melihat berbagai hal secara berbeda. URL tidak boleh mewakili suatu tindakan, tetapi suatu hal (disebut sumber daya dalam istilah REST). Karena protokol HTTP (yang sudah kita gunakan) mendukung kata kerja, gunakan kata kerja itu untuk menentukan tindakan apa yang harus dilakukan pada benda itu.
Jadi, dengan pendekatan REST, pelanggan nomor 12 akan ditemukan di URL
myapp/customers/12
. Untuk melihat data pelanggan, Anda menekan URL dengan permintaan GET. Untuk menghapusnya, URL yang sama , dengan kata kerja DELETE. Untuk memperbaruinya, sekali lagi, URL yang sama dengan kata kerja POST, dan konten baru di badan permintaan.Untuk detail lebih lanjut tentang persyaratan yang harus dipenuhi oleh suatu layanan untuk dianggap benar-benar TENANG, lihat model kematangan Richardson . Artikel ini memberikan contoh, dan, yang lebih penting, menjelaskan mengapa layanan SOAP (disebut), adalah layanan REST level-0 (meskipun, level-0 berarti kepatuhan rendah terhadap model ini, itu tidak ofensif, dan masih berguna dalam banyak kasus).
sumber
REST
bukan layanan web ?? WhatsJAX-RS
kemudian ??Di antara banyak lainnya yang sudah dibahas dalam banyak jawaban, saya akan menyoroti bahwa SOAP memungkinkan untuk mendefinisikan kontrak, WSDL, yang mendefinisikan operasi yang didukung, tipe kompleks, dll. SOAP berorientasi pada operasi, tetapi REST berorientasi pada sumber daya. Secara pribadi saya akan memilih SOAP untuk antarmuka yang kompleks antara aplikasi internal perusahaan, dan REST untuk antarmuka publik, sederhana, stateless dengan dunia luar.
sumber
Penambahan untuk:
++ Kesalahan yang sering dilakukan ketika mendekati REST adalah menganggapnya sebagai "layanan web dengan URL" —menganggap REST sebagai mekanisme panggilan prosedur jarak jauh (RPC) lain, seperti SOAP, tetapi dipanggil melalui URL HTTP biasa dan tanpa kekar SOAP Ruang nama XML.
++ Sebaliknya, REST tidak ada hubungannya dengan RPC. Sedangkan RPC berorientasi pada layanan dan fokus pada tindakan dan kata kerja, REST berorientasi pada sumber daya, menekankan hal-hal dan kata benda yang menyusun aplikasi.
sumber
Banyak jawaban ini sepenuhnya lupa menyebutkan kontrol hypermedia (HATEOAS) yang sepenuhnya mendasar bagi REST. Beberapa orang menyentuhnya, tetapi tidak benar-benar menjelaskannya dengan baik.
Artikel ini harus menjelaskan perbedaan antara konsep, tanpa masuk ke gulma pada fitur SOAP tertentu.
sumber