Yıllardır yazılım dünyasında esneklik ve dağıtık mimari yazılım sistemlerinin gelişmesinde hep duyduğumuz API ve Api Yönetimi kavramlarına gelin birlikte bakalım.

Nedir bu API? Web Servis ile arasındaki fark nedir?

Yazımızın her kesimden okuyucuların da anlayabilmesi için işin biraz tanımsal öğelerine değinmek istiyorum.

Application Programming Interface kelimelerinin baş harflerinden oluşan API teknolojisi, iki yazılım sisteminin birbirleri ile iletişim kurmasına olanak tanıyan bir yazılım teknolojisidir. Bu kavramı okuduğumuzda API’ler ile Web Servis arasındaki ayrımı ayırt etmenin çoğu yeni başlayanlar için zor olacağını tahmin ediyorum. Bu sebeple API tanımının tam olarak anlaşılabilmesi için Web Servis kavramına da biraz değinmek gerekmektedir.

API’ler ve Web Servisleri aynı şey gibi görünür. İki bilgisayarın birbirleriyle internet üzerinden iletişim kurmasının bir yolu. Tam olarak bu şekilde değil. Bir API (Application Programming Interface), tanımlar ve bir uygulamanın başka bir uygulama ile iletişim kurmasına izin veren protokol kümesidir. Genel olarak, API’lar hakkında konuşurken, büyük olasılıkla web API’larından bahsediyoruz. Bu her zaman böyle değildi. API’lar, iki yerel uygulamanın birbiriyle iletişim kurmasını sağlamak için yerel dosyalar aracılığıyla açığa çıkarılabilir. İki uygulama tek bir cihazda iletişim kurduğu için bu bir ağ gerektirmez. Yada benzer şekilde TCP üzerinden haberleşen ve trafiğin hiçbir şekilde web protokolleri ile iletilmediği, network seviyesinde raw data transfer eden API’lar da olabilir.

Web Servisler ile API arasındaki fark da tam burada ortaya çıkmaktadır.

Bir web servisi iki makinenin bir ağ üzerinden birbirleri ile iletişim kurmak için kullandığı bir yöntemdir.

Bilgisayarda çalışan bir web sunucusu diğer bilgisayarlardan gelen istekleri dinler. Başka bir bilgisayardan bir istek alındığında, bir ağ üzerinden web hizmeti istenen kaynakları döndürür. Bu kaynak JSON, XML, HTML dosyası, Resimler, Ses Dosyaları vb. Olabilir.

Bir ağ üzerinden yapılan isteğin gerekliliğine dikkat etmek önemlidir. Telefonunuzda Facebook gibi bir uygulamayı her kullandığınızda ya da hava durumunu her kontrol ettiğinizde API kullanıyorsunuz.

Özetlemek gerekirse:

1)Her Web servisi bir API’dir fakat her API bir web servisi olmak zorunda değildir.

2)Web servisleri,bir API’nin gerçekleştireceği tüm işlemleri gerçekleştiremeyebilir.

3)Bir Web hizmeti sadece üç kullanım şekli kullanır: SOAP, REST ve XML-RPC. API’larda iletişim için bir kısıt bulunmaz.

4)Bir web servisinin her zaman için bir ağ’a ihtiyacı olurken bir API’nin
çalışması için ağ’a ihtiyacı gerekmez, aynı bilgisayar ya da yazılım sistemi içersindeki bileşenler arasında da kullanılabilir.

API Gateway

Aslında API yeni bir kavram değil. Uygulamalar hep kendi aralarında “Programming Interface”ler üzerinden konuştular. Ancak bu uygulamaların birçoğu hemen yandaki sunucuda konuşuyordu ve sistem odasına girdiğimizde fiziksel olarak gördüğümüz kablolar üzerinden haberleşmekteydi. İletişimin hızlanması, maliyetlerin düşmesi ve bulut teknolojilerinin yaygınlaşmasıyla birlikte, artık dünyanın diğer ucunda hizmet veren uygulamalara ait “yetenekler” de farklı uygulamalar tarafından kullanılabilir oldu.

Belki de bunun sonucu olarak, API denince algımız bizi kurum dışına açılan servislere yönlendirdi. Ama unutmamak gerekir ki, dış dünya ile haberleştiğimiz bağlantı noktalarından belki çok daha fazlası uzun süredir iç sistemlerimiz arasında var ve bu API’ların da yönetilmeye ihtiyacı var.

Sonuç olarak elimizde yüzlerce servisimiz var. Hem bu servisleri kurum içerisinde yöneterek yazılım ekipleri arası paylaşıma açmalı hem de bu bilgi birikimimiz üzerine farklı iş fikirleri geliştirilebilmesi için dış dünyadan erişilebilir hale getirmeliyiz. Kurum içi ortak çalışmanın artışı ve kod tekrarının önüne geçilmesi bir yana, bir bakmışız ki farklı bir satış kanalımız oluşmuş.

Tüm bu ihtiyaçlar sonucu API Gateway ürünleri ortaya çıktı. Aslında tarihsel bir süreçte gelişen API ihtiyaçları kendilerini yönetecek Gateway sistemlerinin de evrilmelerini sağladı.

Yazılım sistemlerindeki entegrasyon ve dağıtık mimari elverişliliği kontrolsüz büyüyen bir API ekosistemi oluşturdu. Hem dış entegrasyonlar hemde iç sistemler ile yapılan entegrasyon belki de servis işi olarak 100-200 satırlık bir kod ile yönetilen işi, entegrasyon gereksinimleri için eklenen kod blogları ile yönetilemez, geliştirilemez takip edilemez hallere doğru evriltmeye başlattı.

İlk API gateway gereksinimleri de bu entegrasyon spesifik eklenen kod bloklarının getirdiği karmaşayı yok edebilme hedefiyle ortaya çıktı.

Geçmişin XML hızlandırıcı sistemlerinin sunduğu yetenekler ile zaten servis trafiği bir noktadan yönetilebiliniyordu. Bu ilkel sistemlerin rekabetçiliği ile ürünlerin kazandığı yeni yetenekler önceden developerler tarafından kod seviyesinde çözülen çoğu gereksinimin Api Gateway katmanlarında çözülebilmesini ve servis geliştirme maliyetlerinin azalmasına katkı sağladı. Ayrıca entegrasyon gereksinimlerinden arındırılmş kod blokları ile çalışan geliştiriciler, modern yazılım teknik ve teknolojilerine geçiş süreçlerinde daha çevik davranabilir oldular.

Geçmişin bir sözü vardır: “Çalışan sistemin tozu bile alınmaz.” Bu söz aslında API Yönetimi yapılmayan sistemler için hem geliştiricilerin hemde servis sahiplerinin durumunu çoğu kurumda özetlemektedir. Çünkü servise entegre olan kullanan kişilerin yapılacak değişiklikten ne seviyede etkileneceği ön görülemediği için servislerde bir değişim yapılması uzun analiz süreçlerine ihtiyaç duymaktaydı.

Günümüzde bir Api Gateway sistemi üzerinden geçen servis trafiği için, geliştirici ve servis sahiplerine temelde 6 kategoride fayda sağlamaktadır.

1- Servis için gerekli yetkilendirme ve kimlik denetimi.

Api gateway üzerinden sunulan bir servis hizmeti ile hizmet kullanıcılarının servis erişimleri ve yetkilendirmeleri arka uç sisteminde bir denetim mekanizması olmaksızın Api Gateway sistemleri üzerinde denetlenebilir. Ayrıca birbirinden farklı yetkilendirme erişim denetimi teknikleri ile farklı entegrasyon ihtiyaçlarında servis kopyası oluşturmaya gerek duymaksızın aynı arka uç servis üzerinden farklı yetkilendirme teknikleri ile paylaşılabilmekte. Örneğin, arka uç sisteminizde LDAP üzerinden basic yada windows authentication teknikleri ile erişim denedimi yapılan servis, Gateway üzerinden OAuth yada farklı bir kimlik denetim tekniği ile paylaşılabilir ve bu iki farklı teknik gateway üzerinde birbirlerine köprülenebilir.

2 – Dönüşümler ve Tip kontrolleri

Servis sahipleri için entegrasyonlarda yetkilendirme ve kimlik denetimi kadar önemli bir diğer konu ise farklı entegrasyonları farklı cevap formatlarında bilgi istemeleridir. Örneğin, yapılan entegrasyonlardan birisi SOAP tabanlı iken yeni yapılacak bir entegrasyon RESTFul olabilmektedir. Bu gibi dönüşümler Gateway sistemlerinde otomatik yapılabilmektedir.

Ayrıca kullanıcıdan alınan verilere çalışan servisler için gelen verinin kontrol edilmesi klasik yaklaşımlarda servis geliştiricileri tarafından kod seviyesinde yapılmaktaydı. Gateway sistemleri üzerinden geçen trafikteki veriler üzerinde denetim yaparak, arka uç sisteme iletilmemesi gereken formatta bir veri geldiğinde bunu yakalayıp kullanıcıya doğru formatta veri göndermeleri için hata mesajı üretebilmektedir. Bu özellikleri arka uç sistemlerde gereksiz kaynak tüketecek isteklerin alınmamasını sağlayarak servisin sunulduğu kaynak sisteme cevap alınmayacak isteklerin filitrelenmesini ve sistemin kaynak yönetiminin daha başarılı yapılmasını sağlamaktadır. Örneğin, TCKimlikNo alınan bir parametrede gateway sistemleri bu parametre içinde dönderilen verinin 11 haneli bir integer ve son hanesinin çift rakam olması gibi kontrollerden tutun da REGEX tabanlı veri kontrollerine kadar gerçekleştirebilmektedir. Bu sayede arka uç sistemlere gereksiz istekler iletilmemiş olacaktır. Ayrıca kullanıcılara verilecek cevap üzerindeki veriler üzerinde filitreleme veya hassas verilerin maskelenerek loglanmasını sağlayabilmektedir.

3 – Loglama

Servis sahipleri için bir diğer önemli ihtiyaç ise sahip oldukları servis üzerinden geçen trafik ve servislerine ait audit bilgilerinin loglanmasıdır. Gateway, servisleri üzerinden geçen trafiğe ait hem istek cevap bilgilerinin loglanması, servis erişiminin performans metriklerinin loglanması , servis erişimine ait hataların – audit bilgilerinin loglanması gibi ihtiyaç olan tüm log gereksinimini karşılayabilmektedir. Bu logları hem kendi üzerinde sunabilir hem de bir dış log sistemine aktarabilmektedir.

4 – QoS (Quality of Services)

Gateway sistemleri ile birlikte gelen belki de en önemli özelliklerden biridir. Özellikle dışarıya açık servislerde oluşan düzensiz yükler hizmet kesintisi oluşmasına neden olabilmekte. QoS yeteneği de tam olarak burada devreye giriyor. Sistem ne kadar yük altında olsada Gateway QoS özelliği aktif edilmiş servis için donanım kaynaklarında belirli bir kısmı kullanmaz ve yük altında hizmetin devam edebilmesi için bu ayırdığı kaynağı ilgili servis için kullanır.

5 – Servis Kataloğu

Gateway kavramının oluşmasındaki belkide en temel ihtiyaçlardan biriside kurumların sahip oldukları servisler ve ilgili servislere dair dokümantasyonların kataloglanmasıdır. Günümüzde çoğu kurum yüzlerce servise sahiptir. Gateway, üzerinden paylaşılan servisler için katalog özelliği sunup, kurumun sahip olduğu servis listesine ve dokümantasyonlarına tek bir arayüzden erişebilmesine olanak tanımaktadır.

6 – Servis Güvenliği

İnternete açık servis sahibi kurumlar için belkide gateway sistemlerinin vazgeçilmez ve tercih sebebi özelliği üzerinden paylaşılan servislere ait biline OWASP Top 10 ataklarının tamamına karşı koruyabilmesidir.

Bu ataklar temel yada gelişmiş Ddos saldırıları olabileceği gibi servise iletilen veri içeriği ile yapılan Xss atakları yada Sql injection olabilmektedir.

Özellikle lisanslı gateway yazılımları aldıkları düzenli güvenlik güncellemeleri ile dış dünyaya paylaşılan servislerde hem varolan atak tekniklerine hemde ilerde gelişebilecek yeni atak tekniklerine karşı koruyabilmektedir.

Örneğin bir veritabanı tablosunu servisleştirip dış dünyaya paylaştığınızı düşünelim. Bilinen sql injection tekniklerinde çıkabilecek yeni bir atak tipi bulunduğunda kurumsal lisanslı gateway ürünleri çok hızlı bir şekilde yeni atak tekniklerine karşı güvenlik güncellemesi çıkartıp servisin güvenliğinin devam etmesini sağlayabilmektedir.

Bu zamana kadar anlattığımız özellikler ile API Gateway sistemleri hakkında genelleme yapacak olursak kurum için aşağıdaki faydaları sağlayabilmektedir.

  • Geliştirme maliyetlerini azaltır.
  • Servis kopyası oluşturma gereksinimi ortadan kaldırır.
  • Veri kontrol mekanizmaları ile arka uç sistemlere gereksiz yük iletilmesinin önüne geçer.
  • Kurum içi servis iletişimindeki karmaşayı ortadan kaldırır.
  • Merkezi bir denetim noktası oluşturur.
  • Merkezi bir loglama noktası oluşturur.
  • Servis güvenliğini sağlar.
  • Modern yazılım teknolojilerine adaptasyon süreçlerini çevikleştirir.