Servis kavramının, teknolojik olarak çeşitlenmesi ve gelişmesi ile yeni kavramların hayatımıza girmesi, ya da daha çok karşımıza çıkıyor olması bazı karmaşıklıklara yol açıyor gibi. Son zamanlarda gördüğüm, duyduğum ve yaşadığım en büyük karmaşıklık WCF(Windows Communication Foundation) ve ASP.NET Web API‘ın karşılaştırılması. WCF’in kullanımına göre, belki bir noktada ASP.NET Web API ile karşılaştırılabilir ama genel çerçevede ikisi de farklı sepette olan elma ve armut…Haa ikisi de meyve, o ayrı 😀
En basitinden WCF, servis odaklı uygulamalar geliştirmek için kullanılan bir geliştirme platformu ya da modeli. ASP.NET Web API ise HTTP, üzerinden RESTful servisler geliştirmek için kullanılan bir framework. Buradaki tek ortak nokta ikisinin de belli amaçlar doğrultusunda servis yaratmak için kullanılması.
ASP.NET Web API’den önce WCF’de de RESTful servisler geliştirmek mümkündü. ASP.NET Web API, WCF Web API’nin geliştirilmiş ve dönüştürülmüş hali. Bu dönüşümün sebebinin RESTful servislerinin, WCF’in ağır konfigürasyon alt yapısına gerek duymaması ve ASP.NET MVC modelinin, Web API kavramına daha yakın olması olarak söyleyebilirim.
WCF ile geliştirilen servisler, SOAP spesifikasyonu ile HTTP,TCP,MSMQ gibi transfer protokolleri üzerinden sunulmaktadır. ASP.NET Web API ise HTTP transfer protokolü üzerinden servisler sunmak içindir. Bu tip servislere RESTful servisler deniyor.Internet Media Type olarak adlandırılan veri formatları bu servislerin çıktılarıdır. JSON bunların en çok kullanılan ve en çok bilineni. Bunun dışında XML de olabilir tabi ki.
Genelde ikisinin tercih edilme sebebi, servisi kullanacak client’ların SOAP’ı yorumlayabilme ve yorumlama şekli oluyor. SOAP’ın, browser’lar tarafından direkt olarak yorumlanaması, web uygulamalarında RESTful servislerin biraz daha popüler olmasında önemli bir nokta desem çok da yanılmam sanırım. Client olarak nitelendirilebilecek browser’lar, üzerinde çalışan javascript kütüphanelerinin ve framework’lerinin RESTful servisleri kullanım kolaylığı, geliştirme kolaylığ ile de birleşince RESTful servisler doğal olarak daha çok tercih ediliyor.
WCF üzerinden sunulan servisler, WS-* standartlarına uygun olup, ekstra Transaction, Reliable Messaging Model gibi biraz daha yönetilebilir alt yapılara sahip olurlar. ASP.NET Web API ile geliştirilmiş bir RESTful serviste bunlar pek mümkün değildir. Ayrıca RESTful servisler stateless’dır. State’lerin(durumların) hep taşınmasına yönelik bir yaklaşımı vardır. REST’deki ST’de zaten State Transefer buna denk geliyor… 😀
WCF servisi mi ya da ASP.NET Web API ile RESTful servisi mi geliştirim kararı, tamamen ihtiyaca göre verilen bir karar olmalı. ASP.NET Web API ya da RESTful servisler, WCF’den daha iyi ya da onun yerini alacak kavramlar değil. WCF ya da ASP.NET Web API tercihi, servisi kullanacak client’a ve servisin sunulacağı yönteme göre verilmelidir. Aman diyim…
Tabi ki performans, güvenlik falan gibi kalite özelliklerini de ihtiyaca göre dikkate alıp, bu tercih anlamlandırılmalıdır. Mesela RESTful servisler, HTTP’yi kullandığı için request ve response paketleri SOAP paketlerine göre daha küçüktür. Bu yüzden düşük bandwidth durumlarında, mesela mobil, WCF servislerine göre tercih edilebilir. Güvenlik olarak ikisinin de standartlaşmış ve güvenilir alt yapıları ya da desteklediği yaklaşımlar vardır. RESTful servislerde Token Auhtentication ve OAuth gibi yapılar kullanılabilirken, WCF servislerinde de WS-I standartlarına göre güvenlik önlemleri alınabilir. Servis geliştirme açısından ikisi de oldukça kolay. Ancak bu servisleri kullanmak için geliştireceğiniz client’larda RESTful servisler için biraz daha çaba sarf etmek gerekebilir.
Kısaca ve basitçe WCF ve ASP.NET Web API kavramları arasındaki farkları ve ne olduklarını özetlemeye çalıştım. Umarım bazı şeylerin netleşmesinde yardımcı olabilmişimdir…