Bir Protokol Olarak : SOAP

Talha Uysal
Apinizer
Published in
5 min readNov 22, 2021

Herkese selamlar, bu yazımda bir protokol olan ve web servislerin haberleşmesinde kullanılmak üzere tasarlanan SOAP kavramını anlatacağım. Aynı zamanda da bu yazı XML yazı serisinin devamı niteliğini taşımaktadır. Çünkü SOAP protokolü içerisinde XML’ de yer almaktadır.

SOAP’ ın açılımı (Simple Object Access Protocol), Türkçe karşılığıyla “Basit Nesne Erişim Protokolü”’dür. SOAP protokolü günümüzde yerini artık başka teknolojilere bırakmaktadır. Ancak SOAP da yabana atılacak bir kavram değildir çünkü kurumsal ve legacy yapılarda hâlen sıklıkla karşımıza çıkmaktadır.

SOAP protokolünün tarihçesine bakacak olursak 1998 yılında Microsoft önderliğinde geliştirilmeye başlanmıştır. Geliştirilmeye başlanan bu prototip versiyon 1.0 olarak literatüre geçmiştir. Bu versiyon HTTP protokolünü kullanmıştır. Versiyon 1.0'ı takiben, versiyon 1.1 diğer protokollerle çalışabilecek bir hale getirilip W3C (World Wide Web Consortium)’e gönderilmiştir. W3C’de kendisine gönderilen bu versiyonu 1.2 olarak güncellemiş ve bir standart haline getirmiştir.

SOAP Versiyonları Arasındaki Farklar

· SOAP versiyon 1.2 , 1.1 versiyonuna göre daha temiz ve daha net bir veri işleme modeline sahiptir. Çünkü XML Protokol Çalışma Grubu versiyon 1.1'i incelerken yaklaşık olarak 400 sorunun farkına varıp bunlara çözümler bulmuştur.

· SOAP 1.2 çalışmak ve test etmek için daha uyumlu bir yapıya sahiptir. Çünkü kapsamlı bir test sürecinden geçirilmiştir.

· SOAP versiyon 1.2 XML Information Set (XML Infoset) yani XML Bilgi Kümesi’ni temel almaktadır. XML Bilgi Kümesi, XML dokümanları için şema görevi gören XSD’ yi kendine baz almıştır.

· SOAP 1.1 XML 1.0'ın serileştirilmesine dayalıyken, SOAP 1.2 Infoset’in nasıl taşınacağı konusunda herhangi bir kısıtlama getirmez.

· SOAP versiyon 1.2 geliştiricilere protokol bazında bağımsızlık yaratır. Bu bağımsızlık protokolün HTTP, SMTP gibi protokolleri kullanmasına olanak sağlar.

SOAP yapısı gereği içerisinde XML’i barındırır demiştik. XML’ in yapısını hatırlayacak olursak bütün elementlerin sıkı sıkı şekilde ifade edildiği bir yapıdır. Bu sebepten dolayıdır ki XML dokümanları veri iletişimi esnasında kullanılacak olan verinin tam olarak ne ifade edeceğini anlatır bu da veri iletişiminde önemli bir unsurdur. Yapısında XML bulunduğu içinde SOAP mesajların insanlar tarafından da anlaşılması kolaydır. Ancak içerisinde barındıracak binary datalarıdan dolayı bu mesajın büyüklüğü artabilir.

SOAP’ın belki de en büyük dezavantajı, en büyük avantajı gibi görünen XML yapısında olmasındandır. İçerisinde bulundurduğu mesaj yapısından dolayı yazılımlarda kullanılan protokolleri ve servis yolu mimari modellerinde karışıklıklara sebebiyet vermektedir bu karışıklık da günümüzde yaygın olarak kullanılan teknolojilerde yer bulamamıştır.

SOAP’ın kendine has bir mesaj yapısı bulunmaktadır. Bu mesaj yapısı 4 kavramdan oluşmaktadır.

SOAP Mesaj Yapısı

Envelope: Bu kavramın Türkçe karşılığı tam olarak “Zarf” ifadesidir. Bir mektup düşünelim, mektubumuzu göndereceğimiz zaman bir zarfın içerisine koyar ve göndeririz. Envelope ifadesi de kendi içerisine “Header” , “Body”, “Fault” gibi değerleri yükleyerek karşı tarafa kendini iletir. Envelope ifadesi SOAP ile veri alışverişlerinde kesinlikle kullanılması gereken bir kavramdır.

Header: Bu kavramında Türkçe karşılığı üzerinden gidecek olursak “Başlık” ifadesidir. Mektup üzerinden gidecek olursak burayı mektup gönderdiğimiz kişiye hitap ettiğimiz kısım olarak düşünebiliriz. Mektup içerisinde, mektubu göndereceğimiz kişiye bir hitap ifadesi kullanmak zorunda değilizdir. Buda SOAP’ da bu ifadenin opsiyonel olarak kullanıldığını ifade eder. Header bilgisi içerisinde mesajın özellikleri, authentication (kimlik doğrulama) gibi ifadeleri yerleştirebiliriz.

Body: Mektup örneğimiz kafamızda güzel bir yer edindiği için buradan devam etmekte fayda görmekteyim. Body kısmını mektubumuzdaki düşüncelerimizin, cümlelerimizin bulunduğu kısım olarak ifade edebiliriz. Aynı zamanda karşı taraftan da bir mektup aldığımızda okuduğumuz kısımdır. SOAP’ da bu kısım istek (request) ve yanıt (response) içermektedir. Bu kısımda veri iletişimi esnasında zorunlu bir kısım olarak yer almaktadır.

Fault: Dilimizdeki karşılığı “Hata” kelimesidir. Bu kısımda ise veri iletişimi esnasında alınacak olan hataları gösterdiğimiz kısımdır. Yine bu kısımda “Header” bölümünde olduğu gibi opsiyoneldir.

SOAP’ın mesaj yapısından bahsettik, şimdi de yukarıda yer verdiğimiz ifadelerin nasıl kullanıldıklarını, bu kullanım esnasında hangi kavramları kullandığını inceleyelim.

Bu görsel örnek bir SOAP mesajının yapısına aittir.

Tanımlamalarda da bahsettiğimiz gibi “Envelope” ifadesi SOAP mesajlarının olmazsa olmaz ifadesidir. Envelope ifadesi mesajımızın tamamını içerisine alan bir elementtir.

· xmlns:soap “namespace” : Bu ifade oluşturulan envelope elementinin hangi namespace ait olduğunu belirtir. Namespace için her zaman kullanılması gereken değer “http://www.w3.org/2003/05/soap-envelope/” ifadesidir. Bu kullanım SOAP versiyon 1.2'e ait olan kullanımdır. SOAP versiyon 1.1' de kullanılacak değer ise http://schemas.xmlsoap.org/soap/envelope/”. Envelope ifadesi tanımlanırken bu url’ler haricinde başka bir url tanımı yapılacak olursa eğer hata ile karşılaşılacaktır.

· Soap:encodingStyle : Envelope ifadesi içerisinde yer alan bu ifade , SOAP mesajı içerisinde kullanılan veri türlerini tanımlamak için kullanılır, “encodingStyle” attribute’nü SOAP mesajı içerisinde herhangi bir elementte görebilirsiniz.

· mustUnderstand: Bu ifade “Header” bilgisinin karşı tarafa iletildiğinde, içinde yer alan verinin işletilip işletilmeyeceğine karar vermektedir, “mustUnderstand” kavramı 0 ya da 1 değerlerini almaktadır. Bir değeri header elementinin tanınması gerektiğini belirtirken, sıfır değeri ise tam aksi durumu ifade eder.

Envelope ve Header elementlerinden sonra sıra Body elementine geldi. Body elementi içerisinde request ve response ifadelerinin yer aldığını bilmekteyiz. Bu iki kavramı örneklerle açıklayacağım.

Yukarıdaki görselde de yer aldığı üzere “GetCategory” isimli bir end-point tanımlanmıştır. Bu end-point’in amacı “Product” (Ürün) olarak verilen değerin kategorisini getirmektir. SOAP ile bunu hedefe istek olarak göndeririz. Bunun karşılığında da aşağıdaki görselde yer alan bir ifadeyle karşılaşırız.

Bu görselde aldığımız yanıtı göstermektedir.

SOAP mesaj yapısına dair ele alacağımız son kavramımız “Fault” kavramıdır. Bu kavrama ait olan dört tane element bulunmaktadır. Bunlar;

·<faultcode>: Hatayı tanımlamak için kullanılan koddur.

·<faultstring>: Hatanın okunabilir bir açıklaması.

·<faultactor>: Hatanın kaynağının ne olduğu hakkında verilen bilgi.

· <detail>: Uygulamalarla alakalı özel hata bilgilerini tutan elementtir.

SOAP protokolü, günümüzde popülaritesini yitirmektedir ancak hâlen de kullanılmaya devam eden bir veri iletişim protokolüdür. Bunun sebepleri de bu protokolün bir çok konuyu kendi bünyesinde barındıracak bir alt yapıya sahip olması ile alakalıdır.

Apinizer’da SOAP

Apinizer SOAP 1.1 ve SOAP 1.2 protokollerini desteklemektedir. SOAP web servislerinin üzerinde güvenlik, veri dönüşümü vb. politikalar tanımlayarak servislerinizin tek bir noktadan performanslı ve kolay bir şekilde yönetilebilmesini sağlamaktadır.

Apinizer — API & Web Servis Yönetim Platformumuz hakkında bilgi almak için tıklayınız.

Diğer yazılarıma erişmek isterseniz XML için burayı, XSD için burayı, XPath için burayı, XSLT için burayı tıklayabilirsiniz. Bir sonraki yazımda görüşmek dileğiyle.

--

--