Layanan RESTful - Setara WSDL

94

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.

skaz
sumber
4
Saya memiliki pertanyaan yang sama. Tampaknya dari perspektif klien, layanan yang tenang jauh lebih sulit untuk digunakan daripada layanan WSDL.
w. Donahue
4
Tampak bagi saya bahwa jika Anda mengekspos sesuatu yang sederhana, maka Anda tidak memerlukan WADL atau WSDL. Tetapi jika Anda mengekspos sesuatu yang serumit SAP ... Saya tidak dapat membayangkan tidak memiliki semacam refleksi dan namespace untuk menangani sejumlah besar fungsi.
Brain2000
Tidak dapatkah metode OPSI HTTP dianggap sebagai "setara" karena harus memberikan informasi tentang metode dan parameter yang tersedia yang diperlukan untuk tindakan yang mungkin dilakukan?
Dim13i

Jawaban:

44

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.

joschi
sumber
1
Terima kasih Joschi. Saya membaca artikelnya, tetapi tidak menemukan yang kedua terlalu meyakinkan. Poin mana yang dia sampaikan menurut Anda paling berharga?
skaz
1
Perlu diperhatikan bahwa .NET juga memiliki cara untuk mempublikasikan metadata ( msdn.microsoft.com/en-us/library/ms730243.aspx ). Dengan demikian, sebagian besar layanan REST yang saya lihat dikembangkan oleh situs-situs besar menyertakan berbagai klien yang dapat diunduh yang dikembangkan untuk bahasa pemrograman utama (Java, .NET, PHP, dll). Menurut saya, hal ini sangat membebani penyedia layanan.
dana
4
@dana: Sepertinya tidak banyak gunanya menulis layanan yang kemudian mengharuskan Anda juga menulis klien?
BlueChippy
19

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.

Darrel Miller
sumber
4
Bisakah Anda menjelaskan lebih lanjut? Saya khawatir saya tidak mengerti. Terima kasih.
skaz
1
Kelas proxy adalah cara untuk mendapatkan validasi mesin pada waktu kompilasi. Tanpa mereka, Anda hanya memiliki dokumen yang ditulis secara manual dan "validasi" berbasis pengujian.
Eric Grange
1
@EricGrange ... namun pendekatan ini telah bekerja dengan cukup baik untuk web sejauh ini.
Darrel Miller
1
@DarrelMiller bergantung pada apa yang Anda sebut "bekerja dengan baik", ini seperti di tahun 80-an ketika semua orang akan menulis selingannya dari dokumen kertas, sehingga berhasil, tetapi "baik"?
Eric Grange
4
@BlueChippy Spesifikasi jenis media ditangani dengan cara lama. Anda bisa menemukan parser yang ada untuk spesifikasi tersebut, atau Anda membaca spesifikasi dan menuliskannya sendiri. Hal penting yang perlu diperhatikan adalah tujuannya adalah agar spesifikasi jenis media dapat digunakan kembali di seluruh API. Menulis parser baru untuk setiap API mengalahkan intinya. REST bila dilakukan dengan benar adalah untuk keuntungan jangka panjang dari evolusi independen klien dan server.
Darrel Miller
8

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;)

Eduardo Fabricio
sumber
8

Bukankah selalu berguna untuk mengikat secara terprogram ke definisi dan membuat kelas proxy daripada membuat kode secara manual?

Setuju dengan sepenuh hati, inilah mengapa saya menggunakan Swagger.io

Swagger adalah kerangka kerja sumber terbuka yang kuat yang didukung oleh ekosistem alat yang besar yang membantu Anda merancang, membangun, mendokumentasikan, dan menggunakan RESTful API Anda.

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

Alex Nolasco
sumber
Tidak tahu Swagger juga melakukan itu. Pikir itu hanya dokumentasi / kerangka umum untuk REST API
Robert Dundon
6

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.

richard
sumber
3

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 POSTdengan tubuh JSON atau variabel server http yang menjelaskan profil saya ke URL/profile

POSTharus mengembalikan ID yang dibuat sisi server, menggunakan kode status 201 CREATEDdan header Location: *new_profile_id*(misalnya 12345)

Saya kemudian dapat melakukan pembaruan dengan mengubah status /profile/12345menggunakan kata kerja HTTP POST, 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 klien

DELETE, jelas

HEAD, 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.

hewan pengerat
sumber
2
Saya berpendapat bahwa itu adalah kendala hypermedia dari REST, lebih dari kendala antarmuka seragam yang menghilangkan kebutuhan untuk WSDL.
Darrel Miller
3
Di mana Anda menemukan "profil"? Bagaimana Anda memberikan bantuan padahal alih-alih satu, Anda memiliki lusinan? Semua layanan lainnya di luar sana mengandalkan dokumen yang ditulis tangan dan API yang ditulis secara manual, yang padat karya dan rawan kesalahan.
Eric Grange
1
Saya setuju dengan @EricGrange - bisakah Anda menjelaskan BAGAIMANA Anda tahu entitas apa yang dapat Anda lakukan operasi CRUD (L) ON ... kecuali seseorang menuliskannya di suatu tempat?
BlueChippy
2

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/

supernova
sumber
0

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.

JSS
sumber