Aslında konu baÅŸlığı çok iddalı dursa da, bu yazımda WSDL’e dair çok ayrıntıya girmeyeceÄŸim. Bloguma yazı yazarken, hoÅŸgeldin mesajında belirttiÄŸim gibi, iÅŸime yarayan veya çok yaramış, paylaÅŸtığım zaman yararlı olacağını düşündüğüm konular üzerine yazmaya çalışıyorum. BirÅŸeyleri sıfırdan öğretmek gibi bir misyonum olmadı hiç, çoÄŸunlukla tamamlayıcı bilgi tarzında yazıyorum.
Böyle bir açıklama gereÄŸi duydum, çünkü WSDL konusu çok ayrıntılı ve burada sadece bir fikir oluÅŸturabilme biçiminde anlatmaya çalışacağım. Ayrıca daha öncesinde yazdığım yazıların karakteristiÄŸine dair birÅŸeyler yazmak istedim. Arada fırça atan oluyor, “becerememiÅŸsin” diye
WSDL (Web Service Description Language – Webservis Belirtme Dili) web servis belirtimi için model saÄŸlayan XML tabanlı bir dildir .(*)
Önceki yazımda Web Servis konusuna giriş yampıştım. Web servis oluşturma işlemi, örneğimizde görüldüğü kadar kolay yapılabiliyor olsa da, iş bukadar ile bitmiyor. Çünkü, bizim örneğimiz sadece PHP uygulamaları arasında uyumlu olarak çalışır. Yazdığınız web servisi Java,C# veya diğer bir programlama dili ile konuşturamayız.
Bunu başarabilmek için onların da anlayacağı dilden konuşuyor olmamız gerekir. SOAP XML mesajlaşma tabanlı bir sistem entegrasyon yöntemidir evet, ama bu SOAP isteklerini oluşturmak için de bir standart gerekmektedir ( farklı platform veya dillerin birbirleri ile uyumlu çalışabilmelerini sağlayabilmek için ).
İşte burada WSDL devreye girmektedir. WSDL de XML tabanlı bir sistemdir. WSDL gerçekleştirilebilecek bütün SOAP isteklerinin kayıtarını tutar :
- Web servisin adı (örneğimizde SMS di)
- Yapılabilecek yordam çağrıları
- Bu yordam çağrılarının alabileceği parametreler
- Parametrelerin tipleri
- Döndürülecek cevap,biçimi
- Hata zamanında döndürülecek mesaj -sonuç (Fault)
- Web servis çağrılarının yapılacağı adres (EndpointURI)
Bunlar sayılabilecek en temel özelliler.
Şimdi örneğimizden yola çıkarak biraz ayrıntıya girelim. Örneğimizdeki SMS servisine uygun bir WSDL oluşturduğumuzu varsayıyoruz ( WSDL oluşturma işlemine dair birşeyler yazabilmeyi umuyorum, zamanım olursa).
Bunu SoapClient nesnemize parametre olarak verdiÄŸimizde :
$istemci=new SoapClient(“sms.wsdl”);
artık istemcimiz hangi adrese ne gibi çağrılar yapabileceğini, bu çağrıları nereye yapabileceğini, ne tür cevaplar alabileceğini bilecektir. Biz istemcimizde $istemci->buMetodYok(); çalıştırmaya çalıştığımızda ,isteği daha suncuya göndermeden bize hata döndürecektir. Çünkü WSDL de tanımlanmış böyle bir metod yok.
WSDL’imizi oluÅŸturduktan sonra bunu farklı platformlarda kullanılabilmesi için dağıtabiliriz. ÖrneÄŸin servisiniz PHP’de yazılmıştır ve WSDL oluÅŸturarak C# ile yazılmış bir uygulamanın sizin uygulamanız ile iletiÅŸim kurmasını saÄŸlayabilirsiniz.
PHP de veri tipleri yoktur, örneğin C# da:
int sayi;
tanımlı bir deÄŸiÅŸken tanımladığınızda buna sayı haricinde birÅŸey atamanız mümkün deÄŸildir. Atamaya kalktığınızda hata alırsınız. Ama bu PHP’de böyle deÄŸildir :
1 2 | $sayi=0; $sayi="bu artık bir sayı değil"; |
Dedikki, PHP’de yazdığımız servisi C# ile kullandırabileceÄŸiz. İyide veri tipleri aynı deÄŸil ki, nasıl anlaÅŸacak bunlar ?
WSDL ile anlaÅŸacaklar. WSDL’de standart veri tipleri vardır ve bunların dışına çıkılmaz, istemciler bu veri tiplerini kendi platform/programlama diline göre bir karşılığını bularak eÅŸleÅŸtirir. Böylece platform/dil bağımsız iletiÅŸim mümkün olur.
Son olarak iÅŸin en can alıcı ve en üzücü kısmına geldi. PHP WSDL’in otomatik oluÅŸturulması için bir araç sunmuyor ÅŸimdilik. Bunu elle oluÅŸturmalısınız, ya da üçüncü parti bir uygulama-framework bulup bunun ile oluÅŸturmalısınız.
DiÄŸer birçok programlama dili WSDL’i direkt olarak koddan oluÅŸturabilmekte, ayrıca var olan bir WSDL den istemci konudunu otomatik oluÅŸturabilmektedir. Biz de bunu eclipse ile yapacağız ilerleyen zamanlarda.
Anlaşılmayan, hatalı yazılmış yerler olursa, yorum düşerek uyarır iseniz düzeltirim.
Hoşça kalın.
Emek verip hazırlamışsınız teşekkürler. başlangıç seviyesi için sadece ön fikir veriyor. dediğiniz gibi başlık gayet iddialı olmuş