0
0
Lập trình
Admin Team
Admin Teamtechmely

Sử dụng curl để thu thập dữ liệu hiệu suất API

Đăng vào 3 ngày trước

• 5 phút đọc

Chủ đề:

#linux#curl

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

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 Copy
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:

Copy
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 Copy
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:

Copy
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 Copy
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ị:

Copy
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 Copy
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:

Copy
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 Copy
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:

Copy
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 Copy
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:

Copy
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 Copy
# 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 Copy
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!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào