Software Architecture

Backend-for-Frontend (BFF) Desenini Ustalıkla Kullanma: Modern Bir Mimari Çözüm

Modern web uygulamaları basit monolitlerden mikro servisler ve Tek Sayfa Uygulamaları (SPA'lar) içeren karmaşık ekosistemlere evrildikçe, ön uç istemcilerinin arka uç API'leriyle doğrudan iletişim kurduğu geleneksel yaklaşım yerini yavaş yavaş kaybetmektedir. İşte burada Backend-for-Frontend (BFF) deseni kritik bir mimari strateji olarak ortaya çıkar. İstemcinin ihtiyaçlarına özel olarak tasarlanmış bir ara katman ekleyerek geliştiriciler daha iyi sorumluluk ayrımı, arttırılmış güvenlik ve daha sürdürülebilir bir kod tabanı elde edebilirler.

Backend-for-Frontend Nedir?

BFF deseni, temelde bir veya daha fazla ön uç uygulamasına hizmet vermek üzere tasarlanmış özel bir arka uç hizmetidir. Mobil uygulamanızın veya web arayüzünüzün, birden fazla mikro servisten veri toplama işlemini üstlenmek zorunda kalmak yerine, BFF bir adaptör gibi davranır. Çeşitli arka uç kaynaklarından verileri çeker, bunları birleştirir ve ön uçun belirli tüketim ihtiyaçları için mükemmel şekilde optimize edilmiş bir biçime dönüştürür.

Bu desen Martin Fowler tarafından popüler hale getirilmiştir ve müşteriye yönelik bir web uygulaması, dahili bir yönetici paneli ve bir mobil uygulama gibi farklı veri yapılarına ve güvenlik profillerine ihtiyaç duyan ayrı arayüzlerin bulunduğu senaryolarda özellikle faydalıdır.

BFF Benimsemenin Temel Faydaları

1. Özelleştirilmiş Veri Yanıtları

BFF olmadan, ön uç geliştiricileri genellikle "aşırı çekme" (over-fetching) veya tek bir görünümü oluşturmak için ardışık birden fazla API çağrısı yapma zorluğuyla karşılaşır. Bir BFF, bu yanıtları tek, verimli bir yükte birleştirebilir; bu da ağ gecikmesini azaltır ve kullanıcı deneyimini iyileştirir.

2. Gelişmiş Güvenlik

BFF bir kapıcı görevi görür. Kimlik doğrulama ve yetkilendirmeyi tek seferde ele alarak altta yatan mikro servisleri halka açık internete doğrudan maruz kalmaktan koruyabilir. Bu, hassas dahili uç noktaların asla tarayıcıdan veya mobil cihazdan doğrudan erişilemez olmasını sağlar.

3. Teknoloji Esnekliği

Ön uç ekibi, arka uç mikro servis ekiplerinden bağımsız çalışabilir. BFF, ön uçun alttaki hizmetleri bozmadan evrilebilmesini sağlayan stabil bir sözleşme sunar.

BFF Uygulama: Pratik Bir Örnek

Node.js ve Express kullanarak basit bir BFF nasıl uygulayabileceğinize bakalım. Ön uçta kullanıcı profil verilerine ve son siparişlere ihtiyaç duyulan bir senaryo hayal edin. /api/users/123 ve /api/orders?user=123 uç noktalarına ayrı ayrı çağrı yapmak yerine, BFF bunları birleştirir.

const express = require('express');
const axios = require('axios');
const app = express();

// Dashboard için BFF uç noktası
app.get('/dashboard/:userId', async (req, res) => {
  try {
    const userId = req.params.userId;

    // Dahili mikro servislerden paralel istek
    const [userResponse, ordersResponse] = await Promise.all([
      axios.get(`http://user-service/internal/${userId}`),
      axios.get(`http://order-service/internal/list/${userId}`)
    ]);

    // Ön uç için veriyi dönüştürme ve birleştirme
    const payload = {
      userName: userResponse.data.name,
      email: userResponse.data.email,
      recentOrders: ordersResponse.data.orders.slice(0, 5),
      totalSpent: ordersResponse.data.orders.reduce((sum, o) => sum + o.amount, 0)
    };

    res.json(payload);
  } catch (error) {
    res.status(500).json({ error: 'Dashboard verileri alınırken hata oluştu' });
  }
});

app.listen(3000, () => console.log('BFF 3000 portunda çalışıyor'));

BFF Ne Zaman Kullanılmalı (Ve Ne Zaman Kullanılmamalı)?

BFF deseni, birden fazla distinct (ayrı) istemcisi olan karmaşık uygulamalarda öne çıkar. Ancak, tek bir istemcisi olan basit bir iç araç veya monolitik bir uygulama geliştiriyorsanız, ayrı bir BFF katmanını yönetmenin getirdiği ek karmaşıklık haklı olabilir. Aşırı mühendislik yapmak gerçek bir risktir; bakım maliyetini, ayrışmanın getirdiği faydalarla her zaman karşılaştırın.

Sonuç

Backend-for-Frontend deseni, modern yazılım mimarlarının araç setinde güçlü bir araçtır. Ön uç endişelerini arka uç uygulama ayrıntılarından ayırarak ekiplerin daha hızlı hareket etmesine, uygulamaları daha etkili bir şekilde güvenli hale getirmesine ve daha pürüzsüz kullanıcı deneyimleri sunmasına olanak tanır. Uygulamanız büyüdükçe, BFF katmanının API manzarasındaki artan karmaşılığı yönetmenize yardımcı olup olmayacağını düşünün.

Share: