SOAP vs REST (perbedaan)

1242

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:

  1. REST lebih dinamis, tidak perlu membuat dan memperbarui UDDI (Deskripsi Universal, Discovery, dan Integrasi).

  2. 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?

Abdulaziz
sumber
181
Ada analogi surat yang sangat saya sukai tentang SOAP vs REST, dengan SOAP Anda menggunakan amplop, dengan REST, ini kartu pos , jadi jelas SOAP memiliki beberapa overhead tambahan: lebih banyak bandwidth (lebih banyak kertas), kerja ekstra untuk kedua pihak ( membungkus dan membuka bungkus). Tapi itu tidak berarti REST tidak
seaman
2
spf13.com/post/soap-vs-rest
Migrate2Lazarus lihat profil saya
4
Sesuai Richardson Maturity Model yang memecah unsur-unsur utama dari pendekatan REST menjadi tiga langkah, SOAP adalah Level 0 REST.
Sampada

Jawaban:

1756

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.

Pedro Werneck
sumber
8
Tidak ada yang baik. Masalahnya adalah bagaimana pengguna mendapatkan URL, bukan bagaimana mereka menggunakannya. Mereka harus mendapatkan url pencarian dari tautan di beberapa dokumen lain, bukan dari dokumentasi. Dokumentasi dapat menjelaskan cara menggunakan sumber pencarian.
Pedro Werneck
2
@ ChristiPotlog Saya tidak pernah mengatakan SOAP tergantung pada protokol tertentu, saya hanya menekankan bagaimana REST tidak. Tautan kedua yang Anda kirim mengatakan REST membutuhkan HTTP, yang salah.
Pedro Werneck
4
Mari kita ulangi sekali lagi: HATEOAS adalah kendala jika Anda ingin memanggil API Restful Anda!
Orestis
3
@SachinKainth Ada jawaban untuk itu di sini . Anda dapat memetakan operasi CRUD ke metode HTTP, tapi itu bukan REST, karena itu bukan semantik yang dimaksudkan dari metode tersebut seperti yang didokumentasikan dalam RFC.
Pedro Werneck
3
4 baris terakhir adalah permata dan harus dipahami sepenuhnya oleh orang yang sedang dalam pengembangan. Melakukan istirahat murni membutuhkan waktu tetapi memberi hadiah dalam jangka panjang. Jadi lebih baik untuk proyek berukuran sedang atau besar. Tidak bagus untuk proyek prototyping dan kecil.
Rajan Chauhan
288

RESTvs SOAPadalah tidak pertanyaan yang tepat untuk bertanya.

REST, Tidak seperti SOAPini tidak protokol.

RESTadalah gaya arsitektur dan desain untuk arsitektur perangkat lunak berbasis jaringan.

RESTkonsep disebut sebagai sumber daya. Representasi sumber daya harus tanpa kewarganegaraan. Itu diwakili melalui beberapa jenis media. Beberapa contoh jenis media termasuk XML, JSON, dan RDF. 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 misalnya GET, PUT, POST, DELETE.

Pertanyaan @ Abdulaziz menerangi fakta itu RESTdan HTTPsering 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

cmd
sumber
7
REST tidak memiliki rangkaian operasi yang telah ditentukan sebelumnya yaitu operasi CRUD. Memetakan metode HTTP ke operasi CRUD secara membabi buta adalah salah satu kesalahpahaman paling umum di sekitar REST. Metode HTTP memiliki perilaku yang didefinisikan dengan sangat baik yang tidak ada hubungannya dengan CRUD, dan REST tidak digabungkan ke HTTP. Anda dapat memiliki REST API over ftp dengan apa pun kecuali RETR dan STOR, misalnya.
Pedro Werneck
10
Juga, apa yang Anda maksud dengan 'layanan REST idempoten'? Sejauh yang saya tahu, Anda memiliki beberapa metode HTTP yang secara default idempoten, dan jika operasi tertentu dalam layanan Anda memerlukan idempoten, Anda harus menggunakannya, tetapi tidak masuk akal untuk mengatakan bahwa layanan ini idempoten. Layanan dapat memiliki sumber daya dengan tindakan yang dapat dilakukan secara idempoten atau non-idempoten.
Pedro Werneck
2
@ cmd: tolong hapus poin keempat - "Arsitektur yang tenang dapat menggunakan HTTP atau SOAP sebagai protokol komunikasi yang mendasarinya". ini informasi yang salah yang Anda sampaikan.
Bruce_Wayne
238

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?

Ketika data dikirim melalui Internet, setiap unit yang dikirim mencakup informasi header dan data aktual yang dikirim. Header mengidentifikasi sumber dan tujuan paket, sementara data aktual disebut sebagai muatan . Secara umum, payload adalah data yang dibawa atas nama aplikasi dan data yang diterima oleh sistem tujuan.

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?

<name>Arin</name>

atau

"name": "Arin"

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.

Bakteri
sumber
15
Jawaban yang bagus tetapi ingat REST dapat menggunakan protokol transportasi apa pun. Misalnya, dapat menggunakan FTP.
Bhargav Nanekalva
11
Siapa bilang REST tidak bisa menggunakan SSL?
Osama Aftab
1
@ Osama Aftab REST mendukung SSL, tetapi SOAP mendukung SSL sama seperti REST juga mendukung WS-Security.
Bakteri
3
Untuk referensi tentang ukuran data XML, ketika kompresi diaktifkan, XML cukup kecil.
GaTechThomas
2
Poin tentang ukuran muatan harus dihapus, itu adalah perbandingan satu dimensi antara JSON dan XML dan hanya mungkin untuk mendeteksi dalam pengaturan yang dioptimalkan secara serius, yang jauh di antara keduanya.
ThomasRS
127

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?

  • Karena REST menggunakan HTTP standar, ini jauh lebih sederhana dengan cara apa pun.
  • REST lebih mudah diimplementasikan, membutuhkan lebih sedikit bandwidth dan sumber daya.
  • REST memungkinkan banyak format data yang berbeda, karena SOAP hanya mengizinkan XML.
  • REST memungkinkan dukungan yang lebih baik untuk klien browser karena dukungannya untuk JSON.
  • REST memiliki kinerja dan skalabilitas yang lebih baik. Pembacaan REST dapat di-cache, pembacaan berbasis SOAP tidak bisa di-cache.
  • Jika keamanan bukan masalah utama dan kami memiliki sumber daya yang terbatas. Atau kami ingin membuat API yang akan mudah digunakan oleh pengembang lain secara publik, maka kami harus menggunakan REST.
  • Jika kita membutuhkan operasi CRUD Stateless maka lanjutkan dengan REST.
  • REST umumnya digunakan di media sosial, obrolan web, layanan seluler, dan API Publik seperti Google Maps.
  • Layanan RESTful mengembalikan berbagai MediaTypes untuk sumber daya yang sama, tergantung pada parameter header permintaan "Terima" sebagai application/xmlatau application/jsonuntuk POST dan /user/1234.jsonatau DAPATKAN /user/1234.xmluntuk GET.
  • Layanan REST dimaksudkan untuk dipanggil oleh aplikasi sisi klien dan bukan pengguna akhir secara langsung.
  • ST in REST berasal dari S tate T ransfer. Anda mentransfer keadaan sekitar alih-alih meminta server menyimpannya, ini membuat layanan REST dapat diskalakan.

Mengapa sabun

  • SOAP tidak sangat mudah diimplementasikan dan membutuhkan lebih banyak bandwidth dan sumber daya.
  • Permintaan pesan SOAP diproses lebih lambat dibandingkan dengan REST dan tidak menggunakan mekanisme caching web.
  • WS-Security: Sementara SOAP mendukung SSL (seperti REST), SOAP juga mendukung WS-Security yang menambahkan beberapa fitur keamanan perusahaan.
  • WS-AtomicTransaction: Butuh Transaksi ACID melalui layanan, Anda akan membutuhkan SOAP.
  • WS-ReliableMessaging: Jika aplikasi Anda membutuhkan pemrosesan Asynchronous dan tingkat keandalan dan keamanan yang terjamin. Rest tidak memiliki sistem pengiriman pesan standar dan mengharapkan klien untuk menghadapi kegagalan komunikasi dengan mencoba ulang.
  • Jika keamanan menjadi perhatian utama dan sumber daya tidak terbatas maka kita harus menggunakan layanan web SOAP. Seperti jika kita membuat layanan web untuk gateway pembayaran, pekerjaan terkait keuangan dan telekomunikasi, maka kita harus menggunakan SOAP karena di sini dibutuhkan keamanan yang tinggi.

masukkan deskripsi gambar di sini

sumber1
sumber2

Premraj
sumber
Kata kerja REST / metode tidak memiliki hubungan 1 ke 1 dengan metode CRUD meskipun, pada awalnya dapat membantu memahami gaya REST.
Santiago Martí Olbrich
5
REST tidak mendukung SSL? url sumber daya seragam untuk istirahat tidak dapat dimulai dengan https: //?
Mou
51

Perbedaan antara Istirahat dan Sabun

SABUN MANDI

  1. SOAP adalah protokol.
  2. SOAP adalah singkatan dari Simple Object Access Protocol.
  3. SOAP tidak dapat menggunakan REST karena itu adalah protokol.
  4. SOAP menggunakan antarmuka layanan untuk mengekspos logika bisnis.
  5. SOAP mendefinisikan standar yang harus diikuti secara ketat.
  6. SOAP membutuhkan lebih banyak bandwidth dan sumber daya daripada REST.
  7. SOAP mendefinisikan keamanannya sendiri.
  8. SOAP hanya mengizinkan format data XML.
  9. SOAP kurang disukai daripada REST.

BERISTIRAHAT

  1. REST adalah gaya arsitektur.
  2. REST adalah singkatan dari Representational State Transfer.
  3. REST dapat menggunakan layanan web SOAP karena ini adalah konsep dan dapat menggunakan protokol apa pun seperti HTTP, SOAP.
  4. REST menggunakan URI untuk mengekspos logika bisnis.
  5. REST tidak mendefinisikan terlalu banyak standar seperti SOAP.
  6. REST membutuhkan lebih sedikit bandwidth dan sumber daya daripada SOAP.
  7. Layanan web yang tenang mewarisi langkah-langkah keamanan dari transportasi yang mendasarinya.
  8. REST memungkinkan format data yang berbeda seperti teks biasa, HTML, XML, JSON dll.
  9. REST lebih disukai daripada SABUN.

Untuk lebih jelasnya silakan lihat di sini

Rex
sumber
Apakah 3 dan 6 di bawah REST tidak bertentangan?
Drazen Bjelovuk
Kami hanya membandingkan fitur satu sama lain.
Rex
21

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.

marvelTracker
sumber
15

Pertama-tama: resmi, pertanyaan yang benar akan web services + WSDL + SOAPvs REST.

Karena, meskipun layanan web , digunakan dalam arti longgar, ketika menggunakan protokol HTTP untuk mentransfer data, bukan halaman web, secara resmi itu adalah bentuk yang sangat spesifik dari ide itu. Menurut definisi, REST bukan "layanan web".

Namun dalam praktiknya, semua orang mengabaikan itu, jadi mari kita abaikan juga

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.

  • apa format pesan yang harus Anda kirim
  • bagaimana seharusnya pesan itu dibawa-bawa

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 baru
  • myapp/delete-customer dan id di badan

Pendekatan 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).

blue_note
sumber
Apa maksud Anda RESTbukan layanan web ?? Whats JAX-RSkemudian ??
Ashish Kamble
1
@AshishKamble: Saya memberikan tautan spesifikasi layanan lainnya. Definisi resmi hanya berisi protokol WS- * (kira-kira yang kita sebut "SOAP") dan sisanya bukan bagian dari itu secara resmi
blue_note
1
@AshishKamble: Juga, perhatikan bahwa ada juga JAX-WS, yang berarti "layanan web", dibedakan dari "layanan istirahat". Bagaimanapun, perbedaan itu tidak penting untuk tujuan praktis, seperti yang saya catat.
blue_note
14

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.

masukkan deskripsi gambar di sini

Jose Manuel Gomez Alvarez
sumber
10

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.

Quan Nguyen
sumber
9

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.

Phil Sturgeon
sumber