Go Resty是一个用于构建RESTful API客户端的Go语言库。它提供了一套简洁而强大的API,使开发人员能够轻松地发送HTTP请求并处理响应。
功能特点
- 支持GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS等请求方法
- 简单且可链式调用的设置和请求方法
- Request的Body可以是
string
、[]byte
、struct
、map
、slice
和io.Reader
- 自动检测
Content-Type
- 对于
io.Reader
,使用无缓冲方式处理 - 在中间件和请求执行过程中,可以通过
Request.RawRequest
访问原生的*http.Request
实例 - 通过
Request.RawRequest.GetBody()
可多次读取请求Body
- 自动检测
- Response对象提供更多可能性
- 将响应以
[]byte
数组形式访问 -response.Body()
,或以string
形式访问 -response.String()
- 获取响应的
response.Time()
和接收时间response.ReceivedAt()
- 将响应以
- 自动进行
JSON
和XML
内容类型的编码和解码- 默认为
JSON
,如果未提供Content-Type
头部和struct/map
参数 - Resty提供了覆盖JSON编码/解码和XML编码/解码的选项
- 默认为
- 通过
multipart/form-data
上传一个或多个文件很简单- 自动检测文件的内容类型
- 使用退避重试机制和重试条件函数引用
- Resty客户端支持HTTP和REST请求的中间件,包括Request和Response
- 支持
Request.SetContext
- 支持
BasicAuth
和Bearer
令牌的授权选项 - 为所有请求或特定请求设置请求
ContentLength
值 - 自定义根证书和客户端证书
- 直接将HTTP响应下载/保存到文件,类似于
curl -o
命令的功能。 - 请求和CookieJar支持的Cookie
- 基于SRV记录的请求,而不是基于主机URL
- 客户端设置,如
Timeout
、RedirectPolicy
、Proxy
、TLSClientConfig
、Transport
等 - Resty设计
- 在客户端级别设置和选择,也可以在请求级别进行覆盖
- 请求和响应的中间件
- 如果需要,可以创建多个客户端,使用
resty.New()
- goroutine 并发安全
- 调试模式 - 清晰和丰富的日志展示
- Gzip - Go 自动处理,Resty也具备回退处理能力
- 与
HTTP/2
和HTTP/1.1
兼容 - Bazel 支持
- 对于测试提供易于模拟的 Resty
支持的 Go 版本
建议使用 go1.16
及以上版本。
自 v1.10.0
版本开始,Resty 开始支持 go modules
。
从 Resty v2 版本及更高版本开始,完全支持 go modules 包发布。它要求使用一个可理解 /vN
后缀导入的 Go 版本:
- 1.9.7+
- 1.10.3+
- 1.11+