Mengapa tidak ada dukungan tipe WSDL untuk Web Api?

33

Jadi saya baru memulai dengan Net WebApi dan satu hal yang saya perhatikan langsung adalah bahwa tidak ada Kontrak yang mendefinisikan bagaimana API terlihat dan harus dikonsumsi (Permintaan / Tanggapan dari setiap Tindakan), ini biasanya dalam bentuk WSDL untuk WCF / Sabun.

Sepertinya saya seperti ini adalah sesuatu yang akan sangat berharga dan membuat hidup jauh lebih mudah bagi konsumen API Anda.

Apakah ada alasan tidak ada? Apakah ada paradigma atau prinsip pemrograman yang tidak saya sadari? Apakah ada cara saya bisa membuatnya?

shenku
sumber
3
Terkait: Mengapa orang berpikir SOAP sudah usang? . tl; dr: Soap dan WSDL sangat 2007, dan REST saat ini adalah bom.
Robert Harvey
Banyak tempat yang menyediakan beberapa API yang banyak digunakan biasanya memiliki perpustakaan untuk berbagai bahasa yang dapat Anda gunakan untuk mengkonsumsi API mereka. Untuk tempat-tempat yang tidak menyediakannya, biasanya ada proyek sumber terbuka untuk itu. Misalnya, twilio untuk C # di sini, github.com/twilio/twilio-csharp .
Pete
1
@RobertHarvey: SABUN tidak terlalu usang seperti didiskreditkan : tidak perlu secara resmi Tidak Direkomendasikan oleh siapa pun yang membuatnya untuk mereka yang tahu untuk merekomendasikan untuk merekomendasikannya.
Mason Wheeler

Jawaban:

23

SABUN, SISA DAN KREATIVITAS ORANG

SOAP memerlukan dokumen deskripsi seperti WSDL karena setiap sumber daya dapat dikonsumsi dengan pesan yang berbeda, tidak ada definisi pada protokol tentang batasan untuk kemungkinan nama / pesan yang dapat Anda manipulasi sumber daya.

Misalnya, dalam SOAP layanan web Anda yang memungkinkan klien memanipulasi pengguna dapat mengekspos operasi yang membuat pengguna dalam banyak pesan berbeda, seperti:

addUser
createUser
insertUser

Tentu saja, ini hanya beberapa contoh pesan, karena saya telah melihat banyak nama metode layanan web yang lucu. Ada orang yang sangat kreatif di luar sana.

Di sisi lain, jika Anda mengekspos sistem mendasar Anda menggunakan api web yang benar-benar menghormati prinsip-prinsip REST, klien hanya perlu tahu bahwa Anda memiliki sumber daya bernama Pengguna, karena ada 99% kemungkinan Anda dapat membuat pengguna di ini cara

POST /Users

Dan ini terjadi untuk setiap operasi yang ingin Anda paparkan menggunakan SOAP atau web api REST.

Meskipun menjadi SOAP protokol, yang membatasi apa yang Anda bisa atau tidak bisa lakukan, dan menjadi REST arsitektur gaya, yang menyisakan banyak titik terbuka tentang bagaimana melakukan sesuatu. Ada upaya untuk mendefinisikan konvensi tentang cara mengekspos dan mengonsumsi apis web REST.


MENJELASKAN SISA API WEB

Di bidang cara mendeskripsikan REST api web, saya dapat mengutip Swagger . Ini bukan upaya untuk membuat WSDL seperti ke web api REST, tetapi ini merupakan upaya yang baik untuk membuat standar terbuka untuk menggambarkan web apis REST.

Swagger adalah spesifikasi dan implementasi kerangka kerja lengkap untuk menggambarkan, memproduksi, mengonsumsi, dan memvisualisasikan layanan web RESTful.

Saya menggunakan Swagger banyak dan sangat menyukainya, terutama karena Swagger UI yang memungkinkan Anda menghasilkan konsol dan dokumentasi live yang bagus untuk api web Anda.

Ada banyak implementasi Swagger untuk sebagian besar bahasa: C #, Java, Python, Ruby, dll.

Jika Anda menggunakan ASP .NET Web API, ada beberapa proyek untuk secara otomatis menghasilkan spesifikasi Swagger, seperti Swagger.NET


MENGHASILKAN KLIEN UNTUK SISA API WEB

Karena kendala REST, seperti kumpulan kata kerja terbatas (GET, POST, PUT, DELETE, dll) tidak begitu sulit untuk menghasilkan pustaka klien ke REST api web.

Proyek-proyek seperti WebApiProxy dapat dengan mudah menghasilkan klien melakukan C # dan Javascript.


KONVENSI UNTUK SISA API WEB

Untuk menjaga kehidupan kita sebagai pengembang lebih mudah adalah baik mendefinisikan beberapa konvensi tentang bagaimana api web REST kami akan berperilaku, upaya terbaik yang saya tahu di bidang ini adalah ebook Apigee - Web Api Design yang sangat bagus . E-book ini bukan upaya untuk membuat Alkitab atau mantra tentang cara mendesain api Anda, melainkan kumpulan konvensi yang diamati di web REST apis besar, seperti Twitter, Facebook, Linkedin, Google, dll.

giacomelli
sumber
Harap sertakan WADL, saya percaya persis apa yang kita butuhkan untuk membuat perusahaan RESTfull / JSON api .... sementara masih jauh lebih masuk akal daripada WSDL. Kesombongan bagus untuk dikonsumsi, untuk menghasilkan kerangka, tetapi ia berada pada tingkat yang lebih rendah dalam pikiran saya. WADL -> Swagger -> Code Skeleton. WADL juga cocok dengan ekosistem yang ada, dan itu adalah keharusan bagi pengembang perusahaan.
JM Becker
3
Aku ... sedikit tercengang, sebenarnya. REST GETlebih mudah, ya. Tetapi, mengetahui kata kerja apa yang mungkin didukung bukan berarti Anda dapat berinteraksi dengan API sama sekali . Kami masih belum memiliki pengetahuan tentang skema atau domain. The nyata jawaban, jika kita jujur, adalah bahwa perubahan layanan kami tidak secara eksplisit melanggar kontrak dengan integrasi ketika tidak ada kontrak (WSDL) untuk istirahat. Dan, di web, kami ingin kebebasan untuk mengubah hal-hal yang mau tak mau, bebas dari rasa bersalah dan yang lainnya. Tapi, kita perlu membaca dokumen API dan bereksperimen * Jadi ... Jadi, kita sebagian besar tidak masalah dengan itu ...
svidgen
5

Singkatnya, karena SOAP dirancang untuk bersifat deskriptif sendiri: Titik akhir SOAP biasanya mencakup wsdl yang menjelaskan operasi apa yang disediakannya, dan bagaimana data terlihat (dengan menggunakan XSD tertanam) yang diambil dan / atau dikembalikan oleh setiap operasi.
Karena deskripsi diri ini, dimungkinkan untuk aplikasi seperti Visual Studio untuk menghasilkan proxy layanan web untuk itu.

Selain itu, ada beberapa ekstensi untuk SOAP (spesifikasi WS- *) yang memungkinkan enkripsi atau perilaku transaksional untuk digunakan dengan SOAP. Idenya adalah bahwa Anda dapat menggunakan SOAP sebagai toko serba ada untuk membuat layanan web kelas perusahaan.

Di samping itu...

WebAPI dirancang untuk menyediakan layanan REST. Format komunikasi untuk REST biasanya JSON atau xml biasa - meskipun sebenarnya tidak masalah, bahkan bisa berupa teks biasa. Layanan REST mengikuti filosofi yang sama sekali berbeda: mereka dimaksudkan untuk menjadi ringan sehingga mereka dapat dengan mudah dikonsumsi oleh skrip sisi klien sebagai bagian dari solusi AJAX, atau oleh perangkat seluler.
Dengan demikian, ada kebutuhan untuk menjaga tingkat upacara seminimal mungkin, termasuk deskripsi diri. Juga, bahkan jika Anda menginginkannya, sebagian besar format komunikasi yang digunakan dalam layanan REST (seperti JSON) tidak memiliki cara formal untuk menggambarkan kontennya.

