Phần lớn thời gian trong ngày của một nhà phát triển backend là các vòng lặp nhỏ, nhanh chóng. Gửi một yêu cầu đến một endpoint, đọc JSON, điều chỉnh, lặp lại. Nếu sử dụng giao diện người dùng đồ họa (GUI) nặng nề cho việc này, bạn sẽ tốn nhiều thời gian chờ đợi nó tải hơn là thực hiện công việc.
Các công cụ CLI gọn nhẹ thay đổi điều đó. Chúng được phân phối dưới dạng một tệp nhị phân duy nhất hoặc một gói có thể chạy bằng npx, khởi động chưa đầy một giây và chỉ thực hiện một công việc mà không cần trình hướng dẫn cấu hình. Bạn tích hợp chúng vào các script shell và công việc CI, và chúng không cản trở bạn. Đối với công việc API và backend, một bộ công cụ nhỏ này bao gồm hầu hết các vòng lặp: gửi yêu cầu, phân tích phản hồi, hiển thị cổng cục bộ và chạy bộ thử nghiệm của bạn.
Hướng dẫn này chọn ra mười công cụ xứng đáng có mặt trong PATH của một nhà phát triển backend. Mỗi phần sẽ trình bày một lệnh duy nhất để chứng minh khả năng hoạt động của nó. Chủ đề là dấu chân: những gì cài đặt nhanh, khởi động nhanh và hầu như không yêu cầu gì trước khi trở nên hữu ích. Để có cái nhìn tổng thể hơn về cách chúng kết hợp với nhau, hướng dẫn về phát triển API sẽ cung cấp bối cảnh.
Điều gì làm cho một công cụ CLI trở nên “gọn nhẹ” cho việc phát triển
Gọn nhẹ là về dấu chân và sự ma sát, chứ không phải về số lượng tính năng mà một công cụ nhồi nhét. Khi quyết định những gì thuộc về bộ công cụ của bạn, hãy cân nhắc bốn điều sau:
- Kích thước và dạng cài đặt. Một tệp nhị phân tĩnh duy nhất hoặc một gói
npxnhỏ tốt hơn bất cứ thứ gì kéo theo một runtime và một lockfile. - Tốc độ khởi động. Công cụ nên chạy trước khi bạn chuyển về trình soạn thảo của mình. Các tệp nhị phân Rust và Go khởi động lạnh trong mili giây, điều này quan trọng khi bạn gọi chúng trong một vòng lặp.
- Cấu hình đến kết quả đầu tiên. Cấu hình không cần thiết để có một kết quả mặc định hữu ích là tiêu chuẩn. Nếu nó cần một tệp dự án, một tài khoản và một bảng điều khiển trước tiên, thì nó không gọn nhẹ.
- Khả năng kết hợp. Nó đọc từ stdin, ghi ra stdout, đặt một mã thoát thực sự và truyền vào công cụ tiếp theo. Đó là điều làm cho một công cụ nhỏ có giá trị hơn kích thước của nó.
Các công cụ dưới đây được sắp xếp gần đúng từ nhỏ nhất và chuyên biệt nhất đến những công cụ đầy đủ hơn. curl đã có sẵn trên máy của bạn; phần còn lại có thể được cài đặt nhanh chóng.
curl
curl là tiêu chuẩn mà mọi công cụ HTTP khác đều đo lường theo. Nó đã có trên hầu hết mọi máy tính, hỗ trợ mọi giao thức bạn sẽ tiếp xúc và thực hiện chính xác những gì bạn yêu cầu. Để kiểm tra nhanh xem một endpoint có hoạt động hay không, không có gì nhanh hơn để sử dụng.
curl -s -X POST https://api.github.com/repos/curl/curl/issues \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Test issue"}'
Tùy chọn -s tắt bộ đếm tiến độ để phản hồi được truyền đi một cách sạch sẽ. Thêm -i để xem các tiêu đề, -w '%{http_code}' để chỉ in mã trạng thái, và --fail để curl trả về mã thoát khác 0 khi gặp lỗi 4xx hoặc 5xx, điều này hữu ích trong một kiểm tra CI.
Tốt nhất cho: viết script, kiểm tra sức khỏe CI và bất kỳ yêu cầu nào bạn muốn sao chép-dán và chia sẻ. Một lệnh curl hoạt động trên máy của bất kỳ đồng nghiệp nào.
Hạn chế thực tế: cú pháp cờ phức tạp và việc xử lý thân JSON là thủ công. Đối với các yêu cầu tương tác nhanh, hai công cụ tiếp theo thân thiện hơn.
HTTPie
HTTPie (http) là curl đã được gọt giũa các góc cạnh, được xây dựng cho con người gõ yêu cầu bằng tay. JSON là mặc định, đầu ra được tô màu và định dạng, và bạn xây dựng một yêu cầu từ các mục key=value đơn giản thay vì phải nhớ các cờ.
http POST httpbin.org/post name=apidog role=api-tool active:=true
Điều đó gửi một thân JSON là {"name": "apidog", "role": "api-tool", "active": true}. Dấu = đặt một chuỗi, := đặt một giá trị JSON thô, và header:value đặt một tiêu đề. Không cần trích dẫn một khối JSON, không cần quản lý -H và -d. Phản hồi được in đẹp mắt.
Tốt nhất cho: khám phá API tương tác nơi khả năng đọc được ưu tiên.
Hạn chế thực tế: nó là một gói Python, vì vậy nó khởi động lạnh chậm hơn một tệp nhị phân gốc và cần Python trên máy. Nếu tốc độ khởi động quan trọng, hãy dùng xh.
xh
xh là cú pháp của HTTPie trong một tệp nhị phân Rust duy nhất. Nó triển khai lại phong cách yêu cầu-mục của HTTPie, vì vậy name=value và := hoạt động tương tự, nhưng nó được phân phối dưới dạng một tệp liên kết tĩnh không có runtime và khởi động nhanh hơn khoảng 30%. Nó cũng hỗ trợ HTTP/2 và HTTP/3.
xh POST httpbin.org/post name=apidog age:=24
Trải nghiệm người dùng tương tự như HTTPie, khởi động gần như tức thì. Bởi vì nó là một tệp nhị phân duy nhất không có phụ thuộc, nó có thể được đưa vào một hình ảnh CI gọn nhẹ hoặc một container mà không cần kéo theo Python. Dự án xh trên GitHub cung cấp các tệp nhị phân được xây dựng sẵn cho Linux, macOS và Windows.
Tốt nhất cho: các nhà phát triển thích cảm giác của HTTPie nhưng muốn tốc độ gốc và cài đặt không phụ thuộc cho các script và container.
Hạn chế thực tế: nó bao gồm bề mặt HTTPie phổ biến, không phải tất cả các plugin. Đối với hầu hết các công việc yêu cầu, khoảng trống đó hầu như không bao giờ xuất hiện.
jq
jq làm cho mọi công cụ HTTP khác trở nên hữu ích hơn. Nó là một tệp nhị phân duy nhất giúp lọc và định hình lại JSON trên dòng lệnh, để bạn có thể trích xuất một trường từ phản hồi API thay vì phải xem xét toàn bộ khối dữ liệu.
curl -s https://api.github.com/repos/stedolan/jq | jq '.stargazers_count'
Điều đó chỉ in ra số lượng sao. jq có một ngôn ngữ truy vấn đầy đủ: .items[] | .name ánh xạ trên một mảng, select(.active) lọc, và -r cung cấp đầu ra thô không có dấu ngoặc kép để bạn có thể chuyển nó vào một biến shell. Nó là cầu nối giữa một lời gọi API và phần còn lại của script của bạn.
Tốt nhất cho: trích xuất và chuyển đổi các trường từ phản hồi JSON trong các script và CI.
Hạn chế thực tế: cú pháp truy vấn có một đường cong học tập, và các phép biến đổi lồng ghép sâu trở nên khó hiểu. Đối với truy cập trường đơn giản thì nó rất dễ.
gh (GitHub CLI)
gh mang API của GitHub đến terminal của bạn mà không cần bạn phải viết một lời gọi curl nào. Nó xử lý xác thực một lần qua gh auth login, sau đó gói gọn các pull request, vấn đề, bản phát hành và kho lưu trữ trong các lệnh đơn giản. Đối với các nhóm backend có quy trình triển khai và đánh giá diễn ra trên GitHub, nó loại bỏ một tab trình duyệt khỏi vòng lặp.
gh pr create --title "Add rate limiting" --body "Closes #42" --base main
Điều đó mở một PR từ nhánh hiện tại của bạn. gh pr checks theo dõi CI, gh run watch theo dõi một workflow trực tiếp, và gh api cung cấp cho bạn một client đã xác thực, có phân trang cho bất kỳ endpoint nào mà các lệnh được gói không bao gồm.
Tốt nhất cho: viết script cho GitHub: mở PR từ CI, tạo bản phát hành và truy vấn API mà không cần quản lý token thủ công.
Hạn chế thực tế: nó chỉ dành cho GitHub, vì vậy các công ty dùng GitLab hoặc Bitbucket sẽ không nhận được gì từ nó.ngrok
ngrok hiển thị một cổng cục bộ ra một URL công khai qua một đường hầm an toàn. Bạn đang xây dựng một trình xử lý webhook, hay cần ai đó truy cập máy chủ phát triển của bạn từ bên ngoài mạng? Nó biến localhost thành một liên kết có thể chia sẻ chỉ với một lệnh. Agent là một tệp nhị phân không phụ thuộc, có thể chạy ở bất cứ đâu.
ngrok http 8080
Điều đó chuyển tiếp một URL https:// công khai đến cổng cục bộ 8080 của bạn và in nó ra terminal. Nó cũng chạy một trình kiểm tra lưu lượng truy cập tại http://127.0.0.1:4040 nơi bạn có thể phát lại mọi yêu cầu đã đi qua, điều này thực sự tiết kiệm thời gian khi bạn gỡ lỗi một webhook thanh toán hoặc Git mà bạn không kiểm soát.
Tốt nhất cho: phát triển webhook, chia sẻ công việc đang tiến hành với đồng đội và kiểm tra các callback từ bên thứ ba với mã cục bộ.
Hạn chế thực tế: đây là một dịch vụ thương mại có gói miễn phí; gói miễn phí sẽ xoay vòng URL của bạn sau mỗi phiên và giới hạn tốc độ. Để có HTTPS cục bộ ổn định với tên cố định, hãy dùng mkcert thay thế.
mkcert
mkcert tạo chứng chỉ HTTPS đáng tin cậy cục bộ mà không cần cấu hình. Được viết bằng Go bởi Filippo Valsorda, nó là một tệp nhị phân duy nhất tạo ra một cơ quan cấp chứng chỉ cục bộ, cài đặt nó vào kho lưu trữ đáng tin cậy của hệ thống và cấp chứng chỉ mà trình duyệt của bạn chấp nhận mà không có cảnh báo. Đó là cách bạn chạy https://localhost cục bộ mà không có ổ khóa màu đỏ đáng sợ.
mkcert -install
mkcert localhost 127.0.0.1 myapp.local
Dòng đầu tiên thiết lập CA cục bộ một lần. Dòng thứ hai cấp chứng chỉ và khóa cho các tên bạn liệt kê, sẵn sàng để cung cấp cho máy chủ phát triển hoặc reverse proxy của bạn. Không cần các câu lệnh OpenSSL phức tạp, không có chứng chỉ tự ký mà bạn phải bỏ qua mỗi lần tải lại. Việc kiểm tra chuyển hướng OAuth, cookie bảo mật hoặc bất cứ điều gì hoạt động khác trên HTTPS trở nên dễ dàng hơn nhiều.
Tốt nhất cho: có HTTPS thực sự, đáng tin cậy trên môi trường phát triển cục bộ để nó khớp với sản xuất.
Hạn chế thực tế: nó chỉ dành cho phát triển. Không bao giờ sử dụng chứng chỉ mkcert trong môi trường sản xuất, và hãy bảo vệ khóa CA gốc mà nó tạo ra; nó có thể ký cho bất kỳ tên nào trên máy của bạn.
watchexec
watchexec chạy lại một lệnh bất cứ khi nào tệp thay đổi. Nó là một tệp nhị phân Rust duy nhất giám sát một thư mục và khởi động lại máy chủ của bạn hoặc chạy lại các thử nghiệm ngay khi bạn lưu. Nó tôn trọng .gitignore theo mặc định, vì vậy nó sẽ không kích hoạt trên các tạo phẩm xây dựng.
watchexec -e py -r 'pytest tests/'
Tùy chọn -e py lọc các tệp Python, và -r khởi động lại một tiến trình chạy dài thay vì tạo các tiến trình mới. Hướng nó đến bất kỳ lệnh nào: watchexec -r 'go run .' cho máy chủ Go, watchexec 'npm test' cho bộ JS. Nó không phụ thuộc vào ngôn ngữ, vì vậy một công cụ có thể bao phủ mọi dự án thay vì một trình giám sát cho từng stack.
Tốt nhất cho: các vòng lặp chỉnh sửa-chạy chặt chẽ trên máy chủ cục bộ hoặc bộ thử nghiệm, mà không cần chế độ giám sát cụ thể theo framework.
Hạn chế thực tế: nó giám sát và chạy lại; nó không thực hiện tải lại module nóng (hot-module reload) hoặc bảo toàn trạng thái trong tiến trình.
Docker CLI
Docker CLI là công cụ nặng nhất ở đây, và nó xứng đáng có vị trí này. Khi bạn cần một Postgres, Redis thực sự, hoặc toàn bộ phụ thuộc cho phát triển cục bộ, một lệnh docker run cung cấp cho bạn một phiên bản dùng một lần để loại bỏ khi bạn hoàn thành. Không cần cài đặt cấp hệ thống, không có dịch vụ nào còn sót lại.
docker run --rm -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:16
Tùy chọn --rm xóa container khi thoát, -e đặt mật khẩu, và -p ánh xạ cổng đến máy chủ của bạn. Ứng dụng của bạn kết nối đến localhost:5432 và bạn có một cơ sở dữ liệu sạch mỗi lần chạy. Thay postgres:16 bằng redis:7 hoặc bất kỳ hình ảnh nào khác và mẫu này vẫn đúng.
Tốt nhất cho: khởi tạo các dịch vụ hỗ trợ cho phát triển cục bộ và kiểm thử tích hợp, một cách có thể tái tạo, mà không làm ô nhiễm máy của bạn.
Hạn chế thực tế: nó không gọn nhẹ theo nghĩa nhị phân; nó cần một daemon đang chạy và đĩa và bộ nhớ thực. Nhưng CLI có thể viết script và ưu tiên terminal, và đối với hạ tầng cục bộ có thể tái tạo, không có công cụ nào khác sánh kịp.
apidog-cli
Khi bạn đang làm việc với API trên dòng lệnh, phần còn thiếu chính là dự án API thực tế của bạn: các endpoint, schema, môi trường và kịch bản kiểm thử của nó. Apidog cung cấp apidog-cli, công cụ CLI gọn nhẹ kết nối terminal với dự án đó. Nó được cài đặt dưới dạng một gói npm và cung cấp cho bạn một cách tiếp cận có thể viết script để thiết kế, nhập, giả lập và kiểm thử tài nguyên mà không cần mở ứng dụng desktop.
npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog run -t <scenario_id> -e <env_id> -r cli
apidog run thực thi một kịch bản kiểm thử đã lưu với một môi trường và in kết quả từng bước ra terminal. Nó thoát với mã 0 khi mọi xác nhận đều thành công và khác 0 khi thất bại, vì vậy nó có thể được đưa thẳng vào một cổng CI. Ngoài các kiểm thử, CLI còn bao gồm các nhóm lệnh thực tế: endpoint và schema để thiết kế, import và export để di chuyển các đặc tả (OpenAPI, Swagger, Postman) vào và ra, mock cho các kỳ vọng giả lập, và environment cùng variables cho cấu hình. Đầu ra là JSON có cấu trúc với agentHints.nextSteps, đây là lý do tại sao nó cũng phù hợp với trợ lý mã hóa AI làm việc phát triển API. Để tham khảo đầy đủ các lệnh, hãy xem hướng dẫn Apidog CLI đầy đủ; hướng dẫn cài đặt Apidog CLI sẽ hướng dẫn bạn chạy lần đầu.
Tốt nhất cho: chạy các kịch bản kiểm thử của bạn trong CI và quản lý tài nguyên dự án từ các script, đặc biệt trong quy trình phát triển API ưu tiên đặc tả nơi hợp đồng điều khiển mọi thứ.
Lưu ý chân thành: Apidog không phải là mã nguồn mở; nó là một sản phẩm thương mại có gói miễn phí. Nhưng gói miễn phí đó cùng với CLI cung cấp cho bạn một giải pháp thay thế tích hợp để ghép nối một máy khách yêu cầu, một máy chủ giả lập và một trình chạy kiểm thử lại với nhau, tất cả được hỗ trợ bởi một dự án duy nhất. Phần gọn nhẹ là tệp nhị phân apidog-cli; nền tảng Apidog đầy đủ là một GUI trên cùng một dự án.
Cách chọn
Hầu hết các công cụ này bổ sung cho nhau, chứ không cạnh tranh. Bạn có thể sẽ chạy một số công cụ: một máy khách HTTP, jq, một đường hầm, một trình giám sát và một trình chạy kiểm thử.
| Công cụ | Tốt nhất cho | Cài đặt | Mã nguồn mở? |
|---|---|---|---|
| curl | Yêu cầu bằng script, kiểm tra sức khỏe CI | cài đặt sẵn | Có (giấy phép curl) |
| HTTPie | Yêu cầu tương tác dễ đọc | pip install httpie |
Có (BSD) |
| xh | Cảm giác HTTPie, tốc độ gốc | cargo install xh / binary |
Có (MIT) |
| jq | Lọc phản hồi JSON | brew install jq / binary |
Có (MIT) |
| gh | Viết script PR và CI của GitHub | brew install gh / binary |
Có (MIT) |
| ngrok | Hiển thị localhost, webhooks | tải tệp nhị phân | Không (freemium) |
| mkcert | Chứng chỉ HTTPS cục bộ đáng tin cậy | brew install mkcert / binary |
Có (BSD) |
| watchexec | Chạy lại khi tệp thay đổi | cargo install watchexec-cli |
Có (Apache-2.0) |
| Docker CLI | Dịch vụ hỗ trợ dùng một lần | Cài đặt Docker | Có (Apache-2.0) |
| apidog-cli | Chạy kịch bản kiểm thử, quản lý dự án | npm install -g apidog-cli |
Không (freemium) |
Chọn theo công việc. Gửi yêu cầu: xh hoặc HTTPie cho công việc tương tác, curl cho các script. Đọc phản hồi: luôn luôn jq. Hiển thị cổng: ngrok. HTTPS cục bộ: mkcert. Chạy lại khi lưu: watchexec. Dịch vụ hỗ trợ: Docker. Chạy kiểm thử API và quản lý dự án: apidog-cli.
Tổng kết
Một bộ công cụ gọn nhẹ tốt là một vài công cụ nhỏ, nhanh chóng mà mỗi công cụ chỉ làm một việc và truyền kết quả cho công cụ tiếp theo. curl và xh gửi yêu cầu, jq đọc chúng, ngrok và mkcert xử lý truy cập cục bộ, watchexec đóng vòng lặp chỉnh sửa-chạy, và Docker cung cấp cho bạn hạ tầng dùng một lần. Không có công cụ nào yêu cầu nhiều trước khi chúng trở nên hữu ích.
apidog-cli là mảnh ghép kết nối vòng lặp trở lại dự án API thực tế của bạn, để các endpoint và kiểm thử bạn chạy từ terminal là những thứ mà nhóm của bạn thiết kế và triển khai. Tải Apidog để thiết lập một dự án, sau đó điều khiển nó từ dòng lệnh với CLI trong pipeline CI của bạn. Cùng ý tưởng về tốc độ và dấu chân, áp dụng cho toàn bộ vòng đời API thay vì từng yêu cầu một.
