Gereksiz Round-Trip Sorunu: Neden Composite Resource ile Tek Endpoint Daha Mantıklı?

Performans, tutarlılık ve sade kod için pratik yaklaşım.

🎯 Giriş

Modern web ve mobil uygulamalarda hız, kullanıcı deneyiminin temelidir. Tek bir ekranı doldurmak için birden fazla API çağrısı gerektiğinde, bu isteklerin toplam gecikmesi gereksiz round-trip maliyetini doğurur.

🔄 Round-Trip Nedir?

Round-trip, bir HTTP isteğinin istemciden sunucuya gidip cevabın tekrar istemciye dönmesine verilen isimdir.

  • 1 API çağrısı = 1 round-trip
  • Her round-trip: bağlantı kurulumu, header işleme, ağ gecikmesi ve cevabın parse edilmesi gibi maliyetler içerir.

Bir ekran için üç farklı endpoint çağrısı gerekiyorsa, aslında 3 round-trip yapılıyor demektir.

❌ Sorun: Gereksiz Round-Trip

Örnek senaryo: Ürün detay sayfasında gerek duyulan veriler:

  • Ürün başlığı
  • Ürüne ait varyantlar
  • Ürüne ait siparişler

Klasik yaklaşımda üç ayrı çağrı:

GET /products/{id}
GET /products/{id}/variants
GET /orders?productId={id}
  • Performans kaybı: 3 round-trip → daha uzun bekleme
  • Kaynak tüketimi: 3 ayrı DB sorgusu, 3 ayrı JSON parse
  • Tutarsızlık riski: Çağrılar arası veri değişebilir

✅ Çözüm: Composite Resource

UI’nın ihtiyacını tek endpoint’te toplayan Composite Resource yaklaşımıyla, ekran bir defada ve tutarlı şekilde doldurulur.

GET /products/{id}/dashboard
{
  "product":  { "id": "…", "title": "Laptop" },
  "variants": [ { "id": "…", "name": "16GB RAM" } ],
  "orders":   [ { "id": "…", "date": "2025-08-01", "qty": 2, "total": 350.00 } ]
}
  • Tek round-trip → daha hızlı sayfa yüklenmesi
  • Tutarlı snapshot → veriler aynı anda alınır
  • Tek yetkilendirme → güvenlik tek noktada çözülür
  • Temiz UI kodu → tek DTO ile sade akış

🛠 En İyi Uygulamalar

  • Sayfalama: Büyük koleksiyonlar için page, size.
    GET /products/{id}/dashboard?orders.page=1&orders.size=10
  • Include/Expand: Gerekmeyen bölümleri taşımayın.
    GET /products/{id}/dashboard?include=variants,orders
  • Cache stratejisi: Sabit veriler (ürün/varyant) kısa TTL; dinamik veriler (siparişler) taze.
  • Hata yönetimi: Bölüm bazlı durumlar döndürün.
    {
      "product":  { "status": "ok", "data": { /* … */ } },
      "variants": { "status": "ok", "data": [ /* … */ ] },
      "orders":   { "status": "error", "message": "Order service unavailable" }
    }
  • Versiyonlama: Büyük değişikliklerde yeni yol açın (örn. /v2/…).
  • Backend’de paralel sorgu: Task.WhenAll ile alt veri kaynaklarını aynı anda çekin.

📌 Sonuç

Gereksiz round-trip, performansı sessizce düşüren bir problemdir. Composite Resource yaklaşımıyla tek endpoint üzerinden hızlı, tutarlı ve sade bir deneyim sağlanır; hem geliştirici verimliliği hem de kullanıcı memnuniyeti artar.

Telefon +90 505 747 42 84
Email info@devedijital.com
Adres
Tacettin Veli Mahallesi Halit Narin Caddesi Bahadır Plaza Kat:11 Daire:41 38230 Deve Dijital Melikgazi/Kayseri/Türkiye