Uygulamalar arası veri iletişimi günümüz yazılım dünyasının temel taşlarından biridir. Bu iletişim, genellikle Web API'ler aracılığıyla sağlanır.
Web API, farklı yazılım uygulamalarının internet üzerinden iletişim kurmasını sağlayan bir arayüzdür. Uygulamalar arasında veri alışverişi ve işlev çağrıları yapılmasına olanak tanır. Böylece, farklı platformlarda çalışan programlar birbirleriyle entegre olabilir ve işbirliği yapabilir.
Web API'lerin altında yatan protokol ise çoğu zaman HTTP’dir. HTTP sadece sayfa yüklemeleriyle sınırlı kalmaz, aynı zamanda API çağrılarında da yoğun olarak kullanılır.
HTTP (HyperText Transfer Protocol), web üzerindeki istemci ve sunucu arasında veri alışverişini sağlayan bir iletişim protokolüdür. Uygulama katmanında (Application Layer) çalışır ve İnternet protokolü (IP) üzerinde taşınan verilerin nasıl iletileceğini belirler. HTTP, istemcinin (genellikle web tarayıcısı veya API istemcisi) sunucuya istek göndermesini ve sunucunun da bu isteğe karşılık yanıt vermesini sağlar. Web sayfalarının, API verilerinin ve diğer kaynakların transferinde en yaygın kullanılan protokoldür.
Uygulama katmanıyla ilgili bu yazıyı okuyabilirsiniz.
- HTTP/1.1: Her istek için ayrı TCP bağlantısı kullanır.
- HTTP/2: Tek bağlantı üzerinden çoklu istek gönderimi (multiplexing).
- HTTP/3: QUIC protokolü ile UDP tabanlı, daha hızlı.
| Yöntem | Açıklama |
|---|---|
GET |
Veri çekmek için kullanılır. |
POST |
Yeni veri oluşturmak için. |
PUT |
Var olan veriyi güncellemek için. |
DELETE |
Veri silmek için. |
PATCH |
Kısmi güncellemeler için. |
- Headers:
Content-Type,Authorizationgibi başlıklar; metadata taşır. - Cookies: Tarayıcıda saklanan oturum verileri.
- CORS (Cross-Origin Resource Sharing): Farklı domain'lerden gelen isteklere izin verip vermeme durumunu belirler.
- Caching: Yanıtların bellekte saklanması ile performans artışı.
Postman geliştiricilerin HTTP temelli API'lerin test ve dokümantasyonunu sağlayan güçlü bir araçtır.
- Basit bir arayüzle
GET,POST,PUT,DELETEgibi HTTP istekleri gönderilebilir. - JSON yanıtları okunabilir biçimde görüntülenir.
- Header ve token yönetimi kolaydır.
- Test koleksiyonları ve otomasyon desteği sunar.
Modern web sistemleri için farklı ihtiyaçlara yönelik çeşitli seçenekler bulunur.
- HTTP üzerinden çalışır.
- Her kaynak bir URL ile temsil edilir.
- JSON kullanımı yaygındır.
- Fazla veri çekme riski (overfetching) vardır çünkü istemci ihtiyacından daha fazla veri talep eder; bu da gereksiz ağ trafiği ve performans kaybına yol açar.
GET /api/users/1- Tek bir endpoint ile çalışır.
- İstemci ihtiyacı olan alanları seçerek sorgular.
- Veri kontrolü istemcidedir (client).
- Kullanımı REST'e göre daha zordur.
query {
user(id: "1") {
name
email
}
}- Gerçek zamanlı çift yönlü iletişim sağlar.
- HTTP ile başlar, TCP üzerinden devam eder.
- Canlı verinin olduğu durumlarda ideal bir mimaridir.
- Bağlantı yönetimi REST’e göre karmaşıktır.
Client ⇄ WebSocket ⇄ Server
-
Google tarafından geliştirilmiştir.
-
HTTP/2 ve Protocol Buffers kullanır.
-
Mikroservis mimarileri için uygundur.
-
JSON yerine Protobuf kullanımından ötürü hata ayıklama daha zordur.
Protocol Buffer: Google tarafından geliştirilen, veri serileştirme (serialization) formatıdır. Veriyi yapılandırılmış bir şekilde tanımlayıp daha sonra bunu kompakt, hızlı ve taşınabilir bir biçimde saklamak veya ağ üzerinden iletmek için kullanılır.
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}Publish/Subscribe (Yayınla/Abone Ol) Modeli, mesajların bir konu (topic) üzerinden yayıncılar (publishers) tarafından gönderilip, bu konulara abone olan (subscribers) alıcılara iletildiği bir iletişim desenidir. Yayıncılar ve aboneler birbirinden bağımsız çalışır, böylece sistem gevşek bağlı ve ölçeklenebilir olur. Bu model; haber servisleri, IoT uygulamaları ve mikroservisler gibi birçok alanda gerçek zamanlı ve asenkron iletişim için kullanılır.
Broker, yayıncı ile abone arasında mesajları yönlendiren aracıdır. Yayıncıdan aldığı mesajı, ilgili abonelere ileterek iletişimi sağlar.
- Publish/Subscribe modeli ile çalışır.
- Genellikle IoT cihazları ve sensörler için tercih edilir.
- Broker üzerinden iletişim sağlanır.
Publisher → Broker → Subscriber
- Belirli olaylarla tetiklenen fonksiyonlar olarak çalışır.
- AWS Lambda, Google Cloud Functions gibi servisler tarafından sunulur.
- Cold Start (İlk Başlatma Gecikmesi) yaşanabilir.
Client → Function → Response
| Teknoloji | Protokol | En İyi Kullanım Alanı | Veri Formatı |
|---|---|---|---|
| REST | HTTP | Genel API kullanımı | JSON |
| GraphQL | HTTP | Karmaşık veri sorguları | JSON |
| WebSocket | TCP/HTTP | Gerçek zamanlı uygulamalar | Serbest |
| gRPC | HTTP/2 | Mikroservisler arası iletişim | Protobuf |
| MQTT | TCP | IoT cihazları, sensörler | Serbest |
| Serverless | HTTP/Event | Anlık, tetiklenen işlemler | JSON |
Bir e-ticaret uygulamasında, kullanıcıların siparişlerini takip edebileceği bir sistem düşünelim. Bu sistemde:
-
Kullanıcı mobil uygulamadan sipariş durumunu sorgular.
-
Mobil uygulama, bir REST API kullanarak şu isteği gönderir:
GET /api/orders/12345-
Sunucu, application/json formatında siparişin mevcut durumunu (Hazırlanıyor, Kargoya verildi, Teslim edildi gibi) döner.
-
Fakat kullanıcı, yalnızca sipariş durumu ve tahmini teslim tarihi ile ilgilenirken, API cevabında tüm ürün detayları, fatura bilgisi ve stok verisi de yer alır. Bu durumda:
-
Bu gereksiz veri transferi, overfetching problemine yol açar. Hem istemcinin belleği hem de ağ kaynakları boşa harcanır.
-
Alternatif olarak, GraphQL tercih edilseydi istemci sadece ihtiyacı olan alanları çekebilirdi:
query {
order(id: "12345") {
status
estimatedDelivery
}
}Gerçek zamanlı teslimat durumu izlemek isteseydik, bu sistem WebSocket veya MQTT ile entegre edilerek anlık bildirimlerle daha interaktif hale getirilebilirdi.


