Web API, Servisler (Service) ve Mimariler (Architecture)

Web’e dair anlayışımız ve ihtiyaçlar, mümkün olan her yolla daha verimli sistemler oluşturmak için daha iyi yollar geliştirmemizi sağlamakta.

AA

REST ve RESTful ile başlayan ve esasında web geliştirme yazı serisinin bir parçası olan kavramlara, birbirleriyle ilişki haline olan bir kaç başlığı bir yazıda toplayarak devam ediyorum. Bu yazıda birbirlerine alternatif ve/veya birbirlerini tamamlayan API ve genel olarak mimariler özelinde ilerleyeceğim. Amacım, bu terimler çerçevesinde benim gibi temel bir fikriniz olabilmesini sağlamak. İleri okumalar, örnekler ve daha detaylı açıklamalar için kaynakça bölümüne ayrıca göz atmanızı öneririm. Yazının derlenmesi sürecinde birbiriyle çelişen veya farklı teknoloji, prensip ve ortamlara da referanslara da denk geldiğim için mümkün olduğunca bağlamı sınırlı tutmaya çalıştım. Bu anlamda, ekleme ya da düzenlenme gereken bir ifade var ise yorum olarak belirtmeniz yeterli. O halde, başlayalım.

WCF (Windows Communication Foundation)

WCF (Windows Communication Foundation), servis-yönelimli mimariyi (SOA) temel alarak dağıtık-uygulamalar geliştirmek için kullanılan, dağıtık mimari modelleri ve teknolojileri tek çatı altında birleştiren ve içerisinde bir çok hazır bileşen barındıran bir framework API’si / API topluluğudur. Microsoft tarafından Web Service’a alternatif olarak öne çıkarılmıştır.

Microsoft gereksinimler doğrultusunda, dağınık mimari yaklaşımı ile “XML Web servisleri”, “COM+”, “.NET remoting”, “MSMQ” gibi pek çok sistem geliştirmiş, bu servislerin iyi özelliklerini ise “WCF”de toplamıştır.

WCF mimarisi, istemciler ve servisler arasındaki mesajları göndermek için oluşturulan sistemleri geliştirmek için kullanılır. Bu mesajlar TCP, HTTP, MSMQ, Web Servisleri vb. gibi ortak taşıma protokolleri kullanarak Intranet ve Internet üzerinden gönderilebilir. .NET Remoting, XML Web Servisleri, Web Service Enhancements (WSE), Enterprise Services/COM+ ve Microsoft Message Queue (MSMQ) gibi bir çok dağıtık uygulama geliştirme modelinin tek bir programlama modeli içerisinde geliştiriciye sunmaktadır.

WCF’nin SOAP (Simple Object Access Protocol) tabalı servisler geliştirmek için kurulduğunu söyleyebiliriz. SOAP, veri açıklaması ve veri aktarımı için XML ve HTTP kullanan bir Web protokolüdür. HTTP üzerinden XML şeması kullanan SOAP REST ile kıyaslandığında daha yavaş ve kısıtlayıcı olabilmekte.

  • Web Service veri açıklama ve veri aktarımı için XML ve HTTP kullanırken, WCF SOAP/XML kullanır.
  • WCF, Microsoft tarafından daha verimli ve etkili Web Service alternatifi olarak nitelendirilmektedir.

NET 3.5 ile SOA kullanılmaktadır. Esasında, ilk başta OOP-Object Oriented Programming yapılmakta iken, daha sonra bileşen yönelimli programlamalar ve son olarak da SOA dahil edilmişyit. “WCF” SOA’yı etkin bir şekilde kullanmaktadır. WCF SOA’nın yanı sıra platform bağımsızdır. Bu sayede, herhangi bir işletim sistemindeki programlar farklı ortamlarda çalışabilir hale gelir.

Service-Oriented Architecture (SOA)

