Giới thiệu
Khi phát triển ứng dụng, việc tối ưu hóa hiệu suất API là rất quan trọng. Nhưng làm thế nào để xác định API của bạn có thực sự chậm hay không? Có rất nhiều công cụ để kiểm tra hiệu suất, nhưng hôm nay, chúng ta sẽ khám phá cách sử dụng curl
để thu thập dữ liệu hiệu suất của các endpoint API một cách hiệu quả.
Mục lục
- Giới thiệu về curl
- Lấy thời gian tổng cộng bằng cách sử dụng
--write-out
- Dữ liệu thời gian chi tiết hơn
- Tốc độ và kích thước tải về
- Mã phản hồi và tiêu đề
- Sử dụng tệp cấu hình định dạng
- Thực tiễn tốt nhất
- Cạm bẫy phổ biến
- Mẹo hiệu suất
- Khắc phục sự cố
- Kết luận
Giới thiệu về curl
curl
là một công cụ dòng lệnh mạnh mẽ cho phép bạn gửi yêu cầu HTTP và thu thập thông tin phản hồi từ server. Với curl
, bạn có thể dễ dàng kiểm tra hiệu suất của một endpoint API mà không cần cài đặt thêm bất kỳ gói phần mềm nào.
Lấy thời gian tổng cộng bằng cách sử dụng --write-out
Khi sử dụng curl
, nhiều người chỉ đơn giản thêm tùy chọn -v
để xem thông tin chi tiết về yêu cầu. Tuy nhiên, một cách mạnh mẽ hơn là sử dụng tùy chọn --write-out
để định dạng đầu ra theo cách bạn muốn. Dưới đây là ví dụ về cách lấy thời gian tổng cộng của một yêu cầu:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "Thời gian tổng cộng: %{time_total} giây" \
https://example.ca/path/to/endpoint
Kết quả sẽ hiển thị thời gian tổng cộng mà yêu cầu mất:
Thời gian tổng cộng: 0.897665 giây
Tùy chọn -s
giúp loại bỏ tất cả đầu ra không cần thiết để giữ cho thông tin dễ đọc hơn.
Dữ liệu thời gian chi tiết hơn
Để có cái nhìn toàn diện hơn về hiệu suất, curl
cung cấp bảy phép đo thời gian khác nhau. Dưới đây là bốn phép đo hữu ích nhất:
time_namelookup
: Thời gian tìm kiếm tên (DNS).time_pretransfer
: Thời gian từ khi bắt đầu yêu cầu đến khi kết nối được thiết lập.time_starttransfer
: Thời gian từ khi yêu cầu được gửi đến khi byte đầu tiên của phản hồi được nhận.time_total
: Thời gian tổng cộng của yêu cầu.
Bạn có thể sử dụng lệnh sau để nhận tất cả các thông tin này:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "time_namelookup %{time_namelookup}\ntime_pretransfer %{time_pretransfer}\ntime_starttransfer %{time_starttransfer}\ntime_total %{time_total}" \
https://example.ca/ | column -t
Kết quả sẽ hiển thị các phép đo thời gian:
time_namelookup 0.001698
time_pretransfer 0.171207
time_starttransfer 0.298703
time_total 0.587096
Nhờ vào những thông tin này, bạn có thể tính toán thời gian mà server mất để xử lý yêu cầu và thời gian tải xuống dữ liệu.
Tốc độ và kích thước tải về
Để xác định tốc độ tải xuống và kích thước dữ liệu, bạn có thể sử dụng các biến sau:
size_download
: Kích thước tổng tải về (bytes).size_header
: Kích thước của tiêu đề (bytes).speed_download
: Tốc độ tải về (bytes/giây).
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "size_download %{size_download}\nsize_header %{size_header}\nspeed_download %{speed_download}" \
https://example.ca/ | column -t
Kết quả sẽ hiển thị:
size_download 922306
size_header 704
speed_download 1186138
Mã phản hồi và tiêu đề
Biết được mã phản hồi của yêu cầu rất quan trọng giúp bạn xác định lý do tại sao hiệu suất lại chậm. Để lấy mã phản hồi, bạn có thể sử dụng biến %{response_code}
:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "response_code %{response_code}" \
https://example.ca/ | column -t
Kết quả sẽ hiển thị mã phản hồi như sau:
response_code 200
Lấy tiêu đề
Bạn có thể lấy các tiêu đề cá nhân từ phản hồi bằng cách sử dụng biến header
:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "cf-cache-status %header{cf-cache-status}" \
https://example.ca/
Kết quả sẽ hiển thị trạng thái cache của Cloudflare:
cf-cache-status MISS
Lấy tất cả tiêu đề dưới dạng JSON
Để lấy tất cả tiêu đề trong định dạng JSON, bạn có thể sử dụng biến %{header_json}
:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "header_json %{header_json}" \
https://example.ca/
Kết quả sẽ hiển thị định dạng JSON có thể được xử lý bởi các công cụ như jq
:
header_json {
"server":["nginx/1.18.0 (Ubuntu)"],
"date":["Thu, 11 Sep 2025 19:06:12 GMT"],
"content-type":["text/html"],
"content-length":["178"],
"connection":["keep-alive"],
"location":["https://example.ca/"]
}
Sử dụng tệp cấu hình định dạng
Để tiết kiệm thời gian, bạn có thể lưu định dạng đầu ra vào một tệp cấu hình:
bash
# Nội dung của tệp format.txt
(time_namelookup %{time_namelookup}\n
time_pretransfer %{time_pretransfer}\n
time_starttransfer %{time_starttransfer}\n
time_total %{time_total}\n
size_download %{size_download}\n
size_header %{size_header}\n
speed_download %{speed_download}\n
Sử dụng tệp này với curl
:
bash
curl -s \
-X GET \
-o /dev/null \
--write-out "@/path/to/format.txt" \
https://example.ca/
Kết quả sẽ tương tự như trước nhưng giúp bạn tiết kiệm công sức gõ lệnh.
Thực tiễn tốt nhất
- Sử dụng
-s
: Để tránh đầu ra không cần thiết. - Sử dụng
-o /dev/null
: Để không tải về nội dung của phản hồi. - Ghi chú lại: Ghi lại các phép đo hiệu suất để so sánh qua các lần thử nghiệm.
Cạm bẫy phổ biến
- Mã phản hồi không chính xác: Đảm bảo kiểm tra mã phản hồi, nếu API trả về 404, đó có thể là lý do cho hiệu suất kém.
- Kết nối chậm: Nếu bạn đang thử nghiệm từ một vị trí địa lý xa, thời gian kết nối có thể bị ảnh hưởng.
Mẹo hiệu suất
- Kiểm tra nhiều lần: Để có số liệu chính xác, hãy kiểm tra nhiều lần và lấy trung bình.
- Sử dụng công cụ theo dõi: Kết hợp với các công cụ theo dõi hiệu suất khác để có cái nhìn toàn diện hơn.
Khắc phục sự cố
- Yêu cầu không phản hồi: Kiểm tra cấu hình server và firewall.
- Thời gian phản hồi chậm: Kiểm tra mức độ tải của server và tối ưu hóa code.
Kết luận
curl
là một công cụ hữu ích để thu thập dữ liệu hiệu suất cho các endpoint API. Bằng cách hiểu rõ cách sử dụng nó, bạn có thể cải thiện hiệu suất và chất lượng của ứng dụng của mình. Hãy thử áp dụng những kỹ thuật này và theo dõi hiệu suất API của bạn ngay hôm nay!