Backend for Frontend
- Okunuşu
- bekend for frantend
Kısaca
Backend for frontend, web ya da mobil uygulama gibi her istemci türünün kendi ihtiyaçlarına göre uyarlanmış küçük bir backend aldığı bir mimari desendir.
Backend for frontend (BFF) deseni nedir?
Backend for frontend deseni ya da kısaca BFF, her kullanıcı arayüzü türüne kendine ayrılmış bir sunucu tarafı katmanı verir. Bir web uygulamasına, bir iOS uygulamasına, bir Android uygulamasına ve bir akıllı televizyona eşit derecede iyi hizmet etmeye çalışan tek bir genel amaçlı API yerine, her istemci tam olarak kendi ekranlarına göre şekillenmiş bir backend ile konuşur. Desen 2015 civarında, birçok cihaz için geliştirme yapan ekiplerin paylaşılan tek bir API'nin ya çok konuşkan ya da kimsenin ihtiyaç duymadığı alanlarla şişkin olduğunu fark etmesiyle popülerleşti.
BFF, istemci ile alt servisler arasında yer alır. Bir ekran için birkaç mikroservisi paralel çağırabilir, sonuçları birleştirip kırpabilir ve o ekranın ihtiyaç duyduğu veriyi tek yanıtta döndürebilir; bu da yavaş mobil ağlarda gidiş-dönüşleri azaltır. Genellikle ön yüzü geliştiren ekibin sahipliğindedir, böylece onu kendi hızlarında değiştirebilirler. BFF'ler güvenlik için de kullanılır: BFF, OAuth token'larını sunucuda tutabilir ve tarayıcıya yalnızca güvenli bir oturum cookie'si verebilir.
Kişisel bir alışveriş görevlisi düşünün: beş dükkânı siz gezmek yerine görevli, istediğiniz şeyleri toplayıp tek poşette teslim eder. Bir mobil BFF küçük görseller ve kompakt bir liste döndürebilirken, aynı ürün sayfası için web BFF'i daha zengin veri ve ek bölümler döndürür.
BFF sıklıkla API gateway ile karıştırılır. API gateway, tüm istemciler için yönlendirme, kimlik doğrulama ve hız sınırlama gibi kesişen ilgileri yürüten tek giriş noktasıdır; BFF ise tek bir ön yüz için istemciye özgü mantık içerir. Birçok sistem ikisini de kullanır ve BFF'ler gateway'in arkasında yer alır. GraphQL bazen BFF'lerin yerine kullanılır, çünkü istemciler tam olarak ihtiyaç duydukları alanları isteyebilir. Ana risk birkaç BFF arasında iş mantığının tekrarlanmasıdır; bu yüzden gerçek iş kuralları paylaşılan servislerde kalmalıdır.
Önemli noktalar
- BFF, web ya da mobil gibi belirli bir ön yüz için oluşturulmuş bir backend'dir.
- Birkaç servisteki veriyi ekran başına tek yanıtta toplar ve yeniden şekillendirir.
- Genellikle ön yüz ekibinin sahipliğindedir.
- API gateway tüm istemciler için kesişen ilgileri yürütür; BFF tek bir istemcinin ihtiyaçlarına hizmet eder.
- Temel iş kurallarını her BFF'de değil, paylaşılan servislerde tutun.
Örnek
// Mobile BFF: one request from the app, several calls to internal services
app.get("/mobile/home", async (req, res) => {
const userId = req.session.userId;
const [profile, orders, offers] = await Promise.all([
fetch(`http://user-service/users/${userId}`).then((r) => r.json()),
fetch(`http://order-service/orders?user=${userId}&limit=3`).then((r) => r.json()),
fetch("http://promo-service/offers?channel=mobile").then((r) => r.json()),
]);
// Return only what the mobile home screen shows
res.json({
greeting: `Hi, ${profile.firstName}`,
recentOrders: orders.map((o) => ({ id: o.id, status: o.status })),
topOffer: offers[0] ?? null,
});
});Sık sorulan sorular
BFF ile API gateway arasındaki fark nedir?
API gateway, yönlendirme, kimlik doğrulama ve hız sınırlamayı yürüten, tüm istemciler için ortak bir giriş noktasıdır. BFF ise ekranları için veriyi şekillendiren, belirli bir istemciye ait ayrı bir backend'dir ve BFF'ler çoğunlukla bir gateway'in arkasında yer alır.
BFF deseni ne zaman kullanılmalı?
Web ve mobil uygulamalar gibi birkaç farklı istemcinin aynı servislerden çok farklı veriye ihtiyaç duyduğu ya da ön yüz ekiplerinin API'lerini diğer her ekiple eşgüdüm yapmadan değiştirmek istediği durumlarda yardımcı olur. Basit ihtiyaçları olan tek bir istemci için genellikle tek bir API yeterlidir.
GraphQL, BFF ihtiyacını ortadan kaldırır mı?
Bazen. GraphQL her istemcinin tam olarak ihtiyaç duyduğu alanları istemesine izin verir ve aynı sorunun büyük kısmını çözer, ancak bazı ekipler oturum yönetimi, güvenlik ya da istemciye özgü mantık için yine de bir BFF ekler.
İlgili sayfalar
- API GatewayBackend ve API'ler, s. 3API gateway, bir grup backend servisinin önünde duran ve API isteklerini alan, kontrol eden ve yönlendiren tek giriş noktası görevi gören bir sunucudur.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- GraphQLBackend ve API'ler, s. 18GraphQL, istemcilerin tam ihtiyaç duyduğu veriyi, çoğunlukla tek bir endpoint üzerinden tek istekte istemesini sağlayan API sorgu dili ve çalışma zamanıdır.
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- OturumBackend ve API'ler, s. 33Oturum, sunucunun bir kullanıcıyı birçok istek boyunca hatırlama yöntemidir; genellikle veriler sunucuda tutulur ve tarayıcıya bir oturum kimliği verilir.
- OAuthGüvenlik, s. 21OAuth, bir uygulamanın kullanıcının parolasını hiç görmeden başka bir servisteki verilerine erişmesini sağlayan açık bir yetkilendirme standardıdır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin