Backend for Frontend (BFF) Deseni Nedir ve Neden Gerekir?

Backend for Frontend (BFF), her istemci tipine (web, mobil, akıllı TV, masaüstü) özel bir API katmanı koymanın desenidir: tek bir genel amaçlı API’yi tüm istemcilere zorlamak yerine, her arayüzün kendi ihtiyacına biçilmiş ince bir backend’i olur. Bu katman, alt servislerden gelen veriyi birleştirir, istemcinin tam ihtiyacı kadarını döndürür ve ağır işlemi sunucu tarafına alır. Sonuç: mobilde aşırı veri çekme (over-fetching) ortadan kalkar, payload küçülür, batarya ve veri tüketimi düşer.

SoundCloud ve Netflix gibi ekiplerin popülerleştirdiği BFF, 2026’da mikroservis ve mobil-öncelikli mimarilerin standart bir bileşenidir. Tek bir API’nin hem 4K akıllı TV hem 3G mobil cihaza hizmet etmeye çalışması, her zaman ya birini ya diğerini cezalandırır; BFF bu gerilimi mimari düzeyde çözer. Bir akıllı TV uygulaması zengin, büyük payload ile rahatça çalışırken aynı yanıtı düşük bant genişliğindeki bir mobil cihaza göndermek hem yükleme süresini uzatır hem kullanıcının veri paketini eritir. Tersine, mobil için optimize edilmiş yalın bir yanıt da TV deneyimini fakirleştirir. Bu uzlaşmazlık, tek API modelinin yapısal sınırıdır ve istemci sayısı arttıkça keskinleşir. Aşağıdaki bölümler deseni, varyantlarını ve üretim tuzaklarını sayısal olarak açar.

Tek genel API ile istemci-başına BFF katmanı arasındaki mimari farkı gösteren diyagram
Tek genel API ile istemci-başına BFF katmanı arasındaki mimari farkı gösteren diyagram

Genel API ile BFF Arasındaki Fark

Genel amaçlı tek API, tüm istemcileri ortak bir sözleşmeyle besler; bu da her istemcinin ortalama bir uzlaşmaya razı olması demektir. Mobil, ihtiyacı olmayan alanları da indirip atar; web, birden çok endpoint’i sırayla çağırarak gecikme biriktirir. BFF ise sorumluluğu istemci ekibine yakınlaştırır: her arayüz, kendi backend’ini kendi temposunda evrimleştirir.

Boyut Tek Genel API BFF Deseni Etki
Payload boyutu Tüm istemciler aynı İstemciye özel, küçük Mobilde %30-60 azalma
Round-trip sayısı Çok endpoint çağrısı Tek birleştirilmiş çağrı P95 gecikme düşer
Sürüm bağımsızlığı Tüm istemciler kilitli İstemci başına serbest Dağıtım hızı artar
Sahiplik Tek API ekibi darboğaz İstemci ekibi sahip Conway uyumu
Veri biçimlendirme İstemcide Sunucuda BFF’te İstemci kodu sadeleşir
Güvenlik yüzeyi Tek nokta İstemciye göre dar Saldırı yüzeyi azalır

BFF, API Gateway ile karıştırılmamalıdır. Gateway çapraz kesen ilgileri (kimlik doğrulama, rate limit, routing) merkezi yönetir; BFF ise istemciye özgü veri biçimlendirme ve toplama (aggregation) yapar. İkisi birlikte kullanılır: API Gateway güvenlik katmanı trafiği karşılar, arkasındaki BFF istemciye göre şekillendirir.

Bu ayrımın pratik sonucu, sorumlulukların net biçimde katmanlanmasıdır. Conway yasasının ortaya koyduğu üzere, bir sistemin mimarisi onu üreten organizasyonun iletişim yapısını yansıtır; tek genel API modeli, tüm istemci ekiplerini tek bir backend ekibinin temposuna bağlayarak bu yasayı tersine çevirmeye çalışır ve kaçınılmaz olarak bir darboğaz yaratır. BFF deseni ise mimariyi organizasyona hizalar: web ekibi kendi BFF’ini, mobil ekibi kendi BFF’ini sahiplenir ve bağımsız evrimleştirir. Bu sahiplik hizalaması, ölçülebilir bir dağıtım hızı kazancına dönüşür; istemci ekipleri birbirini beklemeden üretime çıkar. Genel amaçlı API’nin bir diğer gizli maliyeti, her istemcinin “ortalama” bir sözleşmeye razı olmasıdır: ne 4K TV için zengin ne 3G mobil için yalın olan bu sözleşme, her iki uçta da suboptimaldir. BFF bu uzlaşmayı ortadan kaldırarak her istemciye tam ihtiyacı kadarını sunar.

BFF Varyantları: İstemci-Başına, Deneyim-Başına ve GraphQL

BFF tek bir şekle sahip değildir; üç yaygın varyant farklı ölçeklerde işe yarar. Seçim, istemci sayınıza ve ekip yapınıza bağlıdır. Yanlış varyant, ya gereksiz bakım yüküne ya da yetersiz özelleştirmeye yol açar; bu yüzden kararı baştan bilinçli vermek gerekir.

  1. İstemci-başına BFF: Her platform (iOS, Android, Web) için ayrı backend. En yüksek özelleştirme, en yüksek bakım yükü.
  2. Deneyim-başına BFF: Benzer cihazlar tek BFF’te gruplanır (örneğin tüm mobil tek BFF). Bakım ile özelleştirme dengesi.
  3. GraphQL tabanlı BFF: Tek bir GraphQL şeması, her istemcinin kendi sorgusuyla tam ihtiyacını çekmesini sağlar. BFF mantığının büyük kısmını istemciye taşır.
Varyant Esneklik Bakım Yükü Uygun Ölçek Tipik Kullanım
İstemci-başına Çok yüksek Yüksek 3-5 istemci Netflix tarzı
Deneyim-başına Yüksek Orta Mobil + Web SoundCloud tarzı
GraphQL BFF Çok yüksek Düşük-orta Çok istemci Federated graph
Tek genel API Düşük Düşük 1 istemci Erken aşama ürün
Gateway aggregation Orta Orta Hafif toplama Basit birleştirme
Web, mobil ve TV istemcileri için ayrı BFF katmanlarının alt servislere bağlandığı topoloji
Web, mobil ve TV istemcileri için ayrı BFF katmanlarının alt servislere bağlandığı topoloji

BFF Mimarisinin Çalışma Akışı

Tipik bir BFF isteği şu zinciri izler: istemci → API Gateway → ilgili BFF → çoklu alt servis → BFF’te birleştirme → istemciye biçimlenmiş yanıt. BFF, alt servislere paralel çağrı yapar (fan-out), gelen veriyi tek bir istemci modeline indirger (fan-in) ve gereksiz alanları kırpar. Bu fan-out/fan-in akışı, istemcinin tek bir round-trip ile ihtiyacı olan her şeyi almasını sağlar; aksi halde istemci kendisi dört ayrı endpoint’i sırayla çağırıp sonuçları kendi tarafında birleştirmek zorunda kalır ki bu hem gecikme biriktirir hem de batarya ve veri tüketir. BFF, bu birleştirme yükünü istemciden alıp veri kaynağına yakın, hızlı bir sunucu katmanına taşır.

  • Toplama (aggregation): Bir ekran 4 servisten veri istiyorsa, BFF bu 4 çağrıyı paralel yürütür ve tek yanıtta birleştirir.
  • Dönüştürme (transformation): Alt servis tarih formatı ISO döndürürken mobil istemci farklı format istiyorsa, dönüşüm BFF’te yapılır.
  • Daraltma (trimming): İstemcinin kullanmadığı alanlar yanıttan çıkarılır.
  • Önbellekleme: İstemciye özel TTL ile BFF katmanında önbellek tutulur.

Mobil için BFF kurarken mobil ve web BFF deseni ile doğru protokol seçimi birlikte değerlendirilmelidir. gRPC, BFF ile alt servisler arası iç iletişimde düşük gecikme sağlar; istemci tarafında REST veya GraphQL tercih edilir.

Fan-out/fan-in akışının doğru uygulanması, BFF’in en büyük performans kazancının kaynağıdır. Naif bir BFF, dört alt servisi sırayla çağırırsa toplam gecikme dört çağrının toplamı olur; paralel çağırırsa toplam gecikme yalnızca en yavaş çağrı kadardır. Bu fark, dört servisin her biri 100 ms sürdüğünde 400 ms ile 100 ms arasındaki ayrımdır; yani sıralı yerine paralel fan-out, bu örnekte gecikmeyi dörtte birine indirir. Bu nedenle BFF kodu, bağımsız çağrıları her zaman eşzamanlı başlatmalıdır (Promise.all, eşzamanlı goroutine veya reaktif birleştirme). Yalnızca bir çağrının çıktısı diğerine girdi olduğunda sıralı yapılması zorunludur; bu durumda bile bağımlı olmayan çağrılar paralelden ayrılmalıdır. Daraltma (trimming) ise bant genişliği tarafında kazanç sağlar: alt servis 40 alan döndürse de istemci yalnızca 8’ini kullanıyorsa, BFF kalan 32 alanı yanıttan çıkararak payload’u ve serileştirme maliyetini düşürür.

Performans Etkisi: Sayılarla Karşılaştırma

BFF’in ölçülebilir kazancı en çok mobil ve düşük bant genişliğinde görülür. Aşağıdaki tablo, tipik bir e-ticaret ana ekranı için tahmini iyileşmeleri özetler. Değerler ölçüm bağlamına göre değişir, ancak yön tutarlıdır.

Metrik Tek Genel API BFF ile İyileşme
Ekran başına HTTP isteği 5-8 1 ~%80 azalma
Mobil payload (KB) 180 70 ~%60 azalma
P95 ekran yükleme (ms) 900 450 ~%50 azalma
İstemci kodu karmaşıklığı Yüksek Düşük Sade veri modeli
Veri tüketimi (oturum) Baz %40 daha az Mobil dostu
Sürüm dağıtım sıklığı Senkron Bağımsız Hız artar
BFF'in alt servislere paralel fan-out çağrı yapıp tek yanıtta birleştirdiği akış görseli
BFF'in alt servislere paralel fan-out çağrı yapıp tek yanıtta birleştirdiği akış görseli

BFF Anti-Desenleri ve Kaçınılması Gerekenler

BFF yanlış uygulandığında çözüm değil, ek bir bakım borcu olur. En kritik anti-desen, BFF’e iş mantığı kaymasıdır: BFF yalnızca toplama, dönüştürme ve biçimlendirme yapmalı, alan iş kuralları alt servislerde kalmalıdır.

  • Şişman BFF: İş mantığı BFF’e sızar, alt servisler anemik kalır. Çözüm: kuralları domain servisine geri taşı.
  • BFF patlaması: Her küçük istemci varyantı için yeni BFF açılır, kod tekrarı katlanır. Çözüm: deneyim-başına gruplama veya GraphQL’e geç.
  • Paylaşılan BFF: İki istemci tek BFF’i zorlar, genel API’nin sorununu geri getirir. Çözüm: gerçek ihtiyaç ayrışıyorsa böl.

Dayanıklılık Desenleri: BFF’i Çökmez Kılmak

BFF, alt servislere fan-out yapan bir toplama katmanı olduğu için tek bir alt servisin yavaşlaması ya da çökmesi tüm ekranı düşürebilir. Bu yüzden BFF dayanıklılık desenleri olmadan üretime alınmaz. Devre kesici (circuit breaker), zaman aşımı, yeniden deneme ve kısmi yanıt (graceful degradation) bu katmanın hayati bileşenleridir. Sam Newman’ın BFF mimari deseni notları ve Martin Fowler’ın Circuit Breaker yazısı bu desenleri ayrıntılı açıklar.

Desen Amaç BFF’teki rolü Etki
Devre kesici Çöken servisi izole et Alt servis çökünce kısa devre yap Kaskad çökmeyi önler
Zaman aşımı Sonsuz bekleme önle Her fan-out çağrısına bütçe P99 gecikme kontrol
Yeniden deneme Geçici hatayı tolere et Üssel geri çekilme (backoff) Geçici hata maskeler
Kısmi yanıt Bir servis çökse de yanıt ver Boş alanla ekranı sun Erişilebilirlik artar
Bulkhead Kaynak izolasyonu Servis başına thread havuzu Bir servis diğerini boğmaz
Önbellek (cache) Tekrar çağrıyı azalt İstemciye özel TTL Yük ve gecikme düşer

Bu desenler BFF’i kırılgan bir aracı katman olmaktan çıkarıp sistemin dayanıklılık çıpasına dönüştürür. Özellikle mobil istemcilerde, ağ koşulları değişken olduğu için kısmi yanıt ve agresif önbellekleme kullanıcı algısını doğrudan iyileştirir.

Dayanıklılık desenlerinin neden bu kadar kritik olduğunu bir hesap netleştirir. Bir BFF, tek bir ekran için dört alt servise paralel fan-out yapıyorsa ve her servisin tek tek erişilebilirliği %99,9 ise, dört servisin aynı anda başarılı olma olasılığı yaklaşık %99,9 üzeri 4, yani %99,6’ya düşer; sekiz servisle bu oran %99,2’ye iner. Yani BFF, bağımlılık sayısı arttıkça matematiksel olarak en zayıf halkadan daha kırılgan hale gelir. Devre kesici ve kısmi yanıt bu denklemi tersine çevirir: kritik olmayan bir servis çöktüğünde BFF, o bölümü boş veya önbellekten doldurarak ekranın geri kalanını sunar; böylece tek bir servis arızası tüm deneyimi düşürmez. Zaman aşımı bütçesi de aynı derecede önemlidir; fan-out çağrılarından biri yanıt vermeden askıda kalırsa, zaman aşımı olmadan tüm yanıt o yavaş servisin hızına kilitlenir. Pratik kural, her alt servis çağrısına ekranın toplam gecikme bütçesinin bir dilimini ayırmak ve bu bütçe aşıldığında o servisi kısmi yanıtla atlatmaktır. Bulkhead deseni ise bir servise giden çağrıların ayrı bir thread/bağlantı havuzunda izole edilmesini sağlar; böylece yavaşlayan bir servis, diğer servislere giden çağrıların kaynaklarını tüketip onları da boğamaz.

BFF Ne Zaman Gerekmez?

BFF her projeye gerekmez ve gereksiz katman ek gecikme ile bakım maliyeti getirir. Tek istemcisi olan erken aşama bir üründe, basit bir REST API yeterlidir. BFF, çoklu istemci, belirgin platform farklılıkları ve istemci ekiplerinin bağımsız dağıtım ihtiyacı doğduğunda anlam kazanır.

  • Tek istemci (sadece web) → BFF gerekmez, genel API yeterli.
  • İstemciler arası fark minimal → tek API + alan seçimi (sparse fieldsets) yeterli.
  • Ekip küçük, bakım kapasitesi sınırlı → GraphQL BFF tek katman olarak tercih edilir.

Tipik Sorunlar ve Çözümleri

BFF üretimde en çok gecikme zinciri, kod tekrarı ve sahiplik belirsizliği nedeniyle sorun çıkarır. Aşağıdaki çözümler sahada doğrulanmıştır:

  • Fan-out gecikmesi: BFF alt servisleri sırayla çağırıyor, gecikme topluyor. Çözüm: paralel çağrı (Promise.all / concurrent fetch) ve zaman aşımı bütçesi koy.
  • Tek hata tüm ekranı düşürüyor: Bir alt servis çökünce BFF yanıt vermiyor. Çözüm: kısmi yanıt (graceful degradation) ve devre kesici (circuit breaker) ekle.
  • Kod tekrarı: Üç BFF aynı dönüşüm mantığını kopyalıyor. Çözüm: ortak kütüphaneye çıkar, ama domain mantığını sızdırma.
  • Sahiplik belirsizliği: BFF’i hangi ekip yönetecek belli değil. Çözüm: BFF’i istemci ekibine ver, Conway uyumu sağla.
  • Önbellek tutarsızlığı: İstemci eski veri görüyor. Çözüm: BFF düzeyinde TTL ve invalidasyon stratejisi tanımla.
  • Güvenlik delikleri: BFF alt servisleri doğrudan açığa çıkarıyor. Çözüm: yetkilendirmeyi BFF’te zorla, alt servisleri ağ içinde izole et.
BFF anti-desenlerini gösteren şişman orta katman ve sızan iş mantığı uyarı görseli
BFF anti-desenlerini gösteren şişman orta katman ve sızan iş mantığı uyarı görseli

Sonuç ve Öneriler

BFF deseni, çoklu istemcili sistemlerde tek genel API’nin yarattığı over-fetching, çoklu round-trip ve sürüm kilidi sorunlarını ortadan kaldırır. Doğru uygulandığında mobil payload’unu yarıya indirir, P95 gecikmeyi belirgin düşürür ve istemci ekiplerine bağımsız dağıtım özgürlüğü verir. Başlangıçta deneyim-başına gruplama en dengeli seçimdir; istemci sayısı arttıkça GraphQL tabanlı BFF bakım yükünü azaltır. BFF’i ince tutun, iş mantığını sızdırmayın, paralel fan-out ve devre kesici ile dayanıklılık ekleyin. Tek istemcili erken aşama ürünlerde ise BFF’i ertelemek doğru karardır.

Sıkça Sorulan Sorular

Backend for Frontend (BFF) deseni tam olarak nedir?

BFF, her istemci tipine özel bir backend API katmanı koymanın desenidir. Tek bir genel amaçlı API’yi tüm istemcilere zorlamak yerine, web, mobil ve TV gibi her arayüzün kendi ince backend’i olur. Bu katman alt servislerden gelen veriyi birleştirir, istemcinin tam ihtiyacı kadarını döndürür ve over-fetching ile çoklu round-trip sorununu çözer.

BFF ile API Gateway arasındaki fark nedir?

API Gateway çapraz kesen ilgileri merkezi yönetir: kimlik doğrulama, rate limit, routing ve WAF. BFF ise istemciye özgü veri toplama, dönüştürme ve biçimlendirme yapar. İkisi birlikte kullanılır; Gateway trafiği karşılar ve güvence altına alır, arkasındaki BFF yanıtı istemciye göre şekillendirir. Gateway altyapı odaklı, BFF deneyim odaklıdır.

GraphQL BFF’in yerini alır mı?

GraphQL bir BFF varyantıdır, onu tamamen ortadan kaldırmaz. Tek bir GraphQL şeması, her istemcinin kendi sorgusuyla tam ihtiyacını çekmesini sağlar ve istemci-başına ayrı BFF yazma yükünü azaltır. Ancak toplama, yetkilendirme ve önbellekleme gibi sorumluluklar yine bir sunucu katmanında yönetilir; GraphQL bu mantığı taşıyan BFF biçimidir.

Her projeye BFF gerekir mi?

Hayır. Tek istemcisi olan erken aşama bir üründe BFF gereksiz bir katman ve ek gecikme getirir; basit bir REST API yeterlidir. BFF, çoklu istemci, belirgin platform farklılıkları ve istemci ekiplerinin bağımsız dağıtım ihtiyacı doğduğunda anlam kazanır.

BFF’te en sık yapılan hata nedir?

En kritik hata, alan iş mantığının BFF’e sızmasıdır. BFF yalnızca toplama, dönüştürme ve biçimlendirme yapmalı; iş kuralları domain servislerinde kalmalıdır. Mantık BFF’e kaçtığında servisler anemikleşir, BFF şişer ve bakımı zorlaşır. Diğer yaygın hata, sıralı (paralel olmayan) alt servis çağrılarıyla gecikme biriktirmektir.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Haziran 7, 2026

    BFF’i ekiplere anlatırken hep aynı uyarıyı yapıyorum: katmanı ince tutun. Gördüğüm en pahalı hata, BFF’in zamanla iş mantığını yutup şişman bir orta katmana dönüşmesi. BFF sadece toplar, dönüştürür, kırpar. Çoklu istemciniz varsa deneyim-başına gruplamayla başlayın, ölçek büyüyünce GraphQL’e geçin. Tek web istemciniz varsa BFF’i ertelemek en doğrusu.

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir