大家好,我是Opensource,每天为大家带来优秀的开源项目!在日常开发中,通过HTTP请求其他服务是很常见的。通常,我们只需要发出请求,得到响应并进行处理。处理过程由http库封装。但是有没有办法更好地控制请求的细节呢?今天推荐的Go语言库媒体就是这样做的。项目地址:https://github.com/HereMobilityDevelopers/mediary,这个库上个月刚刚开源。具体来说,这个库就是给http.Client添加拦截器,这样可以更好的控制细节。具体可以做的事情包括:转储(dump)请求和响应,输出到日志;发送之前改变请求,或者返回之前改变响应;使用Opentracing/Jaeger添加跟踪信息;将相关指标发送至统计监控系统;注:拦截器的概念起源于AOP(面向切面编程)。通俗地说,拦截器可以在目标动作前后插入一些代码来执行其他一些动作。如何使用它?例子如下:varclient*http.Clientclient=mediary.Init().AddInterceptors(yourinterceptor).Build()client.Get("https://golang.org")看dump拦截的具体例子:client:=mediary.Init().AddInterceptors(dumpInterceptor).Build()client.Get("https://github.com")funcdumpInterceptor(req*http.Request,handlermediary.Handler)(*http.Response,error){ifbytes,err:=httputil.DumpRequestOut(req,true);err==nil{fmt.Printf("%s",bytes)//GET/HTTP/1.1//Host:github.com//User-Agent:go-http-client/1.1//Accept-Encoding:gzip}returnhandler(req)}也可以同时添加多个拦截器:client:=mediary.Init().AddInterceptors(FirstInterceptor,SecondInterceptor).AddInterceptors(第三拦截器).Build()
