BFF là một backend riêng cho từng loại client (web, iOS/Android, màn hình nội bộ), do chính đội frontend đó sở hữu, đứng giữa client và các service nghiệp vụ.
Vấn đề nó giải quyết: một API dùng chung cho mọi client luôn sai với ai đó. Mobile cần payload nhỏ, ít round-trip, ảnh kích thước khác; web desktop cần nhiều trường hơn. Nếu chỉ có một API chung thì hoặc mobile phải gọi 6 lần và bỏ 80% dữ liệu, hoặc API chung phình lên vì tham số điều kiện cho từng client — và mỗi lần web đổi UI lại phải sửa API mà mobile đang dùng.
BFF làm gì: gọi các service phía sau, ghép và cắt gọt dữ liệu đúng theo màn hình của client mình, giữ trạng thái phiên phía server nếu cần.
Khác gateway: gateway là một lớp cắt ngang chung (auth, rate limit, routing) cho mọi client. BFF là nhiều lớp, mỗi cái phục vụ một client và chứa được logic trình bày. Thường dùng cả hai: client → gateway → BFF → services.
Đánh đổi: thêm nhiều thành phần phải deploy và giám sát; code lặp giữa các BFF — đây là lặp có chủ ý, đừng vội gộp lại vì gộp là quay về API chung. BFF phải mỏng: chỉ ghép và biến đổi dữ liệu, quy tắc nghiệp vụ vẫn nằm ở service. Nhóm chỉ có một client web thì chưa cần BFF.