【Shell】【Tool】call_api

call_api() {
  curl -fsS \
    --connect-timeout 2 \
    --max-time 5 \
    --retry 2 --retry-delay 1 \
    -w " [HTTP_CODE=%{http_code}]\n" \
    "$URL"
}
好的 👍 我來逐一說明 
call_api() 這段裡面每個 curl 參數的作用，並且說明為什麼要加：
call_api() {
  curl -fsS \
    --connect-timeout 2 \
    --max-time 5 \
    --retry 2 --retry-delay 1 \
    -w " [HTTP_CODE=%{http_code}]\n" \
    "$URL"
}
 參數逐一解析
-f / 
--fail
作用：當 HTTP 狀態碼是 4xx / 5xx 時，不會把 HTML 錯誤頁輸出到 stdout，而是直接返回非零 exit code。
好處：可以在 script 判斷「這次呼叫失敗」，而不是誤以為拿到一大串錯誤 HTML 也算成功。
-s / 
--silent
作用：靜默模式，不顯示下載進度條與錯誤訊息（錯誤還是會 exit code ≠ 0）。
好處：避免 cron job 或 log 裡塞滿進度百分比。
-S / 
--show-error
作用：在 
-s 靜默模式下，仍然把錯誤訊息（例如 DNS 解析失敗、timeout）顯示出來。
好處：結合 
-s 使用，可以安靜但又不失錯誤訊息。
--connect-timeout 2
作用：設定 TCP 連線的最大等待時間（單位：秒）。
例子：如果 API 服務根本沒在聽 port 8082，curl 會在 2 秒 內放棄。
--max-time 5
作用：整個 request（連線、傳輸、讀取）的最長時間，超過就中斷。
好處：避免 API 掛住時，curl 一直卡在那裡。
--retry 2
作用：遇到「暫時性錯誤」（像 DNS 解析失敗、timeout、connection reset by peer），會自動重試最多 2 次。
預設只會 retry network-level 的錯誤，不會 retry 4xx/5xx。
--retry-delay 1
作用：每次 retry 前延遲 1 秒。
預設會 delay 1 秒，但這裡寫死確保一致。
-w " [HTTP_CODE=%{http_code}]\n"
作用：在 response 輸出結尾，附加 HTTP 狀態碼。
例子：成功時會多一行 
 [HTTP_CODE=200]
好處：log 裡可以直接看出 API 狀態。
"$URL"
作用：實際要請求的 URL。
這裡設成變數，方便修改。
 總結
這樣組合的意圖就是：
-fsS → 安靜，但保留錯誤訊息，不要 HTML 錯誤頁
--connect-timeout / 
--max-time → 控制時間上限，避免卡死
--retry / 
--retry-delay → 短暫網路錯誤自動補救
-w %{http_code} → log 裡清楚顯示 HTTP 狀態碼
 