Service-Oriented Architecture (SOA), gevşek bağlı (loosely coupled), iri taneli(coarse grained) ve özerk (autonoums) yapıda, bileşenlere dayalı dağıtık sistemlerin geliştirilmesi için kullanılan bir mimari / yazılım tasarım stilidir. Application bileşenleri diğer bileşenlere network üzerinden bir iletişim protokolü aracılığıyla ulaşır. Servis odaklı mimari’de vendor’lar, ürünler ve teknolojiler bağımsızdır.

SOA içerisinde iki ana rol vardır:

  • Service provider, servisin ve diğer erişimler için bir veya daha fazla servisin kullanılabilir olmasını ve organizasyonunu sağlar.
  • Service consumer, servis metadaya’larını kayıt defterine (registry) konumlandırır (locate) ve servisi entegre etmek / kullanmak için gereken istemci bileşenlerini geliştirir.

API, WEB API ve WEB Service

API (Application Programming Interface) ile ilgili daha öncesinde bir detay yazısı yayınlamış ve API tanımını, “bir uygulamanın/servisinplatformun sahip olduğu yeteneklerin, dışarıdan ve izin verilen sınırlandırmalar dahilinde kullanılabilmesini sağlayan bir arayüzdür” şeklinde yapmıştık. Dolayısıyla, bu tanım çerçevesinde API’nin genel bir bağlam içerdiğini söyleyebiliriz.

API ve Web Service

API ve Web Service bir iletişim aracı olarak kullanılır. Bir API’nin her zaman web tabanlı olması gerekmez. API, etkileşim için izlenmesi gereken kurallara uymalıdır. Web Service bu tür kuralların tamamına uymak zorunda değildir.

  • Web Service bir API’dir ancak her API bir Web Service değildir.
  • Web Service, bir API’nin gerçekleştirmesi gereken operasyonları gerçekleştirmeyebilir.
  • Web Service SOAP, REST, XML-RPC stillerini kullanır.
  • Web Service işleyişi için her zaman bir ağa ihtiyaç vardır. API’nin böyle bir zorunluluğu yoktur.

Ayrıca,

  • Web Service, W3C tarafından tanımlanan standart çerçevesinde, XML temellidir. Genel olarak makinenin makineyle iletişimi sağlarlar.
  • WEB API, REST servisleri oluşturmak için kullanılabilir. WCF düzeyinde herhangi bir yapılandırma gerektirmez.
  • WEB API input XML/JSON ya da plain data, output JSON/XML olabilir.

WEB API, Web Service ve WCF’e kıyasla daha basit ve esnek bir özellik yapıdadır. XML dahil pek çok biçimde cevap dönebilir. Diğer yandan, WCF çift yönlü (duplex) iletişim, uçtan uca (end-to-end) mesaj güvenliği, tek yönlü mesajlaşma, dağıtılmış işlemler (distributed transaction) gibi durumlar için en uygun seçenektir. WEB API ise HTTP/RESTful kullanarak resource-oriented servisler oluşturmak için tercih edilebilir. MVC tabanlı uygulamalarla iyi çalışır.

Günümüzde, sunulan esneklik ve pratiklik sebebiyle web projelerinde WEB API / REST’e doğru bir geçiş olduğu söylenebilir.

Microservice Architecture

Microservices (Mikroservisler) veya Microservice Architecture (Mikroservis Mimarisi), birlikte çalışan küçük ve birbirinden bağımsız servislerdir. Yazılımın modülerleşmesinde yeni bir yaklaşımı / yazılım geliştirme mimarisidir. Çok daha büyük bir uygulama içinde bir görevi gerçekleştirmek için birbirleriyle iletişim kurabilirler. Bir Web Service herhangi bir işletim sistemine veya programlama diline bağlı değildir ve standart bir XML mesajlaşma sistemi kullanır. Oluşturulan servislerden birindeki bir değişiklik ya da hata diğer servisleri etkilemez.

