這個 Go 開源庫讓你能夠更細緻地掌握 HTTP 請求過程

關注公眾號 “OpenSourceDaily” ,每天推薦給你優秀開源項目

大家好,我是歐盆索思(opensource),每天為你帶來優秀的開源項目!

在日常開發中,通過 HTTP 請求其他服務是常有的事情。通常,我們只需要發出請求,獲取響應並進行處理即可,處理過程被 http 庫封裝了。然而有沒有辦法更好地掌控請求的細節呢?今天推薦的這個 Go 語言庫 mediary 就是幹這個的。

項目地址:
https://github.com/HereMobilityDevelopers/mediary,這個庫是上個月剛開源的。

具體來說,這個庫是將攔截器增加到 http.Client 上,能夠更好地掌控其中的細節,具體來說可以做的事情包括:

  • 轉儲(dump)請求和響應,輸出到日誌;
  • 在發送之前更改請求,或者在返回之前更改響應;
  • 使用 Opentracing/Jaeger 添加跟蹤信息;
  • 發送相關指標到統計監控系統;

注:攔截器這個概念最早來自 AOP(面向切面編程)。通俗來說,攔截器就是可以在目標動作的前後插入一些代碼,執行一些其他的動作。

怎麼使用呢?示例如下:

<code>

var

 client *http.Client client = mediary.Init().AddInterceptors(your interceptor).Build() client.Get(

"https://golang.org"

) /<code>

看一個具體的 dump 攔截的例子:

<code>client := mediary.Init().AddInterceptors(dumpInterceptor).Build()
client.Get(

"https://github.com"

)

func

 

dumpInterceptor

(req *http.Request, handler mediary.Handler)

 

(*http.Response, error)

 {  

if

 bytes, err := httputil.DumpRequestOut(req, 

true

); err == 

nil

 {   fmt.Printf(

"%s"

, bytes)                      }  

return

 handler(req) } /<code>

同時加多個攔截器也是可以的:

<code>client := mediary.Init().
    AddInterceptors(First Interceptor, Second Interceptor).
    AddInterceptors(Third Interceptor).
    Build()
/<code>


分享到:


相關文章: