RESTful API'mı tanımlamak için WADL kullanmalı mıyım?


27

Düzgün bir şekilde RESTful yaklaşımını kapsamlı olarak kullanan bir projeye başlamak üzereyim. Yani HATEOAS kullanıyor ve kaynakları bir müşterinin genel araştırmasına izin verecek şekilde sunuyor.

Son noktalarımın, müşteri uygulamalarının çok çeşitli dillerde otomatik olarak oluşturulmasını sağlayacak şekilde bir açıklama yapmasını sağlamak istiyorum. SOAP tabanlı web servisleri için WSDL kullanabileceğimi ve görünüşe göre REST ile kullanılan HTTP fiillerinin daha iyi tanımlanmasını sağlayan WSDL2 olduğunu biliyorum. Ancak faydası üzerinde ileri geri dönen birçok makale görüyorum.

Öyleyse, harici kod üreticilerinin web uygulamam için hızlı bir şekilde istemci oluşturmalarını sağlamak için WADL kullanmalı mıyım yoksa beklenenden daha iyi bir standart var mı?


1
Vay - 2 gün ve sadece tumbleweeds rüzgarın sessiz hışırtı ...
Gary Rowe

Kesinlikle hayır. WADL'ler muhtemelen bugüne kadar karşılaştığım en kötü API dokümanları.
TheCodingArt

Yanıtlar:


18

Benim tavsiyem rahatsız etmemek. WADL bu kadar yaygın bir şekilde kabul görmedi Bu soruyu Stack Overflow'ta görün ve burada başka bir Stack Overflow sorusunda gösterildiği gibi, tarif ettiğiniz 'uygun' REST türüne uygun olmayan bazı güçlü görüşler var .

WADL açıklamalarının oluşturulması zaman alıcıdır (ve çoğunlukla el ile yapılır) ve HATEOAS'ın önlemek için tasarlandığı bir kırılganlığı eklerler - yani bazı iyi tanımlanmış giriş noktalarına sahip olursunuz, ancak tam olarak müşterinizin ilerlediği şekilde önceden tanımlanmış değil opak bağlantılarla belirlenir 'sözleşme'.

Bu, tamamen dokümantasyondan, şema tanımından, vb. Kaçmanız gerektiği anlamına gelmez; buna rağmen, RESTifarian spektrumunun bir sonu vardır; Bunu pratikte durum olarak bulamadım. Birkaç sağlam çalışılmış örnek, bilinmeyen bir geliştirici gereksiniminin tümü olmalıdır. Ve denemek için kendi API'niz için birkaç müşteriyi devredin (JQuery'den yeterince kolay). Bu, tüketilebilir bir şey inşa edip etmediğiniz konusunda size iyi bir fikir verecektir.

Bu alandaki iyi bir bilgi kaynağı, Köprü Metni Uygulama Dili'dir . Bazılarını biraz ağır buluyorum, ancak posta listesindeki tartışmalar iyi ve güncel ve alakalı.

Umarım bu başlamanıza yardımcı olur.


2
İyi bir cevap için + 1'leyin. Bu, bu konuda yaşadığım şüpheleri teyit ediyor ve şu anki yaklaşımımı zorluyor (gerçekte ne kadar çöp olduğunu görmek için kendi API'nizi kullanın).
Gary Rowe

5

REST'in etkileşimli bir tarayıcıdan başka herhangi bir şeyden etkilendiği durumları pek iyi değil. HATEOAS iyi bir prensiptir, ancak insanlara çok güçlü bir şekilde odaklanan arayüzlere yol açar ve hizmet geliştiricisine (genellikle hizmetin çalışmasını sağlamakla meşgul olan) kullanıcı arayüzünün yüküne yol açma eğilimindedir.

WADL'nin kendisi çok iyi değil; Hizmetlerin anlamını gerçekten anlamayı başarabilmek için yeterli kılmaz. Tabii ki, bu genel olarak zor bir sorundur. WSDL, nadiren de yeterince bilgi açığa çıkarır ve bu da soruna çok daha fazla çaba harcadı (yeterli bilgi eklemek mümkün, ancak gerçekte kimse bunu yapmıyor).

