⚠️ 已封存(ARCHIVED)/不再維護此專案為早期作品,現已封存,僅作為開發歷程的紀錄留存,請勿用於新專案。
當初的考量:自家服務需要一個「帶全域併發上限 + 慢請求(>2s)記錄」的輕量 REST client,於是在 requestwork.v2 之上封裝了 Get/Post/Put/Delete 便利方法與 httptrace 計時。
為什麼不成熟(不建議再用):
init()會竄改全域 logrus 設定,污染任何 import 它的程式;- 無重試機制,且強制關閉 HTTP keep-alive(每次請求重建 TCP/TLS);
- 內建 gzip 處理多為死碼、回應讀取無大小上限(OOM 風險)、
resolveRequest/resolveRawRequest/ResolveTraceRequest三份大量重複;- 與其依賴的
requestwork.v2(worker pool)屬畫蛇添足——限制併發用標準庫即可。現在該用什麼:直接用 resty(社群最大)或 imroc/req(debug/trace 最強),兩者都內建 retry、trace、連線池,無需再自行封裝 HTTP 機制。
restful web service reqeust tool
go get github.com/syhlion/greq
func main(){
//need import https://github.com/syhlion/requestwork.v2
worker:=requestwork.New(50)
debug:=true
client:=greq.New(worker,15*time.Second,debug)
//GET
data,httpstatus,err:=client.Get("https://tw.yahoo.com",nil)
//POST
v := url.Values{}
v.Add("data", string(data))
data,httpstatus,err:=client.Post("https://tw.yahoo.com",bytes.NewBufferString(v.Encode()))
}