Apa itu Backend for Frontend (BFF)

Backend for Frontend (BFF) adalah backend per klien yang membentuk ulang data microservice untuk satu frontend. Pelajari pola ini, BFF vs gateway, dan kapan menggunakannya.

Medy Evrard

2 July 2026

Apa itu Backend for Frontend (BFF)

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Backend for Frontend (BFF) adalah layanan backend khusus yang dibangun untuk satu frontend spesifik. Alih-alih setiap klien (web, iOS, Android, pihak ketiga) berbicara dengan backend serbaguna yang sama, masing-masing mendapatkan lapisan sisi-servernya sendiri yang mengagregasi dan membentuk ulang data dari layanan mikro Anda menjadi muatan persis yang dibutuhkan antarmuka tersebut.

Sam Newman menamai dan mempopulerkan pola ini pada tahun 2015, berdasarkan pekerjaan yang dilakukan di SoundCloud. Lebih dari satu dekade kemudian, pola BFF masih menjadi alat standar bagi tim yang menjalankan layanan mikro di balik beberapa aplikasi klien, dan Microsoft mendokumentasikannya sebagai pola arsitektur cloud inti.

tombol

Masalah yang dipecahkan oleh BFF

Bayangkan sebuah sistem yang dimulai dengan satu aplikasi web dan satu backend. Backend mengekspos endpoint REST, aplikasi web mengonsumsinya, dan hidup terasa sederhana. Kemudian perusahaan meluncurkan aplikasi seluler. Lalu integrasi dengan mitra. Lalu widget jam tangan pintar. Tiba-tiba empat klien yang sangat berbeda semuanya menarik dari backend yang sama, dan backend itu mencoba menyenangkan semua orang sekaligus.

Ini menciptakan dua masalah berulang.

Over-fetching dan under-fetching. Sebuah endpoint serbaguna mengembalikan bentuk data yang tetap. Dasbor desktop mungkin menginginkan catatan pelanggan lengkap dengan riwayat pesanan, rekomendasi, dan pengaturan akun dalam satu respons. Aplikasi seluler pada koneksi seluler yang tidak stabil hanya menginginkan tiga bidang dan tidak lebih. Ketika keduanya memanggil endpoint yang sama, salah satunya mendapatkan jumlah data yang salah. Klien seluler entah mengunduh muatan yang membengkak yang harus dibuang (over-fetching) atau harus melakukan beberapa perjalanan pulang-pergi tambahan untuk mengumpulkan apa yang dibutuhkannya (under-fetching).

Klien yang cerewet (chatty clients). Ketika backend tidak disesuaikan dengan layar, klien mengkompensasinya dengan melakukan banyak panggilan. Layar beranda seluler yang membutuhkan data profil, jumlah notifikasi, dan feed mungkin memicu tiga atau empat permintaan terpisah ke tiga atau empat layanan mikro, kemudian menggabungkan hasilnya di perangkat. Setiap perjalanan pulang-pergi ekstra menyebabkan latensi dan menghabiskan baterai, dan logika orkestrasi bocor ke klien di mana sulit untuk diuji dan di-versi.

Ketegangan utamanya bersifat organisasional sama seperti teknis. Backend bersama memiliki tuntutan yang bersaing dari setiap tim frontend. Perubahan satu tim harus divalidasi terhadap kebutuhan setiap tim lain sebelum diluncurkan, yang mengubah backend menjadi hambatan dan sumber gesekan antar-tim.

Bagaimana pola BFF bekerja

Pola BFF memperkenalkan lapisan sisi-server tipis yang berada di antara satu frontend dan layanan hilir Anda. Setiap antarmuka mendapatkan backendnya sendiri.

[ Aplikasi Web ]    --->  [ Web BFF ]    ---\
[ Aplikasi iOS ]    --->  [ iOS BFF ]    -----> [ Layanan Mikro ]
[ Aplikasi Android] --->  [ Android BFF ] ---/

Setiap BFF melakukan tiga tugas untuk kliennya:

  1. Agregasi. Ia memanggil layanan mikro hilir yang dibutuhkan layar dan menggabungkan responsnya, sehingga klien membuat satu permintaan alih-alih lima. Ini adalah agregasi API yang diterapkan pada satu pengalaman pengguna. Jika Anda menginginkan versi umum dari ide itu, lihat penjelasan kami tentang pola API aggregator.
  2. Bentuk ulang. Ia memangkas bidang, mengganti nama menjadi istilah yang ramah klien, meratakan struktur berlapis, dan memformat nilai sesuai harapan antarmuka tersebut. BFF seluler mengembalikan muatan yang ramping; BFF desktop mengembalikan muatan yang kaya.
  3. Terjemahkan. Ia menangani masalah spesifik klien seperti strategi paginasi, caching respons yang disesuaikan dengan klien tersebut, dan pilihan protokol, tanpa memaksakan keputusan tersebut pada layanan bersama di bawahnya.

Layanan mikro hilir tetap serbaguna dan agnostik terhadap frontend. Mereka mengekspos kemampuan yang bersih dan dapat digunakan kembali. BFF adalah tempat penyesuaian khusus klien berada, yang menjaga logika tersebut keluar dari layanan mikro maupun aplikasi klien. Jika Anda baru mengenal lapisan layanan di bawahnya, ikhtisar kami tentang layanan mikro versus API dan perpindahan dari monolit ke layanan mikro memberikan konteksnya.

Satu BFF per pengalaman klien

Panduan inti Newman singkat: satu pengalaman, satu BFF. Jika aplikasi iOS dan Android Anda menawarkan pengalaman yang berbeda secara signifikan, berikan masing-masing BFF-nya sendiri. Jika aplikasi web dan aplikasi seluler berbeda, aturan yang sama berlaku.

Inti dari aturan ini adalah menjaga setiap BFF tetap fokus. Saat satu BFF mencoba melayani dua klien dengan kebutuhan yang berbeda, ia mulai mengumpulkan logika kondisional ("jika seluler, kembalikan ini; jika web, kembalikan itu"), dan Anda kembali ke backend serbaguna dengan semua masalah koordinasi yang sama. BFF yang fokus tetap kecil, yang merupakan sifat yang membuat seluruh pola ini membuahkan hasil.

Ada pengecualian masuk akal yang Newman sendiri ambil dari SoundCloud: ketika satu tim memiliki dua klien yang serupa, seperti aplikasi iOS dan Android yang berbagi pengalaman yang hampir sama, masuk akal untuk berbagi satu BFF seluler di antara keduanya. Faktor penentu adalah kepemilikan dan kesamaan, bukan nama platform. Aturan ini adalah nilai baku, bukan hukum.

Kepemilikan milik tim frontend

BFF bukanlah lapisan yang dibangun dan diserahkan oleh tim platform. Tim frontend yang memiliki klien adalah pemilik BFF-nya. Ini adalah bagian kedua dari apa yang membuat pola ini berfungsi.

Ketika tim frontend memiliki BFF, mereka mengontrol irama rilisnya, memilih bahasa dan runtime-nya, memprioritaskan daftar tugasnya, dan mengirimkan perubahan ke klien dan layanan pendukungnya secara bersamaan. Perubahan UI yang membutuhkan endpoint teragregasi baru tidak memerlukan pengajuan tiket ke tim backend terpisah dan menunggu giliran di antrean tim tersebut. Tim yang merasakan masalah memiliki solusi.

Otonomi ini adalah kemenangan sejati. BFF menggeser batas sehingga keputusan khusus klien dibuat oleh orang-orang yang bertanggung jawab atas klien, yang persis seperti tempat pemikiran konektivitas berbasis API menempatkan tingkat "pengalaman".

BFF vs. API Gateway

Ini adalah perbandingan yang sering membuat kebanyakan tim keliru, karena BFF dan API gateway terlihat serupa dari sebuah diagram. Keduanya berada di antara klien dan layanan. Keduanya dapat merutekan dan mengagregasi. Namun, keduanya menjawab pertanyaan yang berbeda.

Sebuah API gateway adalah titik masuk serbaguna yang menangani masalah lintas-sektor untuk semua lalu lintas: otentikasi, pembatasan laju (rate limiting), perutean, penghentian TLS, dan pencatatan permintaan. Ini dimiliki oleh tim platform atau infrastruktur dan sengaja agnostik terhadap klien. Satu gateway melayani semua orang dengan cara yang sama.

BFF adalah kebalikannya. Ia dirancang khusus untuk klien, dimiliki oleh tim frontend, dan seluruh tujuannya adalah untuk berbeda untuk setiap antarmuka. Ini adalah tempat di mana pembentukan muatan klien tertentu berada, bukan titik kemacetan bersama.

