Postman vs Insomnia vs curl | Chọn tool debug API cho freelance Việt Nam【2026】
Freelance VN debug API: dùng curl khi cần tái hiện lỗi nhanh / gắn CI; Insomnia khi muốn GUI nhẹ, làm việc solo hoặc sync qua Git; Postman khi client/team bắt buộc collection dùng chung, mock server, hoặc test suite lớn. Không chọn một tool cho mọi việc — kết hợp GUI + curl export, rồi dùng JSON formatter và JWT decode trên trình duyệt khi cần đọc payload mà không upload token production.
Freelance và developer outsourcing Việt Nam thường nhận API từ nhiều client: staging khác domain, token khác TTL, tài liệu Swagger nửa cập nhật. Câu hỏi hay gặp không phải “tool nào mạnh nhất” mà “tool nào đủ nhanh trên laptop cá nhân, chia sẻ được với client, và không làm lộ secret”.
Bài này so sánh Postman, Insomnia và curl theo góc đó — kèm workflow khi response JSON rối hoặc 401 vì JWT hết hạn.
Ai cần đọc bài này
- Freelance / contractor nhận ticket “fix API” từ client JP/KR/US
- Dev fullstack tự gọi backend khi làm feature
- Sinh viên / fresher chuẩn bị demo API trên portfolio
- Ai đang phân vân cài Postman nặng máy vs Insomnia vs chỉ dùng terminal
Không phải bài review tính năng marketing — tập trung khi nào chọn tool nào và lỗi hay gặp trên dự án thật.
Ba tool khác nhau về “đơn vị công việc”
| Tool | Đơn vị chính | Điểm mạnh | Điểm yếu điển hình |
|---|---|---|---|
| Postman | Collection + Workspace | Team, mock, test script, docs | Nặng hơn; cloud/workspace dễ lộ secret nếu cấu hình kém |
| Insomnia | Request / Design + Git sync | Nhẹ, UX gọn, thân thiện OpenAPI | Hệ sinh thái plugin/test nhỏ hơn Postman |
| curl | Một lệnh HTTP | Có sẵn CI/SSH, dễ paste vào ticket | Không quản lý 50 endpoint; khó demo cho non-dev |
Cả ba đều gửi được GET/POST, header, body JSON. Khác ở quản lý request, chia sẻ, và tự động hóa.
So sánh nhanh theo tiêu chí freelance
| Tiêu chí | Postman | Insomnia / curl |
|---|---|---|
| Cài & khởi động | App nặng hơn; ổn nếu dùng hằng ngày | Insomnia nhẹ hơn. curl: có sẵn trên Git Bash / WSL / macOS / Linux |
| Nhiều môi trường (dev/stg/prod) | Environment + variables mạnh | Insomnia: environment tốt. curl: tự quản lý biến shell / .env |
| Chia sẻ với client | Workspace invite hoặc export collection | Insomnia: export / Git. curl: paste lệnh vào Slack/Linear |
| CI / script deploy | Newman (CLI) chạy collection | curl + bash là mặc định trên runner GitHub/GitLab |
| Không muốn tài khoản cloud | Dùng local được; cloud là tùy chọn | Insomnia local/Git. curl: không cần account |
| Đọc JSON / JWT phụ | Pretty trong app | Pretty trong Insomnia; curl thường pipe jq hoặc dán formatter local |
Cách đọc bảng
- Client đã có Postman Workspace → đừng cố ép Insomnia; join rồi export curl khi cần.
- Solo, máy yếu, thích Git → Insomnia hoặc folder
*.http+ curl. - Bug production cần một lệnh tái hiện trên server → curl trước, GUI sau.
Postman: khi nào đáng dùng
Hợp khi:
- Client gửi sẵn collection (rất phổ biến với team JP/US)
- Cần pre-request script lấy token, assert status/body
- Cần mock server tạm trong khi backend chưa sẵn
- PM/QA cũng mở cùng workspace (không chỉ dev)
Cẩn thận:
- Collection public hoặc invite rộng → API key trong biến environment dễ lộ
- Đừng lưu Bearer token production vào cloud sync nếu policy client cấm
- Trên máy cũ, Postman có thể chiếm RAM — đóng workspace không dùng
Ví dụ biến môi trường (không commit secret):
baseUrl = https://stg-api.client.example
# token chỉ gắn local override, không export public
Request mẫu trong collection:
GET {{baseUrl}}/v1/orders?status=pending
Authorization: Bearer {{accessToken}}
Accept: application/json
Insomnia: GUI nhẹ cho solo / Git
Hợp khi:
- Freelance một mình hoặc team nhỏ
- Muốn sync request qua Git thay vì cloud vendor
- Import OpenAPI/Swagger rồi chỉnh từng request
Cẩn thận:
- Client chỉ review được Postman → bạn vẫn phải export/chuyển
- Test/assert ít “ecosystem” hơn Postman; đừng kỳ vọng thay Newman cho mọi suite lớn
Pattern hay dùng: giữ folder api-debug/ trong repo private, Insomnia export JSON/YAML, review diff khi đổi contract.
curl: công cụ tái hiện lỗi và CI
Hợp khi:
- Paste vào ticket: “chạy lệnh này là reproduce”
- Chạy trên SSH bastion / container không GUI
- GitHub Actions / GitLab CI smoke test sau deploy
Ví dụ smoke test staging:
curl -sS -o /tmp/out.json -w "%{http_code}" \
-H "Authorization: Bearer $STG_TOKEN" \
-H "Accept: application/json" \
"https://stg-api.client.example/v1/me"
Gửi JSON body:
curl -sS -X POST "https://stg-api.client.example/v1/orders" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $STG_TOKEN" \
-d '{"sku":"ABC-01","qty":2}'
Cẩn thận:
- Dán token vào lệnh rồi commit script → secret lọt Git history
- Trên Windows PowerShell, quoting khác bash — ưu tiên Git Bash/WSL khi copy lệnh từ tài liệu Linux
Postman và Insomnia đều Export as curl — dùng GUI thiết kế, dùng curl để chia sẻ/CI.
Workflow debug thực tế (freelance)
Thứ tự cắt lỗi giúp giảm “đoán mò”:
- Xác nhận network: status code, latency, CORS (browser) vs gọi từ tool (không CORS)
- Xác nhận auth: header
Authorizationđúng scheme (Bearervs raw)? Token còn hạn? - Xác nhận body: Content-Type, JSON hợp lệ, field bắt buộc
- Xác nhận môi trường: đang đánh stg hay prod?
baseUrlcó nhầm không?
Cảnh 1: Response JSON một dòng / lỗi cú pháp
Trong Postman/Insomnia bật Pretty. Nếu log từ proxy bị cắt hoặc có trailing comma, dán vào JSON formatter trên trình duyệt — chạy local, phù hợp log nội bộ hơn pastebin lạ.
Cảnh 2: 401 — “token đúng mà vẫn fail”
Decode JWT bằng JWT decode (không verify chữ ký trên tool web; chỉ đọc claim). Kiểm tra:
expđã quá hạn chưa (lệch timezone laptop VN vs UTC)aud/isscó khớp environment khôngsubcó đúng user test không
JWT chỉ là Base64URL — ai cũng decode được. Không dán token production lên dịch vụ không rõ nguồn; ưu tiên tool chạy trong trình duyệt của bạn.
Cảnh 3: Client nói “Postman của tôi chạy được”
Xin export collection + environment (che secret) hoặc curl từ họ. So header-by-header: thiếu X-Api-Key, sai Accept-Language, hoặc body form-urlencoded thay vì JSON là nguyên nhân kinh điển.
Case study ngắn
A. Freelance nhận API thanh toán (staging)
Client gửi Postman collection 40 request. Bạn import Postman, tạo environment stg với baseUrl + token local. Mỗi khi cần báo bug, Export curl một request fail vào Linear. CI nightly chỉ cần 3 lệnh curl smoke — không cần cài Postman trên runner.
B. Solo app + OpenAPI
Backend tự viết, có openapi.yaml. Import Insomnia, gọi local localhost:3000. Khi deploy VPS, copy cùng request thành curl trong scripts/smoke.sh. Không trả phí cloud workspace.
C. Lỗi “chỉ fail trên máy em”
So sánh: Postman đang gắn proxy corporate / Insomnia không; hoặc curl thiếu -H "Accept: application/json" nên API trả XML/HTML. Chuẩn hóa bằng cùng một curl trong ticket.
Checklist chọn tool (in nhanh)
- Ai sẽ mở request: chỉ bạn / cả QA / cả client?
- Có bắt buộc Workspace Postman không?
- Secret đi đâu: local only, vault, hay biến CI?
- Cần assert tự động trong GUI hay đủ curl + exit code?
- Máy có chịu nổi app nặng không?
- Sau khi có response: cần format JSON / đọc JWT local không?
Gợi ý mặc định cho freelance VN: Insomnia (hoặc Postman nếu client bắt) + curl export + formatter/JWT local trên trình duyệt.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân hay gặp | Cách xử lý |
|---|---|---|
| 401 trên tool, 200 trên browser | Cookie session ≠ Bearer token | Đồng bộ cơ chế auth; copy đúng header |
| 200 nhưng body “lạ” | Sai Accept / version API | Thêm header version; so curl với browser DevTools |
| Collection chạy được, CI fail | Thiếu biến môi trường trên runner | Inject secret qua CI variables, không hard-code |
| JSON parse error | Trailing comma / HTML error page | Format JSON; kiểm tra status trước khi parse |
| Token “mới lấy” vẫn hết hạn | Đồng hồ máy lệch / dùng nhầm env | Kiểm exp; đồng bộ NTP; đúng baseUrl |
Câu hỏi thường gặp
Freelance nên dùng Postman hay Insomnia?
Client có workspace chung → Postman. Solo / Git-first → Insomnia. Nhiều người dùng cả hai theo dự án.
curl có thay Postman được không?
Thay cho smoke và reproduce; không thay quản lý collection lớn và demo cho non-dev.
Debug 401 thì sao?
Gửi lại cùng request + đọc claim JWT bằng tool local; đừng giả định “API chết” khi token hết hạn.
Có bắt buộc tài khoản cloud không?
Không. Local-only an toàn hơn cho secret; cloud chỉ khi team thật sự cần sync.
Liên kết liên quan
- Định dạng JSON (trình duyệt) — Pretty / bắt lỗi cú pháp khi đọc response
- JWT decode (trình duyệt) — Đọc
exp,sub,audkhi gặp 401 - Danh sách công cụ — Bộ tool debug phụ trợ không cần đăng ký