Yine de, bir meslektaşımın bir servise REST arayüzü kullanan bir kütüphanede çalışarak aylarca zaman harcadığını ve WSDL'nin aynı servise [*] tarif ettiği arayüzü saniyeler içinde neredeyse aynı kaliteye ayarlanmış olduğunu söylüyor ; yolun geri kalanına gitmek, sarma dersleri yazmak içindi. Benim önsezim (sınırlı bir örneklem büyüklüğüne dayanarak) karmaşık bir servisteki tüm kırılganlıklardan kurtulamayacağınızdır, çünkü servisin semantiği kaçınılmaz bir şekilde evrimleşecek, ve REST insanlar için arayüzleri sürerken daha iyi, SOAP için daha iyi arabirim kitaplıkları (neredeyse tüm not dilleri için iyi bir WSDL / SOAP istemci aracı vardır). Her ikisini de yapma lüksüne sahip değilseniz, hangisine odaklanacağınız, en çok hangi müşteri kitlesine önem verdiğinize bağlı olmalıdır.

WADL'ye çok fazla çaba sarf etmem, ancak REST çerçeveniz sizin için üretecekse (Apache CXF bunu yapar) o zaman bunu vermemek için özel bir neden yoktur. Kodunuzu kaldırmak isteyen herkes WSDL + SOAP isteyecektir.


[*] Söz konusu hizmetin yazarı olarak, her iki arayüzün de aynı işlemleri desteklediğini söyleyebilirim - ortak bir soyut model vardı - ve her iki arayüz türü için de “doğal” bir stilde. Hizmet tarafında, bazı şeylerin REST ve diğerlerinin de SOAP ile daha kolay olduğu bir durumdu.


+1. Şirketim ve akrabaları "SOAP'a kim ihtiyaç duyar, REST'e sahibiz!" SOAP hizmetlerimizde basit REST ambalajları yaratıyoruz . Her şey basit veya açık olamaz. Bazen zor ve karmaşık. Bu yüzden, ilgilenen alanlarını tanımlayan REST arayüzlü 3. tarafları sunuyoruz. Bu, süper karmaşık ama esnek giriş ve çıkış belgeleriyle bir SOAP servisini tamamlar. Hem SOAP hem de REST bitiş noktalarının koddan üretildiği WCF "dual interface" hizmetlerini kullanıyoruz (XmlSpy ile yazılmış Xsd Şeması'ndan üretilmiştir).
RoboJ1M

2

W3C bir için resmi bir öneri yaptı DİNLENME dokümantasyon standardına dayalı WSDL 2.0 . İşte IBM makalesinden bir alıntı :

Web servisleri terimi, genellikle SOAP ve WS-Addressing ve WS-Security gibi WS * standartlarını kullanan operasyonel veya eylem tabanlı servislerle ilişkilendirilir. REST Web servisleri terimi genellikle HTTP ve XML kullanan kaynak tabanlı bir Web servisleri mimarisini ifade eder. Bu mimari Web hizmeti stillerinin her birinin kendi yeri vardır, ancak yakın zamana kadar WSDL standardı her iki stili de eşit şekilde desteklemiyordu. WSDL 1.1 HTTP bağlaması, HTTP ve XML ile iletişimi tanımlamak için yetersizdi, bu nedenle WSDL ile REST Web servislerini resmen tanımlamanın bir yolu yoktu. World Wide Web Konsorsiyumu (W3C) önerisi olarak REST Web servisleri düşünülerek tasarlanan WSDL 2.0'ın yayınlanması , artık REST Web servislerini tanımlayan bir dil olduğu anlamına geliyor.


Bu makale 2008 yılında yazılırken, WADL'nin kendisi yalnızca 2009'da sunuldu. Bu nedenle adil bir tavsiye olmaktan uzak. Şimdi 2017'deki durumun ne olduğunu merak ediyorum, W3C WSDL 2.0 tavsiyesinden 10 yıl sonra ... WSDL'nin en son sürümü bugün hala aynı. Tek bir ilerleme değil (örneğin, HTML ve HTTP ile karşılaştırıldığında). Acaba bu iyi bir şey mi?
Hendy Irawan Sepeti
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.