RESTful Services - WSDL Eşdeğeri


95

REST ve SOAP hakkında bir şeyler okudum ve REST uygulamasının neden bir SOAP protokolü kullanmaya göre daha faydalı olabileceğini anlıyorum. Ancak, REST dünyasında neden "WSDL" eşdeğeri olmadığını hala anlamıyorum. WSDL'ye "gerek olmadığını" veya bunun REST dünyasında gereksiz olacağını söyleyen gönderiler gördüm, ancak nedenini anlamıyorum. Manuel olarak kodlamak yerine programlı olarak bir tanıma bağlanmak ve proxy sınıfları oluşturmak her zaman yararlı değil mi? Felsefi bir tartışmaya girmek istemiyorum, sadece REST'te WSDL olmamasının nedenini veya neden gerekli olmadığını araştırıyorum. Teşekkürler.


4
Ben de aynı sorum var. İstemciler açısından bakıldığında, dinlendirici hizmetlerin kullanımı WSDL hizmetinden çok daha zordur.
w.donahue

4
Bana öyle geliyor ki, basit bir şeyi ifşa ediyorsanız, o zaman bir WADL veya WSDL'ye ihtiyacınız yok. Ancak SAP kadar karmaşık bir şeyi açığa çıkarıyorsanız ... İşlevselliğin bolluğunun üstesinden gelmek için bir tür yansıma ve ad alanı olmadığını anlayamıyorum.
Brain2000

HTTP SEÇENEKLERİ yöntemi, herhangi bir olası eylem için gerekli olan mevcut yöntemler ve parametreler hakkında bilgi sağlaması gerektiğinden "eşdeğer" olarak kabul edilemez mi?
Dim13i

Yanıtlar:


44

Web Uygulaması Açıklama Dili (WadL) temelde RESTful servisler için WSDL eşdeğerdir ancak böyle bir şey hiç gerekli olup olmadığı, devam eden bir tartışma olmuş.

Joe Gregorio, bu konu hakkında okunmaya değer güzel bir makale yazdı .


1
Teşekkürler Joschi. Makaleleri okudum, ancak ikincisini çok ikna edici bulmadım. En değerli bulduğu noktalar hangileri?
skaz

1
NET'in ayrıca meta verileri yayınlamak için bir yolu olduğunu belirtmekte fayda var ( msdn.microsoft.com/en-us/library/ms730243.aspx ). Bununla birlikte, büyük siteler tarafından geliştirildiğini gördüğüm çoğu REST hizmeti, başlıca programlama dilleri (Java, .NET, PHP, vb.) İçin geliştirilmiş çeşitli indirilebilir istemcileri içerir. Bence bu servis sağlayıcıya çok fazla yük bindiriyor.
dana

4
@dana: Müşteriyi de yazmanızı gerektiren bir hizmet yazmanın pek bir anlamı yok mu?
BlueChippy

19

WSDL, hizmet uç noktalarını açıklar. REST istemcileri sunucu uç noktalarına bağlanmamalıdır (yani, URL'lerde önceden haberdar olmamalıdır). REST istemcileri, istemci ve sunucu arasında aktarılan ortam türlerinde birleştirilir.

Döndürülen ortam türlerini sarmak için istemcide sınıfları otomatik olarak oluşturmak mantıklı olabilir. Ancak, hizmet etkileşimleri etrafında proxy sınıfları oluşturmaya başlar başlamaz, HTTP etkileşimlerini gizlemeye ve bir RPC modeline doğru dejenere olma riskini almaya başlarsınız.


4
Biraz daha detaylandırır mısınız? Korkarım anlamadım. Teşekkürler.
skaz

1
Proxy sınıfları, derleme zamanında makine doğrulamasına sahip olmanın bir yoludur. Bunlar olmadan, yalnızca manuel olarak yazılmış belgelere ve test tabanlı "doğrulamaya" sahip olursunuz.
Eric Grange

1
@EricGrange ... ve yine de bu yaklaşım şu ana kadar web için oldukça iyi çalıştı.
Darrel Miller

1
@DarrelMiller, "iyi çalıştı" dediğiniz şeye bağlı, bu 80'lerde herkesin kendi arasını kağıt belgelerden yazması gibi, yani işe yarıyor, ama "iyi" mi?
Eric Grange

4
@BlueChippy Ortam türü özellikleri eski moda yöntemle ele alınır. Ya belirtim için mevcut bir ayrıştırıcı bulursunuz ya da belirtimi okuyup kendiniz yazarsınız. Unutulmaması gereken önemli nokta, amacın medya türü özelliklerinin API'ler arasında yeniden kullanılabilir olmasıdır. Her API için yeni bir ayrıştırıcı yazmak, konuyu ortadan kaldırır. Doğru yapıldığında DİNLENME, istemci ve sunucunun bağımsız gelişiminin çok uzun vadeli faydaları içindir.
Darrel Miller

8

RSDL, bir hiper ortam gibi dinlenmeyi amaçlamaktadır, başka bir deyişle, WSDL veya WADL gibi bir hizmet tanımlayıcısından daha fazla bilgiye sahiptir. Örneğin, köprü metni ve köprüler gibi gezinmeyle ilgili bilgilere sahiptir.

Örneğin, mevcut bir kaynak verildiğinde, ilgili diğer kaynaklara giden bir set os bağlantılarınız var.

Ancak, bu biçimi destekleyen Dinlenme İstemcileri veya otomatik olarak oluşturma özelliğine sahip Dinlenme Sunucusu Çözümleri bulamadım.

Bunun hakkında bir sonuca varmanın uzun bir yolu olduğunu düşünüyorum. Uzun HTML hikayesine ve W3C - Tarayıcılara karşı lol bakın.

Rest like Hypermedia hakkında daha fazla ayrıntı için bakınız: http://en.wikipedia.org/wiki/HATEOAS

Not: Roy Fielding, Rest Apis'teki bu eğilimleri hipermidya yaklaşımı olmadan eleştiriyor: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Sonuç: Şimdi bir Gün, WADL, Camel CXF gibi Rest ve Integration Framework'lerin zaten WADL'yi desteklediğinden (üret ve tüket) daha yaygındır, çünkü WSDL'ye benzer, bu nedenle bu geçiş sürecinde anlaşılması en kolay olanıdır (SOAP'tan REST'e).

Sonraki bölümlere bakalım;)


8

Manuel olarak kodlamak yerine programlı olarak bir tanıma bağlanmak ve proxy sınıfları oluşturmak her zaman yararlı değil mi?

İçtenlikle katılıyorum, bu yüzden Swagger.io kullanıyorum

Swagger, RESTful API'lerinizi tasarlamanıza, oluşturmanıza, belgelendirmenize ve tüketmenize yardımcı olan büyük bir araç ekosistemiyle desteklenen güçlü bir açık kaynaklı çerçevedir.

Temelde modellerimi, uç noktalarımı vb. Tanımlamak için Swagger'ı kullanıyorum ve ardından manuel olarak kodlamak yerine proxy sınıflarını oluşturmak için swagger-codegen gibi diğer araçları kullanıyorum .

Ayrıca bkz: RAML


Swagger'ın da bunu yaptığını bilmiyordum. Bunun sadece REST API'leri için dokümantasyon / genel çerçeve olduğunu düşündü
Robert Dundon


3

WSDL, iletişim için hangi mesaj biçimleri veya ağ protokollerinin kullanıldığına bakılmaksızın uç noktaların ve bunların mesajlarının tanımlanmasına izin verecek şekilde genişletilebilir

Ancak REST, bir nesne durumunu temsil etmek için HTTP fiillerini ve URI'yi kullanarak ağ protokolünü kullanır.

WSDL'ler size bu yerde bu mesajı gönderirseniz, bu eylemi gerçekleştireceğinizi ve sonuç olarak bu biçimi geri alacağınızı söyler.

REST'te, yeni bir profil oluşturmak istersem fiili POSTbir JSON gövdesi veya profilimi URL'ye açıklayan http sunucusu değişkenleri ile kullanırdım./profile

POSTdurum kodunu 201 CREATEDve başlığı Location: *new_profile_id*(örneğin 12345) kullanarak sunucu tarafında oluşturulan bir kimlik döndürmelidir

Daha sonra , örneğin e-posta adresimi veya telefon numaramı değiştirmek gibi /profile/12345HTTP fiilini kullanma durumunu değiştirerek güncellemeler yapabilirim POST. Açıkça uzak nesnenin durumunu değiştiriyor.

GET şu anki durumunu döndürür /profile/12345

PUT genellikle istemci tarafında oluşturulan kimlik için kullanılır

DELETE, açık

HEAD, cesedi iade etmeden statüsü alır.

REST ile, iyi tasarlanmış bir API aracılığıyla kendi kendini belgelendirmeli ve dolayısıyla kullanımı daha kolay olmalıdır.

Bu, REST hakkında harika bir makale . Benim de anlamama gerçekten yardımcı oluyor.


2
WSDL ihtiyacını ortadan kaldıran tek tip arayüz kısıtlamasından çok, REST'in hiper ortam kısıtlaması olduğunu iddia ediyorum.
Darrel Miller

3
"Profili" nerede keşfedersiniz? Bir yerine düzinelerce varken nasıl yardım sağlıyorsunuz? Diğer tüm hizmetler, yoğun emek gerektiren ve hataya açık olan elle yazılmış belgelere ve elle yazılmış API'lere dayanır.
Eric Grange

1
@EricGrange ile aynı fikirdeyim - lütfen CRUD (L) işlemlerini bir yere bir yere yazmadıkça ... hangi varlıkların CRUD (L) işlemlerini gerçekleştirebileceğinizi NASIL bildiğinizi açıklar mısınız?
BlueChippy

2

WSDL 2.0 spesifikasyonu, REST web hizmetleri için de destek ekledi. Her iki dünyanın en iyisi senaryosu. Sorun şu ki, WSDL 2.0 henüz piyasadaki çoğu araç tarafından yaygın olarak desteklenmiyor. WSDL 2.0, W3C önerilir, WSDL1.1, W3C önerilmez ancak araçlar ve geliştiriciler tarafından yaygın olarak desteklenir. Referans: http://www.ibm.com/developerworks/library/ws-restwsdl/


0

Web Uygulama Açıklama Dili (WADL), RESTful web hizmetlerini tanımlamak için kullanılan bir XML sözlüğüdür.

WSDL'de olduğu gibi, genel bir istemci bir WADL dosyası yükleyebilir ve ilgili web hizmetinin tüm işlevlerine erişmek için hemen donatılabilir.

RESTful hizmetleri daha basit arabirimlere sahip olduğu için, WSDL'nin RPC tarzı SOAP hizmetleri için olduğu gibi WADL bu hizmetler için neredeyse gerekli değildir.

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.