RESTFUL ve SOAP web servisleri

RESTFUL ve SOAP web servisleri

26 Şubat 2016 0 Yazar: Cem Kefeli

Müşterilere sunulan her bir servisin teknolojik karşılığı olan iş yapan uygulama parçacıklarını da birer servis olarak düşünme fikri hayatımızda daha da yer edinmeye başladıkça artık mimari yapılar da buna göre şekillenmeye başlıyor. Servis temelli mimari yaklışım ile ilgili bahsettiğim konsepti anlatan bir yazıma buradaki linkten (Service Oriented Architecture – SOA) ulaşabilirsiniz.

Bu yazının konusu olan RESTFUL ve SOAP web servisler de servis temelli yaklaşıma hizmet eden çok gözde ve üzerinde yoğunlaşılan yapılar. Her ikisinin de temelde hedefleri aynı. Kendisini çağıran kişinin isteğine uygun işi yapmak, ve yine kendisini çağıran kişiye bir cevap dönmek. İşte bu aşamada ikisi arasındaki farktan söz etmeye başlayabiliriz artık, çünkü birbirinden farklı şekilde cevaplar dönüyor bu iki servis yapısı. Ve tabiki birbirinden farklı şekillerde kabul ediyorlar istekleri.

REST (Representational State Transfer), RESTFUL web servislerin sahip olduğu mimariye verilen isimdir. Yani aslına bakacak olursak SOAP (Simple Object Access Protocol) kavramına illaki bir denklik düşünmek istersek bu denkliğin adı REST değil de RESTFUL olmalıdır. Çünkü REST mimari ile ilgili bir kavram, RESTFULL ise REST mimarisine uygun servisler gibi düşünülmelidir.

RESTFUL servisler HTTP protokolü üzerinden konuşurlar ve SOAP servislere göre daha hızlıdırlar. Yapıları daha hafif ve basittir. Zaten de en cazip yönleri bu servislerin sahip olduğu hafif ve kolay kullanılabilir özellikleridir. Çıktılarını XML ya da JSON olarak istemciye ulaştırırlar. Genel olarak bant genişliği yönünden de avantajlıdırlar çünkü istemciye dönen cevap içerisinde yalnızca içerik ile ilgili tag’lar bulunur, yapı ile ilgili tag’lar bulunmaz. REST stateless’dır, durum bilgisi barındırmadığı için de HTTP header’larda ilave bir bilgi taşınmaz. 

SOAP servislerdeki gibi kendilerini çağıracak istemcilere nasıl çağırılması gerektiğini tanımlayan bir yapıya sahip değildirler. Pratik örnek verecek olursak SAOP web servislerdeki WSDL (Web Services Description Language) kavramı burada karşımıza çıkmaz. Bununla birlikte RESTFUL servislerde istemciler nasıl sorgu yapacağını, neyi nasıl göndereceğini ve dönen cevabı da nasıl değerlendireceğini, ne beklediğini de kendileri biliyor olmalıdır.

REST vs SOAP
REST vs SOAP

SAOP servisler yapıları içerisinde güvenlik yöntemlerini entegre olarak barındırabilirler. Yani servisler bazı güvenlik filtrelerinden geçirilerek yetkili kişilere ulaştırılır. RESTFUL servisler için ise böyle bir güvenlik yapısı söz konusu değildir. RESTFUL servisin kullanımı bir URL’e HTTP metodlarıyla (GET, POST, PUT, DELETE) gönderilen istekten ibarettir. Genellikle güvenlik mekanizması sık kullanılan bir yöntem olan token’lar üzerinden yürür. Basit bir şekilde düşünecek olursak, servise istek yapacak olan istemci ilk önce bir yetkilendirme servisine kendisine ait geçerli verilerle giderek bu servisten bir token alır. Bundan sonrası için ise asıl iş yapacak servise her gittiğinde bu token ile birlikte gider ve token süresi dolana kadar servisi kulllanma hakkına sahip olur.

Sağdaki şekilde yazı boyunca anlatılanları göstermeye çalışan bir referans şekil bulunuyor. REST ve SOAP konulu birçok referans yazıda karşınıza çıkabilir. ‘SAOP’a çok mu haksızlık yapılmış bu gösterimle? Çok mu karmaşık gösterilmiş?’ diye soracak olursanız, benim cevabım ne evet ne de hayır olacaktır. Çünkü burada sorulması gereken asıl sorunun ‘Hangisi daha iyi?’ den ziyade ‘İhtiyaç ne?’ olması gerektiğini düşünüyorum. Her ikisinin de kendisine göre artıları ve eksileri mevcut. Bu şekli de bu şekilde değerlendirmek daha anlamlı olur diye düşünüyorum. Uygulamadan uygulamaya, servisten servise ihtiyaç neyse ona göre birisini seçip o yönde ilerlemek bence daha anlamlı olacaktır.