Keduanya bukan saingan. Dalam tata letak produksi yang umum, API gateway berada di depan, menangani otentikasi, pembatasan laju, dan pemantauan untuk semua lalu lintas, lalu merutekan setiap klien ke BFF khusus di belakang gateway. Arsitektur referensi Microsoft menunjukkan persis seperti ini: sebuah gateway mengelola masalah lintas-sektor, dengan satu BFF tanpa server per klien di belakangnya. Gunakan gateway untuk apa yang sama di semua klien, dan BFF untuk apa yang berbeda. (Kami membahas versi mendalam dari kontras ini dalam artikel terpisah; di sini cukup untuk mengetahui bahwa mereka berada di lapisan yang berbeda dan menjawab kebutuhan yang berbeda.)

Untuk lanskap gateway di sekitarnya, perbandingan yang dipublikasikan ini membantu: API management vs. API gateway, API gateway vs. load balancer, dan service mesh vs. API gateway.

Kapan menggunakan BFF

Pola ini terbukti bermanfaat ketika kondisi berikut terpenuhi:

Kapan tidak menggunakan BFF

Pola ini tidak gratis, dan ada kasus jelas di mana ia menambah biaya tanpa imbalan:

Kerugian yang jujur

Bahkan ketika BFF adalah pilihan yang tepat, Anda menanggung biaya nyata. Memulainya dengan mata terbuka adalah bagian dari penggunaan pola ini dengan baik.

Duplikasi kode. Ini adalah pertukaran utama, dan dokumentasi Microsoft menyebutkannya secara langsung. Ketika tiga BFF semua perlu memanggil pemeriksaan otentikasi yang sama atau memformat tanggal yang sama dengan cara yang sama, logika itu cenderung ditulis tiga kali. Anda menukar duplikasi dengan penyesuaian. Solusinya adalah disiplin: simpan logika yang benar-benar dibagikan dalam pustaka yang diimpor oleh BFF, dan sisakan BFF itu sendiri untuk pembentukan khusus klien. Dorong masalah lintas-sektoral (otentikasi, pembatasan laju, pemantauan) ke gateway daripada mengimplementasikannya kembali per BFF.

Lebih banyak layanan untuk dioperasikan. Setiap BFF adalah unit yang dapat digunakan lainnya dengan siklus hidupnya sendiri, pipeline, rotasi siaga, dan permukaan keamanan. Lebih banyak layanan berarti lebih banyak overhead operasional.

Satu lompatan jaringan ekstra. Klien tidak lagi berbicara langsung ke layanan. BFF menambahkan satu lompatan, dan itu dapat menambah latensi. Ini biasanya pertukaran yang berharga karena BFF menghilangkan beberapa perjalanan pulang-pergi klien, tetapi ini adalah biaya yang harus diukur, bukan diasumsikan.

Risiko BFF menjadi bengkak. Jika BFF mulai melayani beberapa klien atau menyerap logika bisnis yang seharusnya berada di layanan mikro, ia akan kembali ke backend serbaguna yang Anda coba hindari. Jaga agar tetap ramping.

Menjaga kontrak BFF tetap sinkron dengan Apidog

Bagian sulit dalam menjalankan BFFs dalam praktik adalah kontrak. Setiap BFF mengekspos API yang menghadap kliennya sendiri, dan itu juga bergantung pada kontrak layanan mikro di bawahnya. Itu adalah banyak antarmuka yang bergerak di antara tim yang memiliki lapisan berbeda, dan penyimpangan di antara mereka adalah tempat asal bug dan klien yang rusak.

Di sinilah Apidog cocok dengan alur kerja. Apidog adalah platform desain, pengujian, mocking, dan dokumentasi API, sehingga kontrak API setiap BFF memiliki satu rumah tempat tim frontend dan backend dapat bekerja:

Untuk memperjelas ruang lingkup: Apidog tidak membangun, menghosting, atau menjalankan BFF Anda, dan itu bukan API gateway. Ini adalah tempat Anda merancang, melakukan mock, menguji, dan mendokumentasikan kontrak API yang menjadi dasar setiap BFF, yang menjaga tim frontend dan backend tetap sinkron saat BFF berkembang. Memperlakukan setiap BFF sebagai produk dengan kontrak yang stabil dan terdokumentasi dengan baik adalah yang membuat pola ini berkelanjutan.

FAQ

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.

Apa itu Backend for Frontend (BFF)