Web Service Nedir ?

Web Service, iki uygulamanın ya da makinenin mimarisi ve teknolojisinden bağımsız olarak veriyi değiş tokuş edecek mekanizma veya iletişim ortamıdır. Web Servisler web üzerinden HTTP protokolü ile hizmet veren program parçalarıdır. Hangi dilde ve/veya platformda geliştirildiklerinin bir önemi olmadığı için farklı sistemler arasında veri alışverişi yapmamıza olanak sağlar. Örneğin .NET ile yazılmış bir servisle PHP’de yazılmış bir uygulama birbiri ile iletişim kurabilir.

WSDL Nedir ?

WSDL Web Services Description Language (Web Servisleri Tanımlama Dili) kısaltmasıdır. Web servislerin kullanılabilmesi için web servis içindeki metot, parametre, web servis adresi vb. değerlerin bilinmesi gerekir. WSDL, web servisi kullanabilmek için gerekli olan bilgileri tanımlayan bir standarttır. WSDL, XML biçiminde hazırlanır ve yapısı aşağıdaki gibidir.

SOAP Nedir ?

SOAP (Simple Object Access Protocol/Basit Nesne Erişim Protokolu) en temel anlamda, internet üzerinden küçük miktardaki bilgileri ya da mesajları aktarma protokolüdür. SOAP mesajları XML formatındadır ve genellikle HTTP (Hyper Text Transfer Protocol) protokolü (bazen de TCP/IP) kullanılarak gönderilirler. Burada dikkat edilmesi gereken en önemli durumlardan biri, SOAP’ın bizi XML tabanlı kullanıma mecbur bırakmasıdır. Bu konuda esnek değildir.

SOAP – İleti Yapısı

Envelope: Zarf anlamına gelen bu element, SOAP mesajının tüm iskeletini oluşturur.

Header: Başlık elementi, mesaj sağlayıcılarının kullanacağı isteğe bağlı niteliklerinin (attributes) ayarlandığı verilerden oluşur. Bu element isteğe bağlı (optional) olarak eklenebilir.

Body: Gövde elementi, XML verinin kendisini barındıran, asıl mesajı içeren veridir. Bu element zorunlu (mandatory) olarak eklenmelidir.

Fault: Hata elementi, mesaj sağlayıcıları tarafından alınan hatalar hakkında bilgi veren bir veridir.

Yukarıda her bir elementi açıklanan SOAP mesaj yapısının iskeleti aşağıda gösterilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>
</soap:Envelope>

Envelope Elementi

SOAP’ ın bütün mesajını sarmalayan kök elementtir. Aşağıda örnek şablonu verilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

XMLNS: Soap niteliği SOAP mesajında kullanılan ad uzayını (namespace) tanımlar. soap:encodingStyle niteliği SOAP mesajında kullanılacak veri tiplerini tanımlar. Yukarıdaki örnekte gösterilen veri tipleri XML dilinde kullanılan W3C’ nin tanımladığı XSD veri tipleridir.

Header Elementi

Başlık elementi SOAP mesajlarında isteğe bağlı olarak doldurulan bilgilerden oluşur. Bir başlık elementini, örnek olarak, şifre korumalı servislere dijital imza sağlamak için kullanabilir veya bir servise login olmak için kullanılan kullanıcı adı ve şifre bilgilerinizi bu element altında girebilirsiniz. Header elementleri bir SOAP zarfı içerisinde ilk olarak tanımlanan XML imlerinden oluşur. Örnek bir header imi aşağıda gösterilmektedir.

Örnek Header:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Bir SOAP header elementi mustUnderstand, actor ve encodingStyle niteliklerini barındırabilir.

soap:mustUnderstand niteliği SOAP başlığının alıcı tarafından tanınmasının zorunlu olup olmadığını söyler. Şayet bu değer yukarıdaki örnekte olduğu gibi 1 ise, bu mesajı alan alıcı bu başlığı işlemek zorunda kalır. Aksi halde 0 değeri, bu başlığın işlenmek zorunda olmadığını belirtir. Şayet 1 olan değeri alan alıcı başlığı tanımlayamaz ise bir hata döndürür. Örnek kullanımı aşağıda gösterilmektedir.