Meringkas, Anda bisa mengatakan bahwa layanan web SOAP biasanya digunakan untuk mengintegrasikan (mungkin berbeda) solusi, sedangkan layanan REST lebih cocok untuk menyediakan komunikasi antara bagian-bagian dari solusi yang sama.

Astrotrain
sumber
1

API SOAP / WS- * dan RESTful tidak sama. Jika Anda ingin membangun API pendukung SOAP / WS- * WSDL alat pilihan dalam tumpukan Microsoft adalah WCF, dipasang dengan opsi pengikat HTTP (ada opsi pengikatan XML dan JSON, XML menjadi opsi pendukung WSDL).

Dalam praktiknya, mengonsumsi WSDL dari bahasa atau platform implementasi yang berbeda telah menjadi masalah. WS- * lapisan keamanan di atas lebih dari itu.

Pengalaman saya sendiri sebagian besar tentang .Net, Node, Java dan PHP dalam hal ini, dan saya dapat mengatakan bahwa ketika Anda memiliki platform yang tidak harus mendefinisikan detail tipe anak, atau akan menggunakan "Objek" sebagai definisi, itu bermasalah untuk sedikitnya. Di luar ini, sebagian besar tidak ada yang benar-benar memahami semua SOAP / WS- * sangat bergantung pada tooling untuk membuatnya bekerja. Perkakas ini memiliki banyak overhead, dan sistem yang berbeda beroperasi secara berbeda.

Ini adalah beberapa alasan orang tampak mencoba implementasi yang lebih sederhana. Layanan REST (ala Web API) menawarkan titik akhir di sekitar objek / negara. Gagasannya adalah lebih mudah untuk mendefinisikan satu set struktur objek yang lebih sederhana yang diwakili dalam format JSON, dan titik akhir yang digunakan untuk melawan struktur ini daripada mencoba menggunakan WSDL dari lingkungan asing yang tidak berfungsi, kemudian cobalah untuk menggali dan Atasi masalahnya.

Ironisnya, ini adalah salah satu daerah yang saya gunakan Node dalam banyak sebagai layanan terjemahan, hanya karena itu cukup fleksibel untuk menerima implementasi kotor sebagai klien, dan saya bisa menulis klien sederhana terhadap payload saya diadaptasi yang bekerja lebih baik. EX: C # mendapat teks JSON, yang saya gunakan JSON.Net untuk mengkonversi ke representasi objek yang saya definisikan benar-benar berfungsi ketika saya tidak bisa menggunakan impor WSDL.

Dalam praktiknya ini sering terjadi.

Pelacak1
sumber
-3

Meskipun banyak jawaban di sini bagus, saya pikir jawabannya JAUH lebih sederhana: Anda melihat teknologi yang salah untuk pekerjaan itu.

Jika Anda ingin membangun layanan SOAP, Anda harus tetap menggunakan WCF. Ini masih merupakan kerangka kerja yang sangat kuat, Microsoft masih aktif mengembangkannya, tidak ada pengumuman yang dibuat bagi kami untuk berpikir itu akan terjadi di mana saja di masa depan, dan itu dibuat dengan pemikiran ini. Web API sama sekali tidak menggantikan WCF (meskipun mungkin lebih trendi daripada WCF).

Web API dulunya merupakan bagian dari WCF, tetapi dipindahkan ke keluarga ASP.NET persis karena itu tidak benar-benar cocok bersama teknologi WCF lainnya. API Web jauh lebih mementingkan penggunaan HTTP sebagai protokol aplikasi daripada protokol transfer. Di Web API, kata kerja HTTP adalah raja, di WCF HTTP hanya berfungsi untuk mengaktifkan protokol SOAP.

Jangan salahkan Web API karena tidak memberikan kemampuan untuk melakukan hal-hal tertentu yang tidak dibuat untuknya.

Romatthe
sumber
3
Ini tidak menjawab pertanyaan.
Andy