0

[Open Source] #66 - Bruno: Tái định nghĩa API Client với triết lý Local-first và Git-friendly

Hầu hết các công cụ API Client hiện nay như Postman hay Insomnia đang dịch chuyển mạnh mẽ lên Cloud, ép buộc người dùng đồng bộ dữ liệu lên server của họ. Điều này không chỉ gây lo ngại về bảo mật dữ liệu nhạy cảm mà còn làm phức tạp hóa quy trình làm việc nhóm khi phải phụ thuộc vào hạ tầng của bên thứ ba. Bruno xuất hiện như một lời giải đột phá: Trả lại quyền kiểm soát dữ liệu cho lập trình viên bằng triết lý Local-firstGit-friendly.

Dưới góc độ kỹ thuật, Bruno là một ví dụ mẫu mực về việc xây dựng ứng dụng Desktop hiệu năng cao bằng Electron kết hợp với tư duy thiết kế hệ thống lưu trữ dựa trên tệp tin (Filesystem-centric).

Github: https://github.com/usebruno/bruno


🛠️ 1. Nền tảng công nghệ: Tối ưu hiệu suất và Trải nghiệm Dev

Bruno không đi theo lối mòn của các ứng dụng Electron "nặng nề". Dự án chọn lọc những công nghệ hiện đại nhất để đảm bảo tốc độ phản hồi cực nhanh:

  • Lõi thực thi (Electron & React 19): Sử dụng phiên bản React mới nhất để đảm bảo UI mượt mà, kết hợp với Electron để can thiệp sâu vào hệ thống file cục bộ.
  • Build Tool (RSBuild/Rspack): Thay vì Webpack truyền thống, Bruno sử dụng RSBuild. Điều này giúp tốc độ khởi động (Cold start) và Hot-reload gần như tức thì, giải quyết triệt để vấn đề "chờ đợi" khi phát triển ứng dụng desktop lớn.
  • State Management (Redux Toolkit): Quản lý toàn bộ trạng thái phức tạp của các bộ sưu tập (Collections), các tab đang mở và biến môi trường một cách nhất quán và dễ debug.
  • Custom DSL (Bru Language): Dự án tự định nghĩa một ngôn ngữ đánh dấu riêng gọi là Bru, giúp lưu trữ thông tin API dưới dạng văn bản thuần túy (Plain text), dễ đọc và dễ quản lý.

🏗️ 2. Trụ cột kiến trúc: Filesystem-Centric & Git-friendly

Sự khác biệt lớn nhất của Bruno nằm ở cách nó nhìn nhận dữ liệu: Dữ liệu của bạn thuộc về thư mục dự án của bạn, không phải Cloud của nhà cung cấp.

  • Git-centric: Mỗi request API được lưu thành một file .bru riêng biệt. Bạn có thể commit, push, merge conflict các yêu cầu API ngay trên công cụ quản lý mã nguồn (Git) của mình giống như code ứng dụng. Điều này giúp việc cộng tác nhóm trở nên minh bạch và an toàn tuyệt đối.
  • Offline-only by Design: Bruno không có server trung gian để lưu trữ dữ liệu. Mọi truy vấn và lưu trữ đều diễn ra cục bộ, giúp loại bỏ hoàn toàn rủi ro rò rỉ thông tin đăng nhập (Secrets) lên Internet.
  • Kiến trúc Monorepo: Chia nhỏ hệ thống thành hơn 15 package (App, CLI, Lang, Filestore...), cho phép tái sử dụng bộ parser logic (bruno-lang) cho cả giao diện đồ họa (GUI) và công cụ dòng lệnh (CLI) để chạy Automation Testing.

🔄 3. Workflow: Luồng xử lý một Request

Sơ đồ dưới đây mô tả hành trình của một yêu cầu API từ lúc người dùng thao tác trên UI đến khi dữ liệu được ghi xuống đĩa cứng và thực thi:

image.png

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Sandbox Scripting với Node.js vm: Để cho phép người dùng viết script Pre-requestTests mà không gây nguy hiểm cho ứng dụng, Bruno sử dụng kỹ thuật cô lập môi trường thực thi. Điều này giúp thực thi JavaScript tùy chỉnh một cách an toàn, tránh việc script độc hại truy cập trái phép vào tài nguyên máy tính.
  2. Real-time File Watcher (chokidar): Tích hợp thư viện theo dõi file mạnh mẽ. Nếu đồng nghiệp của bạn cập nhật một file .bru thông qua lệnh git pull, Bruno sẽ tự động nhận diện thay đổi trên ổ đĩa và cập nhật giao diện ngay lập tức mà không cần người dùng phải reload ứng dụng.
  3. Hỗ trợ đa giao thức (Multi-protocol): Bruno không chỉ giới hạn ở REST. Kiến trúc của nó được thiết kế linh hoạt để hỗ trợ cả gRPC, GraphQLWebSockets trên cùng một giao diện quản lý, giúp nó trở thành công cụ vạn năng cho các kỹ sư Backend.

⚖️ 5. So sánh chiến lược

Tiêu chí Bruno (Open Source) Postman / Insomnia (SaaS)
Lưu trữ dữ liệu Tệp tin cục bộ (.bru) Database riêng & Cloud Sync
Cộng tác nhóm Qua Git (Branch/Merge) Qua Workspace của nhà cung cấp
Quyền riêng tư Tuyệt đối (No cloud) Phụ thuộc chính sách bên thứ 3
Giá cả Miễn phí (Bản Golden Edition mua 1 lần) Thu phí thuê bao hàng tháng

✅ Kết luận: Tại sao Bruno là hình mẫu lý tưởng?

Bruno chứng minh rằng đôi khi việc "quay lại với những thứ cơ bản" (hệ thống file) lại là bước tiến lớn nhất trong trải nghiệm người dùng. Dự án giải quyết triệt để nỗi lo về Vendor Lock-in bằng cách đưa dữ liệu về đúng nơi nó nên thuộc về: Thư mục mã nguồn của bạn.

Đối với các kỹ sư phần mềm, nghiên cứu Bruno sẽ giúp bạn hiểu sâu về:

  • Cách xây dựng ứng dụng Electron tối ưu với RSBuild.
  • Tư duy thiết kế Domain Specific Language (DSL) cho dữ liệu đặc thù.
  • Kỹ thuật quản lý trạng thái phức tạp trong ứng dụng Desktop với Redux.

Hy vọng bản phân tích này mang lại cho bạn những góc nhìn giá trị về kiến trúc công cụ phát triển hiện đại. Đừng quên Upvote và Follow để theo dõi những "kỳ quan" mã nguồn tiếp theo nhé!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.