WCF ve ASP.NET WEB API

Bulut teknolojileri (VMs, Databases – Storages); çözüm geliştirme stratejilerine farklı bakış açıları getirerek üç ana unsurda maliyet (cost) – performans (performance) – sürdürülebilirlik (maintainability) ve uygun stratejinin uygulanması hususlarını yerine getirmek amacıyla gelişmeye – evrime devam etmektedir.

Bugün Microsoft Azure, Amazon Web Services, Digital Ocean ve RackSpace gibi önde gelen bulut platformu sağlayıcılarının Software as a Service (SAAS) ve Platform as a Service (PAAS) veya Infrastructure as a Service(IAAS) şeklinde çıkardıkları servis - hizmetlerin bir çoğunda RESTful APIs ve SDKs kullanılıp – yaygınlaştığını görüyoruz. Özellikle servislerin farklı tipte işletim sistemleri, telefonlar ve cihazlar ile uyumlu çalışabilmesi amacıyla geliştirmenin odak noktası – mimari - modeller ve katmanların tekilleştirilebilmesinde APIs (Application Programing Interfaces) ve RESTful servislerin rolü her geçen gün artmaktadır.

O halde; geliştirilecek olan servis odaklı projelerimizde WCF veya ASP.NET Web API’ nin hangi şartlarda nerede, nezaman ve niçin tercih edilmesi gerektiği hususuna cevap arayamaya başlayalım. Çözüm için en uygun olan teknolojiye ulaşmaya çalışalım, teknolojiden çözümü üretmeye çalışmadan!

15.09.2011 tarih ve "Building Web APIs in Windows Azure with WCF to reach any device" konulu BUILD oturuma kadar gidelim. Azure kullanılarak WCF Web APIs (o yıllar adı bu şekilde) ile herhangi bir cihaz ile iletişimden bahsediliyor. Aynı yıl Eylül ayında yapılan 6. Preview den sonra Şubat 2012 de WCF Web API yerini ASP.NET Web API’ye bırakıyor. Bağlantıda ki tanım ve açıklamaları incelediğimizde bu değişikliğin sebeplerini, bundan sonra izlenecek olan yol haritasını kestirebiliyoruz. İşte tam bu noktada yapacağımız seçime somut etkileri iyi analiz etmek gerekiyor.

Microsoft için ASP.NET Web API ve WCF farklı anahtar kelimeler ile tanımlanmış! Web API is RESTful services and WCF is for “existing investments”. Bir blog yazısında; bu tanımlama üzerinden 5 başlık üretiliyor.

1.Client Interoperability:

Web API hafifsiklet, sade, RESTful servis odaklı ve her hangi bir uygulamadan HTTP temelli çağrıları manipüle eden bir yapıya sahip. Bu yapı onu kolay, anlaşılır kılıyor. WCF SOAP temelli yapısı öncelikle istemcinin WSDL i anlamasını zorunlu kılıyor bu da farklı tipte ayar ve kavrama sürecini doğuruyor. Bu sebeple kolaylıkla bir çok cihaz, programlama dili ve kütüphane ile uygun kullanımda değil.

2.Coding Overhead:

İstemci tarafında RESTful servis çağrıları yapmak çok kolay ancak kaynak URLs ve veri - model işlenmesi (serialize - deserialize) tamamen kodlamaya dayalı. SOAP ve WSDL basit bir şekilde nesneleri ve operasyonları istemci tarafında özetlemenizi sağlıyor. WCF ağır konfigürasyon gerektirdiği gibi custom implementler için yine XML in doğru ayarlanmış olması şart. Web API aksine daha geniş – standard bir yapıda; ihtiyaç duyulduğunda custom ve genişletilebilir servisler, media type formatters ile veriyi istenilen şekilde işlemeyi başarabiliyor.

3.Speed/Bandwidth:

Konu mobil olduğunda malum internet paket kullanımlarımın önemi özellikle ülkemiz kullanıcıları için büyük önem taşımakta. RESTful servisler temel olarak HTTP protokolünü kullanır ve genelde paket boyutu SOAP request/response yükünden (payload) daha az olur. WCF bu noktada da custom edilebilir ancak o halde standart implementasyonun dışına çıkılmış olunacaktır.

4.Functionality/Purpose:

SOAP servisler için action-driven, REST/OData servisler için ise resource-driven prensiplerine sadık olunması gerektiği vurgulanmaktadır. Bir SOAP servis çağrısı sistematik olarak birden fazla REST çağrısını bünyesine katıp tek bir işlem üzerinden birçok kaynak üzerinde değişiklik meydana getirebilir. Örneğin; bir ürün sipariş süreci sırasıyla

Sipariş Ver
Stoktan ürünü düş
Yeni bir teslimat çıkar
Müşteri bilgi – ürün havuzunu güncelle

Tüm bu işlemler farklı kaynaklara dair süreçleri yerine getiriyor olmalarına karşın tek bir metod ile (POST) PurchaseOrder etkileşime girmektedir. RESTful servisler ise basit ve atomik seviyede tüm iş parçacıklarını ayrıca işleyebilmelidir.

5.Security:

WCF ve Web API benzer standartlarda güvenlik implemantasyonlarını kabul etmektedirler. Web API Security esnek ve geniş harici yetkilendirme dinamiklerini kullanabilmektedir. Başlıbaşına bir konu olan güvenliğin proje düzeyi ile ele alınarak isabetli seçimin yapılmış olması gerekmektedir. Gelecek yazılarımızda güvenlik konusunu daha detaylı inceliyor olacağız!

SONUÇ:

Maalesef biri diğerinden üstündür diyebilmek mümkün değil zaten böyle bir amacımız da yok! Ancak doğru karar verebilmek için makul yollar bulunmaktadır. Blog yazarının ve benim de katıldığım öneri ise; “Eğer internal/intranet servis olacak ise WCF, external/Internet servis söz konusu ise Web API” kullanılmasının uygun olacağı yönünde. Günümüz mobile ve bulut teknolojileri hatta yeni bir kavram olarak ortaya çıkan Internet of Things (Şeylerin interneti) kavramlarını destekleyebilen ortak - standart bir protokol HTTP ve RESTful yapının hakimiyeti göz önünde bulundurulmalıdır.

Sürece Microsoft tarafından oluşturulan değerlendirme tablosuyla devam edelim

Uygulama geliştirme sürecini göz önüne aldığımızda, tüm veri tabanı işlemlerinin veya farklı katmanlar tarafından yerine getirilen süreçlerin her halde tek bir noktadan yönetilebilir ve bir çok farklı istemci tipi (browsers, phones, tablest vb.) tarafından işlenebilir olması büyük önem taşımaktadır. Her bir platform tipi için servis, mimari anlamda değişiklik ve bunların yönetimlerinin kaynak kaybına ve beraberinde aksaklıklara yol açması kaçınılmaz olacaktır.