Bruno đưa collection API vào Git, không qua đám mây
Ở những khách hàng cấm đưa dữ liệu lên dịch vụ bên ngoài, một API client không có tài khoản và không đồng bộ lên mây sẽ bớt cho bạn nhiều câu hỏi từ đội bảo mật.
Tóm tắt nhanh
- Bruno lưu collection thành file văn bản thuần (Bru) trong một thư mục, nên bạn có thể branch, diff, review và merge như code.
- Bruno không có cloud sync, không tài khoản, và dự án nói rõ sẽ không bao giờ thêm cloud sync.
- Secret được lưu cục bộ và phải được gỡ khỏi collection trước khi đẩy lên Git hay xuất file.
Ở nhiều công ty khách hàng, câu hỏi đầu tiên của đội bảo mật khi thấy một công cụ mới là: dữ liệu đi đâu? Với Bruno, câu trả lời ngắn hơn hẳn thường lệ. Trang chủ của Bruno ghi thẳng: không cloud sync, không tài khoản, không đăng nhập.
Với một FDE, chi tiết này quan trọng hơn mọi tính năng khác. Không có tài khoản nào phải cấp, không có máy chủ của nhà cung cấp nào giữ collection, nên danh sách điều cần giải trình với đội bảo mật cũng ngắn lại.
Còn các request API bạn dựng dần khi làm tích hợp cùng kỹ sư phía khách sẽ thành bản ghi cách hai hệ thống nói chuyện với nhau, và nó cần nằm ở chỗ cả hai đội cùng thấy.
Collection là file, không phải một workspace trên mây
Tài liệu chính thức mô tả Bruno là API client thân thiện với Git và ưu tiên offline. Theo README trên GitHub, Bruno lưu collection thẳng vào một thư mục trên ổ đĩa, mỗi request được ghi bằng Bru, một ngôn ngữ markup dạng văn bản thuần.
Vì là văn bản thuần, thư mục đó có thể nằm ngay trong repo code. Tài liệu Bruno nói định dạng dễ đọc này giúp lập trình viên hiểu ngay collection vừa thay đổi gì. README cũng cho biết bạn dùng Git hay bất kỳ hệ thống quản lý phiên bản nào cũng được.
Đây là khác biệt cốt lõi so với các công cụ giữ collection trên máy chủ của nhà cung cấp. Trang so sánh của chính Bruno, tức góc nhìn của người bán, đặt mô hình lưu trữ đám mây kèm đăng nhập của Postman cạnh mô hình ứng dụng desktop cục bộ của Bruno, nơi khái niệm tài khoản không tồn tại.
Một lập trình viên viết trên DEV Community kể đã chuyển sang Bruno vì quá khổ sở khi quản lý phiên bản một file collection Postman lớn trong Git.
Một ví dụ: thêm một endpoint vào dự án tích hợp
Thử hình dung bạn đang nối hệ thống của mình với API đơn hàng của khách. Repo dự án có thư mục code tích hợp, và bên cạnh là một thư mục collection Bruno chứa các request: lấy token, liệt kê đơn hàng, tạo đơn thử. Mỗi request là một file Bru riêng.
Khách vừa thêm tham số lọc theo trạng thái cho endpoint liệt kê đơn hàng. Bạn tạo branch mới, sửa request trong Bruno, lưu lại. Git ghi nhận một thay đổi nhỏ trong một file văn bản, đúng như trang chủ Bruno mô tả: branch, diff, review rồi merge collection API.
Bạn mở pull request. Kỹ sư phía khách đọc diff, thấy đúng một dòng tham số được thêm, đối chiếu với tài liệu của họ rồi approve. Khi họ kéo branch main về, request mới đã có sẵn trong Bruno trên máy họ, không ai phải gửi file xuất qua email hay mời nhau vào workspace.
Giá trị thật nằm ở chỗ thay đổi API và thay đổi code đi cùng một pull request. Người review thấy cả hai, và lịch sử Git trả lời được câu hỏi ba tuần sau: ai đổi request này, và vì sao.
Secret là chỗ dễ vấp nhất
Collection nằm trong Git thì mọi thứ trong collection cũng có thể lọt vào Git. Tài liệu Bruno cảnh báo rõ: dù chia sẻ qua source control hay xuất file, secret phải được gỡ khỏi collection trước. Secret được lưu cục bộ trên máy.
Cách làm gọn nhất là tách hẳn giá trị khỏi request: file request trong repo chỉ giữ tên biến cho token hay API key, còn giá trị thật nằm trên máy từng người.
Nếu cần lưu giá trị đó thành file, hãy để file ấy ngoài repo hoặc liệt kê nó trong .gitignore, theo đúng quy ước Git quen thuộc. Thống nhất cách này với đội khách trước commit đầu tiên, để mỗi người tự cấp credential cho máy mình.
Thêm một thói quen cụ thể: trước mỗi lần push, chạy git diff --staged trên thư mục collection và tìm các chuỗi như Bearer, token hay api_key. Nếu thấy một giá trị thật thay vì tên biến, gỡ nó ra rồi mới commit. Việc này tốn vài giây, còn dọn một token khỏi lịch sử Git thì tốn hơn nhiều.
Khi nào Bruno không phải lựa chọn đúng?
README của dự án nói rõ Bruno chỉ chạy offline và sẽ không bao giờ có cloud sync. Nếu đội khách quen với một workspace chung cập nhật tức thì, không cần biết Git, họ sẽ phải đổi thói quen. Một đội vận hành ít đụng tới repo sẽ cần thời gian làm quen, và bạn nên tính khoản đó vào kế hoạch.
README cũng cho biết phần lớn tính năng miễn phí và mã nguồn mở, còn các bản thương mại trả phí có thêm tính năng. Trước khi hứa với khách điều gì, hãy kiểm tra tính năng bạn cần thuộc bản nào.
Học gì trước, và đưa vào CV thế nào?
Thứ cần học trước không phải giao diện Bruno mà là kỷ luật Git quanh nó: đặt thư mục collection ở đâu trong repo, quy ước review thay đổi API, và cách tách secret khỏi file được commit. Nếu đã quen làm việc qua pull request, phần lớn quy trình này sẽ quen thuộc với bạn.
Khi viết CV hoặc trả lời phỏng vấn FDE, đừng ghi chung chung là “dùng Bruno”. Hãy kể bạn đã đưa collection API vào repo dùng chung với đội khách, review thay đổi qua pull request, và giữ secret ngoài lịch sử Git. Nhà tuyển dụng đọc được ở đó cả kỹ năng tích hợp lẫn ý thức bảo mật.
Một công cụ không gửi gì ra ngoài thì có ít câu hỏi hơn phải trả lời với đội bảo mật của khách. Bruno đặt cược vào đúng điều đó, và phần còn lại phụ thuộc vào cách bạn giữ repo sạch.
Bài này có hữu ích không?
Cảm ơn bạn đã góp ý!