Örnek mustUnderstand:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/"
  soap:mustUnderstand="1">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

soap: actor niteliği bir göndericinin, alıcıya mesajı iletirken, arada yönlendirme yapan mesaj sağlayıcılarına bu mesajı ileteceğini belirtir. Örnek kullanımı aşağıda gösterilmektedir.

Örnek actor:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
  <m:Trans xmlns:m="http://www.example.com/transaction/"
  soap:actor="http://www.example.com/appml/">100
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

soap:encodingStyle niteliği yukarıda anlatılan görevi ile aynıdır.

Body Elementi

SOAP mesajının gövdesini oluşturan asıl mesajı temsil eder. Doldurulması zorunlu olan bir bilgidir. Uzak prosedür çağrılarının ve servislerinin kullanıldığı yer burasıdır. Bir SOAP operasyonu burada çağrılarak sunucuya gönderilir. Aşağıdaki örnekte bir müşterinin ID bilgisini alarak adını döndüren SOAP mesajı aşağıda gösterilmektedir.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
  <m:GetName xmlns:m="http://www.example.com/customers">
    <m:Item>1234</m:Item>
  </m:GetName>
</soap:Body>
</soap:Envelope>

Yukarıdaki örnekte www.example.com/customers web servis sağlayıcısına, 1234 numaralı müşteri sorgusu yapılmaktadır. Sunucunun döndüğü örnek cevap ise aşağıdaki formattadır.

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
  <m:GetNameResponse xmlns:m="http://www.example.com/customers">
    <m:Name>Fatih KABAKCI</m:Name>
  </m:GetNameResponse>
</soap:Body>
</soap:Envelope>

Fault Elementi

İsteğe bağlı olarak doldurulan hata elementi, alınan hatalar hakkında bilgi sağlayan imlerden oluşur. Bir hata oluştuğunda, bu mesaj body elementi altında gösterilir. Bir hata elementi aşağıdaki 4 alt elementten oluşur.

<faultcode> hata kodunu gösterir.

<faultstring> hatanın açıklamasını gösterir.

<faultactor> hataya sebep olan actor bilgisini gösterir.

<detail> body elementi ile ilişkili uygulamaya özel hata bilgisini barındırır.

Yukarıdaki elementler bir hatanın hangi parçalardan oluştuğunu gösterir. Aşağıda örnek bir hata mesajı gösterilmektedir.

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
   <soap:Body>
      <soap:Fault>
         <faultcode xsi:type="xsd:string">soap:Server</faultcode>    
         <faultstring xsi:type="xsd:string">
           Exception from service object: null
         </faultstring>  
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

REST Nedir ?

REST (Representational State Transfer Architecture/Temsili Durum Transferi) en temel anlamda, İstemci ve Sunucu (Client-Server) arasında veri alış verişinin basit bir yoludur. REST mimarisi standart bir tanımlamaya ihtiyaç duymaz. REST ile veri alışverişini JSON, XML hatta text formatında bile yapabilirsiniz, esnek bir yapıya sahiptir.

HTTP Methodları (Verb)

GET: Veri görüntüler/listeler
POST: Yeni veri ekler/oluşturur
PUT: Var olan bir veriyi günceller/üzerine yeni veri ekler
DELETE: Veri siler
PATCH: Verinin bölümünü günceller
OPTIONS: Kabul edilen istekler konusunda bilgi iletir.

REST API Gereksinimleri

Sunucu bu tiplerden hepsine ya da birkaçına cevap verebilir. Peki, bu işlemlerin gerçekleştirilebilmesi için REST API’nin ne gibi gereksinimleri karşılaması gerekir?

Doğrulama (Validation)
Kullanıcı Doğrulama (Authentification)
Ön Bellek (Caching)
Sayfalama
Sıralama/Filtreleme
Versiyonlama
Yetkilendirme/Yetki Kısıtlama (Authorization)

Örnek bir REST talebi şöyledir:

GET http://www.catechizeme.com/catechisms/catechism_for_young_children/daily_question.js HTTP/1.1
Accept-Encoding: gzip,deflate
Host: www.catechizeme.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

Bu örnek talebe verilen yanıt ise şu şekilde olacaktır:

HTTP/1.1 200 OK
Date: Fri, 22 Nov 2013 22:32:22 GMT
Server: Apache
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.17
ETag: "b8a7ef8b4b282a70d1b64ea5e79072df"
X-Runtime: 13
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 209
Status: 200
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: js; charset=utf-8
{
   "link": "catechisms\/catechism_for_young_children\/questions\/36",
   "catechism": "Catechism for Young Children",
   "a": "Original sin.",
   "position": 36,
   "q": " What is that sinful nature which we inherit from Adam called?"
}

REST API Response Yaygın HTTP Status Kodları

Sıklıkla karşılaşılan status değerlerine dair kısa açıklamalar eklemek gerekirse;

200 OK Yapılan web servis çağrısının başarılı olduğu anlamına gelmektedir.
201 CREATED Veri eklenme işlemi sonunda verinin kendisi 201 ile döner.
204 NO CONTENT Silinme işleminin ardından ilgili verinin olmadığını belirtir.
400 BAD REQUEST Talepte (kayıt ekleme, güncelleme, silme vb.) gönderilen talebin doğrulanamadığı (validation) durumları ifade eder.
401 UNAUTHORIZED Talep yetkilendirilen kullanıcının yetkileri ötesindeyse (sınırlandırma) 403 status kodu dönecektir.
403 FORBIDDEN İşlemler kullanıcının oturum gerçekleştirmesini zorunlu kılıyorsa ve oturum gerçekleştirilmemişse 401 status bildirimi alınacaktır.
404 NOT FOUND Kullanıcının istek yaptığı URL yok ya da geçersiz ise 404 status dönecektir.
405 METHOD NOT ALLOWED İstek izin verilen dışında bir tip barındırıyor ise bu status dönecektir.
429 TOO MANY REQUESTS Kullanıcı belirtilen sayıdan fazla ya da karmaşık bir istekte (saatlik, dakikalık vb.) bulunmuşsa bu status dönecektir.

 

Bu status bildirimlerini genel gruplandırmalar altında ifade etmek gerekirse;

1xx – Bilgilendirme

2xx – Başarılı İşlem

3xx – Yönlendirme

4xx – Kullanıcı Kaynaklı Hata

5xx – Server Kaynaklı Hata

SOAP UI Temel Proje Tipleri Nelerdir ?

  • SOAP projeleri , genellikle bir WSDL dosyasından veya tek bir hizmet çağrısından oluşturulur.
  • REST projeleri , WADL dosyasından veya doğrudan bir URL ve parametrelerinden oluşturulabilir.
  • Genel projeler, çeşitli ara birimler ve yöntemlerle sunulan hizmetler için çok amaçlı bir projedir.

 

İbrahim Yılmaz

Yazılım Test Mühendisi

 

Kaynaklar:

https://www.yusufsezer.com.tr/wsdl-nedir/

http://fatihkabakci.com/article-SOAP(BASIT_NESNE_ERISIM_PROTOKOLU)

https://ceaksan.com/tr/rest-soap-api-nedir/

 

SoapUI-Web Servis Testleri Nasıl Yapılır? yazı dizisinin tüm linkleri aşağıdadır;

http://egemsoft.net/yazilim-test/2019/10/10/soapui-web-servis-testleri-nasil-yapilir-part2-test-structure/

http://egemsoft.net/yazilim-test/2019/12/12/soapui-web-servis-testleri-nasil-yapilir-part3-end-to-end-web-servis-test-otomasyonu/