Saya telah membaca tentang REST dan SOAP, dan memahami mengapa menerapkan REST dapat bermanfaat dibandingkan menggunakan protokol SOAP. Namun, saya masih tidak mengerti mengapa tidak ada padanan "WSDL" di dunia REST. Saya telah melihat postingan yang mengatakan "tidak perlu" untuk WSDL atau akan menjadi mubazir Di dunia REST, tapi saya tidak mengerti mengapa. Bukankah selalu berguna untuk mengikat secara terprogram ke definisi dan membuat kelas proxy daripada membuat kode secara manual? Saya tidak bermaksud untuk terlibat dalam debat filosofis, hanya mencari alasan tidak ada WSDL di REST, atau mengapa tidak diperlukan. Terima kasih.
94
Jawaban:
The Web Application Description Language (WADL) pada dasarnya adalah setara dengan WSDL untuk layanan tenang tapi sudah ada kontroversi mengenai apakah sesuatu seperti ini diperlukan sama sekali.
Joe Gregorio telah menulis artikel bagus tentang topik itu yang patut dibaca.
sumber
WSDL menjelaskan titik akhir layanan. Klien REST tidak boleh digabungkan ke titik akhir server (yaitu, tidak boleh diketahui di URL sebelumnya). Klien REST digabungkan pada jenis media yang ditransfer antara klien dan server.
Mungkin masuk akal untuk membuat kelas secara otomatis pada klien untuk membungkus tipe media yang dikembalikan. Namun, segera setelah Anda mulai membuat kelas proxy di sekitar interaksi layanan, Anda mulai mengaburkan interaksi HTTP dan berisiko merosot kembali ke model RPC.
sumber
RSDL bertujuan untuk mengubah posisi istirahat seperti hypermedia, dengan kata lain, RSDL memiliki lebih banyak informasi daripada deskriptor layanan seperti WSDL atau WADL. Misalnya, ia memiliki informasi tentang navigasi, seperti hypertext dan hyperlink.
Misalnya, dengan sumber daya saat ini, Anda memiliki satu set os tautan ke sumber daya lain yang terkait.
Namun, saya tidak menemukan Klien Istirahat yang mendukung format ini atau Solusi Server Istirahat dengan fitur untuk menghasilkannya secara otomatis.
Saya pikir jalan panjang untuk mengambil kesimpulan tentang itu. Lihat cerita panjang HTML dan W3C vs Browser lol.
Untuk detail lebih lanjut tentang Istirahat seperti Hypermedia, lihat: http://en.wikipedia.org/wiki/HATEOAS
Catatan: Roy Fielding telah mengkritik kecenderungan ini di Rest Apis tanpa pendekatan hypermidia: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Kesimpulan Saya: Now a Days, WADL lebih umum daripada Kerangka Istirahat dan Integrasi seperti Camel CXF sudah mendukung WADL (buat dan konsumsi), karena mirip dengan WSDL, oleh karena itu paling mudah dipahami dalam proses migrasi ini (SOAP to REST).
Mari kita lihat bab selanjutnya;)
sumber
Setuju dengan sepenuh hati, inilah mengapa saya menggunakan Swagger.io
Jadi pada dasarnya saya menggunakan Swagger untuk menggambarkan model saya, titik akhir, dll, dan kemudian saya menggunakan alat lain seperti swagger-codegen untuk menghasilkan kelas proxy daripada mengkodekannya secara manual.
Lihat juga: RAML
sumber
Ada RSDL (bahasa deskripsi layanan yang tenang) yang setara dengan WSDL. URL di bawah ini menjelaskan praktiknya http://en.wikipedia.org/wiki/HATEOAS dan http://en.wikipedia.org/wiki/RSDL . Masalahnya adalah kita memiliki banyak alat untuk menghasilkan kode dari wsdl ke java, atau sebaliknya. Tetapi saya tidak menemukan alat apa pun untuk menghasilkan kode dari RSDL.
sumber
WSDL dapat diperluas untuk memungkinkan deskripsi titik akhir dan pesannya terlepas dari format pesan atau protokol jaringan apa yang digunakan untuk berkomunikasi.
Namun, REST menggunakan protokol jaringan dengan menggunakan kata kerja HTTP dan URI untuk mewakili status objek.
WSDL memberi tahu Anda di tempat ini, jika Anda mengirim pesan ini, Anda akan melakukan tindakan ini dan mendapatkan kembali format ini sebagai hasilnya.
Di REST, jika saya ingin membuat profil baru, saya akan menggunakan kata kerja
POST
dengan tubuh JSON atau variabel server http yang menjelaskan profil saya ke URL/profile
POST
harus mengembalikan ID yang dibuat sisi server, menggunakan kode status201 CREATED
dan headerLocation: *new_profile_id*
(misalnya 12345)Saya kemudian dapat melakukan pembaruan dengan mengubah status
/profile/12345
menggunakan kata kerja HTTPPOST
, misalnya untuk mengubah alamat email atau nomor telepon saya. Jelas mengubah status objek jarak jauh.GET
akan mengembalikan status saat ini dari/profile/12345
PUT
biasanya digunakan untuk ID yang dibuat sisi klienDELETE
, jelasHEAD
, mendapat status tanpa mengembalikan tubuh.Dengan REST, REST harus mendokumentasikan sendiri melalui API yang dirancang dengan baik dan dengan demikian lebih mudah digunakan.
Ini adalah artikel bagus di REST. Ini sangat membantu saya memahaminya juga.
sumber
Spesifikasi WSDL 2.0 telah menambahkan dukungan untuk layanan web REST juga. Skenario terbaik dari kedua dunia. Masalahnya adalah WSDL 2.0 belum didukung secara luas oleh sebagian besar alat di luar sana. WSDL 2.0 direkomendasikan W3C, WSDL1.1 tidak direkomendasikan W3C tetapi didukung secara luas oleh alat dan pengembang. Ref: http://www.ibm.com/developerworks/library/ws-restwsdl/
sumber
Bahasa Deskripsi Aplikasi Web (WADL) adalah kosakata XML yang digunakan untuk menggambarkan layanan web RESTful.
Seperti WSDL, klien generik dapat memuat file WADL dan segera dilengkapi untuk mengakses fungsionalitas penuh dari layanan web terkait.
Karena layanan RESTful memiliki antarmuka yang lebih sederhana, WADL hampir tidak diperlukan untuk layanan ini seperti WSDL untuk layanan SOAP gaya RPC.
sumber