İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Selim Akyokuş
sakyokus@dogus.edu.tr

WEB SERVİSLERİ: İternet Devriminde İkinci Aşama?

Özet

Geçen altı yılda bir çok alanda internet ve web teknolojileri yeni bir devrim başlatmıştır. Bir çok araştırmacıya göre XML tabanlı web servisleri bu devrimin ikinci adımını oluşturacaktır. Web servisleri web ortamında yayınlanabilen, aranıp bulunabilen ve çağrılarak erişilebilen modüler uygulama fonksiyonlarıdır. Bu fonksiyonlar değişik kurumsal iş süreçlerini gerçekleştireceklerdir.

Web servisleri Haziran 2000'de ortaya çıkan bir çok yazılım firması tarafından yoğun bir destek bulan bir modeldir. Web servisleri açık internet standartlarına dayanır. Henüz gelişme ve olgunlaşma aşamasında olan bu modelle ilgili olarak bu aşamada ortaya çıkan ve kullanılan çekirdek standartlar SOAP, WSDL ve UDDI'dır.

Web servisleri modelini destekleyen Microsoft, IBM, Sun, HP, Oracle ve daha bir çok firma bu konuda yoğun bir şekilde çalışmakta ve web servisleri yazılım ve uygulama geliştirme araçlarını geliştiricilere sunmaktadırlar. Bu konudaki firmaların yoğun desteğinden dolayı uygulama bütünleştirmesi konusunda ortaya çıkacak hakim ortamın web servisleri modeline dayanacağı yönündedir.

I. GİRİŞ

Geçen altı yıldaki gelişmelerden sonra bugünkü web ortamı olmadan ağ tabanlı bilgi sistemlerinin düşünülmesi çok zordur. Web'in bu kadar başarılı olmasının nedeni basitlik ve yaygınlığıdır (ubiquity). Web ortamındaki gelişmeleri üç safhada inceleyebiliriz[1]:

Şekil 1 – Web servisleri ile etkileşim sağlayan iş gezisi uygulaması (Kaynak : IBM)

Web servisleri Haziran 2000'de ortaya çıkan bir çok yazılım firması tarafından yoğun bir destek bulan kavramdır. Web servisleri yazılım endüstrisinin "El Dorado" su olarak nitelendirilmektedir[2]. "El Dorado" bir zamanlar Amerika da altın madeni bulunduğu var sayılan herkesin aradığı hayali bir şehirdir. Internet üzerinde uygulama bütünleştirmesi için yöntem arayan bir çok yazılım geliştirici firma ve kurum web servisleri modeli konusuna yönelmişlerdir. Bu modeli destekleyen Microsoft, IBM, Sun, HP, Oracle ve daha bir çok firma bu konuda yoğun bir şekilde çalışmakta ve web servisleri yazılım ve uygulama geliştirme araçları sunmaktadır. Bu konudaki firmaların yoğun desteğinden dolayı uygulama bütünleştirmesi konusunda ortaya çıkacak hakim ortamın web servisleri modeline dayanacağı yönündedir.

II. WEB SERVİSLERİ MODELİ

Web servisleri modeli üç ana birimin etkileşimine dayanır[3]. Şekil 2'de gösterilen bu birimler şunlardır:

Şekil 2 – Web Servis Modeli (Kaynak: IBM)

Şekil 3'daki şema bir web servisi istemcisinin bir servis sağlayıcıdan bir servisi çağırma aşamasındaki temel adımları göstermektedir[4]:

Şekil 3 – Web servisi istemci ve sağlayıcısı arasındaki temel işlemler (Kaynak:Sun)

III. WEB SERVİSLERİ STANDARDLARI

Web servisleri açık internet standartlarına dayanır. Daha önce belirtildiği gibi web servisi modeli Haziran 2000'de ortaya çıkmıştır. Bu nedenle henüz tamamen olgunlaşmış teknoloji değildir. Şekil 4 web servisi mimarisindeki temel katmanları göstermektedir. Bu katmanlarda belirtilen güvenlik, iş akışı, servis kalitesi ve yönetim gibi konulardaki web servisi standartları henüz araştırma aşamasındadır. Bunların yanında bir takım temel çekirdek standartlar oluşmaya başlamıştır. Bunlar şunlardır[3-11]:

Şekil 4 – Web servisi mimarisi katmanları (Kaynak: IBM)

IV. SOAP (Simple Object Access Protocol)

SOAP uygulama bütünleştirmesi için geliştirilmiş XML ile formatlanmış bilgilerin iletişimini sağlayan bir protokoldür [12-17]. Uygulama bütünleştirme için middleware olarak adlandırılan daha önce bir çok çözümler sunmuştur. RPC (Remote Procedure Call, DCOM, IIOP (Internet Inter-ORB Protocol) ve Java RMI bu çözümlerden bazılarıdır. Bu middleware çözümleri internet ortamında iletişim sağlama konusunda yetersiz kalmaktadır. Bu nedenle XML tabanlı bir protokol olan SOAP giderek yaygınlaşmaktadır. SOAP istemcilerin sunucularda olan nesne yöntemlerini çağırmasını ve sonuçların alınmasını sağlayan basit istek/yanıt (resquest/response) protokolüdür. SOAP mevcut internet altyapısında olan router, firewall ve proxy sunucularda herhangi bir değişiklik yapmadan kolayca çalışmaktadır.

Şekil 5 bir SOAP istemci ve sunucusu arasındaki iletişimi göstermektedir. Bir SOAP uygulaması geliştirmek için istemci ve sunucuya SOAP geliştirme araçları ile birlikte gelen kütüpanelerin yüklenmesi gerekir. Bu kütüpaneler bir XML parser ve SOAP işlemicisi içerir. İstemci SOAP uygulaması bir SOAP istek mesajı oluşturarak bu isteği SOAP sunucusunda tanımlanmış servis uç noktalarından (end point) birisi tarafından çalıştırılması için gönderir. SOAP sunucu ilgili servisi çalıştırdıktan sonra SOAP yanıt mesajı hazırlar. Hazırlanan SOAP yanıt mesajı istemciye iletilir.

Şekil 5 – SOAP istemci ve SOAP sunucusu arasındaki iletişim (Kaynak: www.techmetrix.com)

Şekil 6 HTTP protokolü ile gönderilen bir SOAP mesajını göstermektedir. SOAP mesajı HTTP POST metodu veri paketinin içinde gönderilir. Bir SOAP mesajı bir SOAP zarfından (SOAP envelope) oluşur. SOAP zarfı opsiyonel bir SOAP başlığı (SOAP header) ve SOAP gövdesinden (SOAP body) oluşur. SOAP gövdesi çağırılacak metod ve metodun içerdiği parametreleri içerir. Şekil 7 ve 8 bir istek ve yanıt mesajının iceriğini göstermektedir.

Şekil 6 – Bir SOAP mesajının yapısı (Kaynak: www.techmetrix.com)

Şekil 7 – Bir SOAP istemci istek (request) mesajı
<SOAP-ENV:Envelope
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
        SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
                <m:GetLastTradePrice xmlns:m="http://example.com/stockquote.xsd">
                        <symbol>DIS</symbol>
                </m:GetLastTradePrice>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Şekil 8 – Bir SOAP yanıt (response) mesajı
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope
     xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
     SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
     <SOAP-ENV:Body>
          <m:GetLastTradePriceResponse xmlns:m="http://example.com/stockquote.xsd">
                        <Price>34.5</Price>
                </m:GetLastTradePriceResponse>
      </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

V. WSDL (Web Services Description Language)

Bir uygulamanın bir web servisini kullanması için web servisinin nasıl çağırılacağının, arayüzünün, hangi protokollerin ve kodlama standartlarının belirtilmesi gerekir. WSDL [18, 19, 20] web servisini tanımlayan bir XML belgesinidir. Bir anlamda dağıtık programlamada kullanılan IDL'e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:

Şekil 9 Microsoft'un web servisleri aracı olan Microsoft SOAP toolkit'te verilen bir basit aritmetik işlemler yapan bir web servisinin WSDL belgesini göstermektedir. Bu web servisi EchoString, AddNumbers, and SubtractNumbers işlemlerini gerçekleştirmektedir. Şekil'de görüldüğü gibi WSDL belgesi oldukça karmaşıktır. Bu nedenle gerellikle web servisi geliştirme araçları WDSL belgelerini otomatik olarak oluşturan programlar içermektedir.

Şekil 9 – Bir WSDL belgesi
<definitions name ='DocSample1'   targetNamespace = 'http://tempuri.org/wsdl/'
    xmlns:wsdlns='http://tempuri.org/wsdl/' 
    xmlns:typens='http://tempuri.org/type' 
    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' 
    xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
    xmlns:stk='http://schemas.microsoft.com/soap-toolkit/wsdl-extension'
    xmlns='http://schemas.xmlsoap.org/wsdl/'> 
  <types>
    <schema targetNamespace='http://tempuri.org/type'
      xmlns='http://www.w3.org/2001/XMLSchema'
      xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
      xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>
    </schema>
  </types>
  <message name='Sample1.EchoString'>
    <part name='testString' type='xsd:string'/>
  </message>
  <message name='Sample1.EchoStringResponse'>
    <part name='Result' type='xsd:string'/>
  </message>
  <message name='Sample1.AddNumbers'>
    <part name='NumberOne' type='xsd:double'/>
    <part name='NumberTwo' type='xsd:double'/>
  </message>
  <message name='Sample1.AddNumbersResponse'>
    <part name='Result' type='xsd:double'/>
  </message>
  <message name='Sample1.SubtractNumbers'>
    <part name='NumberOne' type='xsd:double'/>
    <part name='NumberTwo' type='xsd:double'/>
  </message>
  <message name='Sample1.SubtractNumbersResponse'>
    <part name='Result' type='xsd:double'/>
  </message>
  <portType name='Sample1SoapPort'>
    <operation name='EchoString' parameterOrder='testString'>
      <input message='wsdlns:Sample1.EchoString' />
      <output message='wsdlns:Sample1.EchoStringResponse' />
    </operation>
    <operation name='AddNumbers' parameterOrder='NumberOne NumberTwo'>
      <input message='wsdlns:Sample1.AddNumbers' />
      <output message='wsdlns:Sample1.AddNumbersResponse' />
    </operation>
    <operation name='SubtractNumbers' parameterOrder='NumberOne NumberTwo'>
      <input message='wsdlns:Sample1.SubtractNumbers' />
      <output message='wsdlns:Sample1.SubtractNumbersResponse' />
    </operation>
  </portType>
  <binding name='Sample1SoapBinding' type='wsdlns:Sample1SoapPort' >
    <stk:binding preferredEncoding='UTF-8'/>
    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http' />
    <operation name='EchoString' >
      <soap:operation soapAction='http://tempuri.org/action/Sample1.EchoString' />
      <input>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </input>
      <output>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </output>
    </operation>
    <operation name='AddNumbers' >
      <soap:operation soapAction='http://tempuri.org/action/Sample1.AddNumbers' />
      <input>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </input>
      <output>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </output>
    </operation>
    <operation name='SubtractNumbers' >
      <soap:operation soapAction='http://tempuri.org/action/Sample1.SubtractNumbers' />
      <input>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </input>
      <output>
        <soap:body use='encoded' namespace='http://tempuri.org/message/'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </output>
    </operation>
  </binding>
  <service name='DocSample1' >
    <port name='Sample1SoapPort' binding='wsdlns:Sample1SoapBinding' >
      <soap:address location='http://localhost/DocSample1/DocSample1.wsdl' />
    </port>
  </service>
</definitions>

VI. UDDI (Universal Description Discovery and Integration)

Bir web servisini kullanmak için kullanıcının web servisi sağlayan kurumları ve bu kurumların verdikleri web servislerinin neler olduğunu bilmesi gerekir. UDDI kısaltmasında geçen Evrensel, Tanım, Buluş ve Bütünleştirme kelimelerinin ifade ettiği gibi UDDI kurumların kendilerini, sağladıkları servisleri yayınlayarak tanımlamalarını, ve bu bilgilerin daha sonra diğer kurumlarca taranıp bulunmasını sağlayan bir standarttır[21-25]. UDDI Kurum Kayıt Servisi (UDDI Business Registry) kurum ve web servisleri bilgilerini saklayan sunulardır. Bu sunucular servis sağlayıcılarından gelen bilgilerini kendi veritabanlarına kayıt ederek diğer kurumların erişimine açar. Şu anda aktif olarak çalışan kurum kayıt sunucuları uddi.microsoft.com ve uddi.ibm.com ‘dur. Şekil 10'da görüldüğü gibi bu sunucular kendilerine kayıt edilen bilgileri diğer sunucularada kopyalayarak kolayca hızlı bir şekilde erişilmesini sağlarlar[1]. UDDI sunucuları kurum ve servis kayıt, güncelleme ve tarama işlemlerini web servisleri (SOAP mesajları) ile gerçekleştirir.

Şekil 10 – UDDI Kurum Kayıt Sunucuları (Kaynak : IBM)

VII. Web Servisi ve SOAP Uygulama Geliştirme Araçları

Bir çok firma web servisi ve SOAP uygulaması geliştirmek için araçlar sunmaktadır. Bu araçların listesi www.soapware.org sitesinde listelenmiştir.

VIII. BASİT BİR WEB SERVİSİ UYGULAMASI

Microsoft SOAP toolkit ile gelen basit bir web servisi uygulaması aşağıda açıklanmıştır. Microsoft SOAP toolkit http://msdn.microsoft.com/code/default.asp?url=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml adresinden indirilebilir.

Şekil 11 bir SOAP sunucusu göstermektedir. SOAP sunucusu gelen SOAP isteklerini bir COM nesnesine gönderir. COM nesnesi ilgili yöntemi çalıştırır. COM nesnesinin ürettiği sonuçlar bir SOAP yanıtı olarak tekrar istemciye gönderilir. SOAP sunucusunun nerede bulunduğu ve parametreleri bir WSML (Web Services Meta Language) dosyasında tutulur. Sunucuda bulunan WSDL (Web Servies Description Language) dosyası ise web servisi ile ilgili tanım bilgilerini saklar. Bu örnekteki web servisi EchoString, AddNumbers, and SubtractNumbers işlemlerini gerçekleştirmektedir. Bu işlemlerin Visual Basic kodu Şekil 12'de verilmiştir. Bu kod Visual Basic'te bir ActiveX dll project açılırarak bir COM nesnesi olarak derlenir ve Docsample1.dll kod dosyası oluşturulur. WSDL generator bu dosyayı kullanarak web servisi tanım dosyası (Docsample1.wsdl) ve web servis meta language (Docsample1.wsml) oluşturur.

Şekil 13 bir SOAP istemcisi göstermektedir. SOAP istemci WSDL dosyasını kullanarak web servisinde bulunan yöntemleri çağırır. Şekil 14 EchoString ve AddNumbers yöntemlerini çağıran bir istemci VBSript uygulamasının kodunu vermektedir.

Şekil 11 – SOAP sunucusu COM nesnesini çağırarak yanıtların istemciye iletir. (Kaynak: www.techmetrix.com)

Şekil 12 – COM nesnesi Visual Basic Kodu
Public Function EchoString(ByVal testString As String) _
                           As String
    EchoString = testString
End Function

Public Function AddNumbers(ByVal NumberOne As Double, _
                           ByVal NumberTwo As Double) _
                           As Double
    AddNumbers = NumberOne + NumberTwo
End Function

Public Function SubtractNumbers(ByVal NumberOne As Double, _
                                ByVal NumberTwo As Double) _
                                As Double
    SubtractNumbers = NumberOne - NumberTwo
End Function

Şekil 13 – VBScript istemci uygulamasının SOAP sunucusunu çağırması. (Kaynak: www.techmetrix.com)

1.	Option Explicit
2.	
3.	Dim soapClient
4.	set soapclient = CreateObject("MSSOAP.SoapClient") 
5.	On Error Resume Next
6.	Call soapclient.mssoapinit("http://localhost/DocSample1/DocSample1.wsdl",  "DocSample1", "Sample1SoapPort")
7.	if err <> 0 then
8.	  wscript.echo "initialization failed " + err.description
9.	end if
10.	
11.	wscript.echo  soapclient.EchoString("Bob")
12.	if err <> 0 then
13.	  wscript.echo   err.description
14.	  wscript.echo   "faultcode=" + soapclient.faultcode
15.	  wscript.echo   "faultstring=" + soapclient.faultstring
16.	  wscript.echo   "faultactor=" + soapclient.faultactor
17.	  wscript.echo   "detail=" + soapclient.detail
18.	end if
19.	
20.	wscript.echo  soapclient.AddNumbers(2, 3)
21.	if err <> 0 then
22.	  wscript.echo   err.description
23.	  wscript.echo   "faultcode=" + soapclient.faultcode
24.	  wscript.echo   "faultstring=" + soapclient.faultstring
25.	  wscript.echo   "faultactor=" + soapclient.faultactor
26.	  wscript.echo   "detail=" + soapclient.detail
end if

IX. SONUÇ

Yeni nesil web uygulamaları web servisleri modeline dayanacaktır. Web servisleri ile, kurumlar işbirliği yaptığı satıcı, müşteri ve banka gibi diğer kurumlardaki iş süreçlerini birleştirerek daha iyi işlevsellik ve daha az maliyet gibi bir çok avantajlar sağlayacaklardır. Internet'te iki site www.xmethods.com ve www.salcentral.com değişik kurumlar ve kişilerce geliştirilen basit web servislerini yayınlamaktadır.

Web servisleri modeli XML, SOAP, WSDL ve UDDI gibi açık internet standartlarına dayanır. Bu konudaki firmaların yoğun desteğinden dolayı uygulama bütünleştirmesi konusunda ortaya çıkacak hakim ortamın web servisleri modeline dayanacağı yönündedir. Web servisleri modelini ciddi olarak benimseyen Microsoft, IBM, Sun, HP, Oracle ve daha bir çok firma bu konuda yoğun bir şekilde çalışmakta ve web servisleri yazılım ve uygulama geliştirme araçlarını geliştiricilere sunmaktadırlar.

Web servisleri modeli Haziran 2000'de ortaya çıkmış ve yoğun bir ilgi ile karşılaşmıştır. Şekil 15 Gartner araştırma firmasının hazırladığı bir teknolojinin ortaya çıktıktan sonra olgunlaşarak üretkenlik aşamasına kadar olan "Hype (abartı) eğrisini" göstermektedir. Şekilde görüldüğü gibi web servisleri şu anda üzerinde çok konuşulan, pazarlanan ve umut vadeden bir teknoloji olarak bu eğride "beklenti zirvesi" (Peak of Inflated Expectations) aşamasında gözükmektedir. Gartner'a göre bu teknoloji iki yıl içinde olgunlaşarak üretkenlik aşamasına geçecektir.

Mevcut web servisleri modeli uygulama bütünleştirme konusunda bir takım temel yapıları içermekle birlikte bir takım eksiklikleri vardır. Bunlar güvenlik, iş akışı, servis sürekliği, servis kalitesi ve yönetim gibi konulardadır. Web servislerinin başarılı ve yaygın olarak kullanılması için mevcut modelin geliştirilerek bu konuların çözüme kavuşturulması gerekmektedir.

Şekil 15 – Gartner Hype Eğrisi
İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır