API yazılım içerisindeki karmaşıklığı, yazılım geliştiricilerinden gizleyen, kodların mimariyi bozmadan düzenlenmesini ve bileşenlerin yeniden kullanılabilir hale gelerek kullanılan sistemler ile doğru bir şekilde iletişime geçmesini sağlayan bir teknolojidir. Bir programın sunduğu hizmeti veya hizmetlerin bir kısmını, başka bir program üzerinde çalıştırabilmek için API servisleri kullanılır. Bu durumda, programcıya belirli görevleri yerine getirebilmesi için sunulan bir dizi hizmet olarak tanımlanır. API kullanımı sayesinde yazılım geliştirme süreçleri hızlanmıştır ve sıfırdan bir yazılımı geliştirmek daha kolay bir hal almıştır. Ek olarak API otomasyon imkânı sunar, süreçleri hızlandırmayı, programlanabilirliğini sağlar.


API, yazılımlar ve donanımlar arasındaki iletişimi sağlar. Ayrıca kullanıcılar ve sunucular arasındaki iletişimi sağladığı için internet üzerinden erişim sağlanabilen tüm uygulamalarda API başrolde yer alır. İnternet üzerinden kullanılan uygulamalarda, kullanıcıların talepleri sunucuya API aracılığı ile aktarılır. Sunucu tarafından alınan talepler yerine getirilebilmek üzere kaynaklara başvurulur. Kaynaklardan gelen ve elde edilen sonuç API aracılığı ile sunucu tarafından kullanıcıya yanıt olarak iletilir. Böylece kullanıcı, uygulamadan reaksiyon alır. Ek olarak, API kullanımı kullanıcılara bir güvenlik avantajı sağlar. Tüm verilerin uygulamaya ait ortak sunucu ile paylaşılması yerine sadece kullanıcı talebi API aracılığı ile sunucuya iletilir.
En temel düzeyde API, bir uygulamanın veya hizmetin, başka bir uygulama veya hizmet içindeki bir kaynağa erişmesine olanak tanıyan teknolojidir. Oluşturulan bir API, uygulaman ın çalışması için belirli protokolleri yerine getirir. Örneğin bir ekrana görüntü vermesi için oluşturulan API, kullanıcı, üretici veya ürün fark etmeksizin tüm donanımlarda aynı işlevde çalışır. Hangi ürünle çalışılırsa çalışılsın, kullanılan API tüm ekranlara görüntü verilmesini sağlar. Böylece sıfırdan bir yazılımın oluşturulmasının önüne geçer. Özel verilere erişim hakkı veya API yönetimi için tek tip kullanıcı bulunabilir bu sebeple kullanıcıların kullanıcı adı ve parola ile erişim yetkisi bulunur. API tarafından sağlanan hizmetlerde, talebe göre alınan sonuçlar filtrelenebilir, listelenebilir veya belirli bir düzene göre sıralanabilir. İşlemler ve sonuçlar kayıt altında tutulabilir, alınan sonuçlar için doğrulama talepleri iletilebilir veya trafiğin durumuna bağlı olarak yüksek trafik alan API için gelen sorgular önbelleğe yazılarak sıraya alınır.
Sanallaştırma bir sistem modeli iken, API soyut bir uygulama kontrol mekanizmasıdır. Örneğin OpenFlow protokolü, SDN cihazları, ağ yönetim sistemleri ve ağ analizi gerçekleştiren uygulamalar tarafından belirli API çeşitleri kullanılır. Sanallaştırma, mevcut fiziksel sistem açıklamalarının mantıksal bir ortamda yeniden kullanılmasını sağlar. API ise fiziksel veya mantıksal sistemlere bağlı uygulamalarda, ölçeklendirme sağlayarak eksiksiz kaynak soyutlamasına olanak tanır. Bu aşamada mutlaka bir sanallaştırma kullanmak gereklidir. Böylece yazılım tanımlı ağlarda (SDN) , ağ katmanında oluşabilecek olan performans kayıpları azaltılır ve paket yönlendirmede yaşanabilecek paket kayıpları sıfıra indirgenir. Ağ ne kadar geniş bir şekilde programlanabilirse gerçekleşen iletim o kadar verimli ve sağlıklı gerçekleştirilir. SDN için API yönetiminde, Northbound ve Southbound olarak iki ana bileşen bulunur. Southbound API çeşitleri ile merkezi kontrolcü veri düzlemini programlayabilmek için ağ cihazları ile iletişim kurabilmeyi sağlar. Northbound API çeşitleri ile de merkezi noktada konumlanan kontrolcü, uç noktada bulunan cihaza erişerek iletim hakkında bilgi almak veya konfigürasyon yapabilmeyi sağlar. Böylece görev tanımı belli API çeşitleri ile hem iş yükü azaltılır hem de yüksek performans elde edilmiş olunur.

Eğer API günümüzde yaygın olarak kullanılıyor olmasaydı her cihaz için özel yazılım geliştirmek gerekecekti. Böylece API, modüler yapıda bulunan ve uygulama bazlı çalışan bir yazılım parçası olarak düşünülebilir. Ancak günümüzde kullanılan API modelleri, bir yazılımın parçası olarak değil bir ürün veya hizmet olarak değerlendirilir. Çünkü API, belirli kitlelerin kullanması için tasarlanır, dokümante edilir ve belirli beklentileri karşılayabilecek şekilde biçimlendirilir. Örneğin bir API modeli yalnızca Sistem Uzmanları veya Mobil Uygulama Geliştiricileri için oluşturulabilir. Böylece daha standart ve disiplinli bir hizmet sunulması hedeflenir. Kullanım alanları arasında yazılım kütüphaneleri, internet tabanlı uygulamalar, IoT cihazları, ağ donanımları, işletim sistemleri ve farklı veritabanları yer alır. Bu sebeple kullanılacağı alana ve sunacağı hizmete bağlı olarak birden fazla çeşitte API mevcuttur. Bunlar;
- Open (Public) API: Minimum kısıtlama ile sunulan hizmet, geliştiriciler ve diğer kullanıcılar dahil olmak üzere herkesin kullanımına açıktır. Kullanım alanı, kullanıcıların belirli veri veya hizmete erişebilmesini sağlamaktır. Open yapı sayesinde yazılım programı evrensel erişime sahip olur. Dünyanın herhangi bir yerindeki yazılım geliştirici, Open API’ye erişerek istediği entegrasyonu gerçekleştirebilir. Böylece günlük operasyonlarında belirli yazılımları kullanan şirketler bu yazılımları kendi sistemlerine kolaylıkla entegre edebilirler. Ayrıca yazılım geliştiriciler daha az kodlama yaparak API özelliklerinden faydalanır.
- Internal API: Harici kullanıcılardan gizlenir ve yalnızca dahili sistemler tarafından görüntülenen, kullanılan API çeşididir. Internal API, şirket dışındaki tüketim için değil, şirket içerisinde daha iyi üretkenlik sağlamak ve şirket içerisinde kullanılan hizmetlerin daha verimli çalışması için geliştirme ekiplerinde kullanılmak üzere tasarlanmıştır.
- Partner API: Sadece yazılım geliştirici veya API’yi oluşturan şirket tarafından kullanılan API çeşididir. Kullanım ve geliştirme herkese açık değildir, ayrıca bu tür API’lara erişmek için özel yetkilere ihtiyaç vardır. Yani private API’ye dışarıdan bir müdahale yapmak mümkün değildir. Uygulama arayüzünü oluşturan, geliştiren ve sadece işletme sınırlarının ötesinde API ile iletişim kurabilmek için tasarlanmıştır.
- Composite API: Birden çok veri veya hizmet API’sini birleştiren API çeşididir. Bir API oluşturma aracının API düzenleme yetenekleri kullanılarak oluşturulurlar. Geliştiricilerin tek bir aramada birkaç uç noktaya veya birden fazla uygulamaya aynı anda erişmesine izin verir.
- Remote API: Bir iletişim ağı aracılığı ile etkileşim kurulacak şekilde tasarlanan API çeşididir. Talepte bulunan kullanıcının erişmek istediği sunucunun, kullanıcı ile aynı ortamda bulunmadığı durumlarda kullanılır. En yaygın kullanılan iletişim ağı internet olduğundan çoğu API web standartlarına göre tasarlanmıştır. Tüm Remote API’lar web API değildir, ancak web API’ların hepsi Remote API çeşidine aittir.
- Soap API: SOAP kural seti, web servisine bağlı çalışan isteklerde RPC (Remote Procedure Call) modelini kullanan, istemci/sunucu mantığına dayalı bir API çeşididir. Sürecin tamamı XML olarak ve HTTP ile iletilir. XML yapısı sebebiyle REST’e kıyasla daha katı standartlara sahip olduğu için pek tercih edilmez. SOAP için ilk kurgu Rest API yapısına kıyasla daha zordur ancak bir defa yapılandırdıktan sonra sorunsuz bir şekilde çalışır. XML için kodu çevirme/geri çözme işlemleri JSON yapısına göre daha zordur. Ayrıca XML, JSON formatına göre kategorize bir veri yapısına sahip çalışır.
- Rest API: Açılımı Representational State Transfer (Temsili Durum Transferi) olan REST, bir arayüz kullanımı ile Sunucu ve İstemci (Kullanıcı) arasında veri alışverişini sağlayan bir mimari modelini oluşturur. REST mimarisinin kullanımı ile birlikte web hizmetleri ve kullanıcı arasındaki pratik, esnek ve hızlı iletişimi sağlar. REST verileri JSON (JavaScript Object Notation) kullanılarak okunabilir. REST API, hemen hemen her programlama dilini kullanılarak geliştirilebilir ve çeşitli veri biçimlerini destekler. Tek koşul REST çalışma mimarisinde bulunan kısıtlamalara uygun olarak tasarlanmış olmasıdır.
REST API yalnızca yazılımcının kendi uygulaması içerisinde değil, aynı zamanda herhangi bir yazılımcı veya kullanıcı tarafından da kullanılabilir. Oluşturulan taleplerin API tarafından tek seferde donanımları tam kapasitede kullanarak karşılanması sisteme yük bindirir. Sisteme binecek aşırı yükün sebep olabileceği problemlerle karşılaşmamak için gelen talepler belirli aralıklar ile parçalanarak iletilir. Bir tür paket iletiminde gerçekleştirilen fragmentasyon aşamasına benzetilebilir.
REST, uygulamaların veya cihazların birbirlerine nasıl bağlanabileceğini ve birbirleri ile nasıl iletişim kurabileceğini tanımlayan bir kural dizisidir. Bu kural dizisinin tüm prensiplerini yerine getiren API, RESTFUL API olarak nitelendirilir. Uygulamaları birbiri ile haberleştirebilmek için esnek ve basit bir yöntem sağlar. REST API’leri, bir kaynak içinde kayıt oluşturma, okuma, güncelleme ve silme (CRUD işlemleri olarak da bilinir) gibi standart veritabanı aksiyonlarını gerçekleştirmek için http (Hyper Text Transfer Protocol) istekleri aracılığıyla iletişim kurar. Bu sebeple REST API, web tarayıcısında HTTP istekleri ile çalışan bir web sitesine benzetilebilir. Dolayısıyla “GET, POST, PUT DELETE vb.” komutları, REST API ile haberleşmede oldukça yaygın kullanılır. Ek olarak güvenliği sağlamak için kullanılan parolalarda belirli hash algoritmaları ve iletişimde SSL sertifikasyonu ile birlikte HTTPS (Secured Hyper Text Transfer Protocol) kullanılır. REST API içerisinde kullanılan komutlar;

- GET, veri listelemek ve görüntülemek için kullanılır.
- POST, veri eklemek için kullanılır.
- DELETE, veri silmek için kullanılır.
- PATCH, verinin bir kısmının güncellenmesi için kullanılır.
- PUT, veri güncelleme isteği olarak kullanılır.
REST çalışma yapısına bakıldığında altı temel noktadan oluştuğu gözlemlenir.
1-Stateless: Sunucuda, kullanıcıya dair oturum bilgileri tutulmamasıdır. Bu bilgiler sadece kullanıcıda tutulur. Böylece geçmişe dönük bir istek listesi veya kullanıcı listesi bilgileri sunucuda bulunmaz. Tüm bilgiler kullanıcı tarafından karşılanır.
2-Uniform Interface: Sunucu ve kullanıcı arasındaki iletişim için belirlenen, özel bir kural setiyle çalışan arayüzdür. Aynı hedefe yönelik tüm API istekleri, isteğin nereden geldiğine bakılmaksızın iletilir. Kaynaktan gelen istekler çok büyük olmamalıdır fakat kullanıcının ihtiyaç duyabileceği tüm bilgileri içermelidir.
3-Cacheable: Mümkün olduğunda, kaynaklar, istemci veya sunucu tarafında önbelleğe alınabilir olmalıdır. Bu sebeple sunucunun gönderdiği istekleri “Cachable” veya “Uncachable” olarak belirlenir. Böylece kullanıcı gönderilen bilgilere göre bir önbellek mekanizması oluşturur ve verimli bir kullanım sağlar. Amaç, sunucu tarafında ölçeklenebilirliği artırırken, kullanıcı tarafında performansı iyileştirmektir.
4-Client-Server: Sunucu ve kullanıcının birbirinden farklı sorumlulukları üstlendiği ve birbirlerinin sorumluluklarına müdahale etmeden tamamen bağımsız yapıda çalışacak şekilde tasarlanmalıdır. Kullanıcı, sunucunun sorumluluğunda olan depolama ile ilgilenmezken, sunucu da kullanıcıya ait olan kullanıcı grupları gibi konular ile ilgilenmez. İletişimler kullanıcı tarafından başlatılır ve sunucu gelen istekleri karşılar. Bunun sonucunda kullanıcı ve sunucu birbirinden bağımsız olarak geliştirilebilir ve kullanıcı tarafında yazılan kodun taşınabilirliği, okunabilirliği yüksek olur.
5-Layered System: REST API ile kurulan iletişimlerde istekler ve yanıtlar birbirinden bağımsız çalışan farklı katmanlardan geçer. Sunucu ve kullanıcı arasında bulunan güvenlik katmanı veya önbellek katmanı gibi dış katmanların ikili iletişime etki etmeyeceği şekilde tasarlanır. Böylece sunucu ve kullanıcı doğrudan birbirleri ile iletişime geçer gibi yalnızca iletişime geçtiği katmanları tanır.
6-Code on Demand: REST API genellikle statik kaynak gönderimi sağlar ancak bazı özel durumlarda yanıtlar farklı kodları veya sunucunun kullanıcıya script iletilmesini sağlar. Bu gibi durumlarda, kod yalnızca isteğe bağlı olarak çalışmalıdır.
NOT: OpenAPI Specification (OAS), herhangi bir geliştiricinin veya uygulamanın, bir API’yi, keşfetmesine ve parametrelerini ve yeteneklerini tam olarak anlamasına olanak tanıyacak şekilde API’yi tanımlamak için bir arayüz oluşturur. Bunlar; kullanılabilir uç noktalar, her uç noktaya izin verilen işlemler, işlem parametreleri, kimlik doğrulama yöntemleri ve diğer bilgilerdir. En son sürüm olan OAS3, farklı programlama dillerinde API istemcilerini ve sunucu kod parçalarını oluşturmak için OpenAPI Generator gibi uygulamalı araçlar içerir.