Martin Fowler ve James Lewis, microservice mimarisini şu şekilde tanımlamaktadır1: “…microservice mimari stili, her biri kendi sürecinde çalışan ve genellikle HTTP resource API gibi bir yapı ile iletişim kuran, bünyesinde bir dizi küçük servisi ifade eden bir uygulama geliştirme yaklaşımıdır. Bu servisler, işletme yetenekleri etrafında inşa edilmiştir ve bağımsız olarak yürütülebilir, deploy edilebilir ve yönetilebilir. Farklı programlama dillerinde yazılabilen ve farklı veri depolama teknolojilerini kullanan bu hizmetlerin minimum düzeyde merkezi yönetimi vardır.

Hem Microservice’ler, hem de Web Service’ler yazılım uygulamaları oluşturmak ve deploy etmek için kullanılan uygulama geliştirme mimarileridir. Ancak, geliştirme stilleri farklıdır. Microservice’ler ilişkili modüller topluluğu olarak yapılandırılmış bir geliştirme mimarisidir. Basitleştirilmiş bir Servis Odaklı Mimari (SOA) olarak da nitelendirilebilir. Web Service’ler ise ağ üzerinden erişilebilen, bir uygulamanın başka uygulamanın fonksiyonlarına erişmesini sağlayan bir arayüzdür. Bir Web Service, HTTP, XML, SMTP veya Jabber gibi protokollerin bir kombinasyonunu kullanarak ağ üzerinden erişilir. Microservice’ler bir Web Service’e dahil edilebilir. Ancak, Microservice’ler kendi veritabanlarına sahip bağımsız bir fonksiyon olarak uygulanan ve birbirlerinden bağımsız olarak dağıtılabilen, farklı teknolojilere sahip herhangi bir servis olabilir.

Bir Web Service, uygulama kodunun nasıl çağrıldığına dair platform ve programlama diline özgü ayrıntıları ayıran bir soyutlama katmanı olarak işlev görür. Bu, HTTP aracılığıyla işleyen bir API temsilidir. Bir uygulama tarafından, World Wide Web üzerinden erişilebilen, uygulamalar arasında XML mesajları ileten başka bir uygulama servisidir.

Monolith ve Microservice Mimarisi

Monolith Architecture

Tüm özellikleri ve fonksiyonları barındıran tek bir ana yapıdan oluşan, geniş ölçekli uygulamalardır.

Microservice’lerle kıyaslandığında;

  • Uygulama boyutu yüksektir,
  • Release döngüsü uzundur,
  • Debugging problemleri ve test süreçleri oldukça sancılıdır,
  • Geniş bir geliştirici ekibine ihtiyaç duyulur,
  • Herhangi bir problem ve/veya değişiklikte uygulama ve uygulama tarafından sunulan servis erişilmez olur.

Microservice’ler yukarıdaki süreçlere yönelik sağladıkları kolaylığın yanı sıra farklı teknolojileri barındırabilirler. Bağımsız ve kendi yeterlilikleri sebebiyle pek çok uygulama içerisinde (pipes, UNIX sockets, mesajlaşma, e-posta vb.) yer edinebilirler. Bir Microservice tek bir şeyi olabildiğince iyi ve sorunuz yapar. Ancak, servis sayısı arttıkça orkestrasyon süreci kontrolden çıkabilmektedir. İşte bu noktada DevOps kavramı devreye girmektedir. Microservice RESTful olmak zorunda değildir, hatta veritabanına ve/veya API’e de sahip olma zorunluluğu yoktur. Bir Web Service Microservice olabilir, ancak bir Microservice Web Service olmak zorunda değildir. Özetlemek gerekirse, Microservice’leri birbirleriyle konuşan mini uygulamalar olarak ifade edilebilir. Web Service’ler de mini uygulamalardır, ancak network üzerinden ve tanımlanmış formatla haberleşme işlemini gerçekleştirirler.

Difference Between
Quora
Scalyr

Diğer