持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

restgo
restgo
restgo
go get github.com/xiao-ren-wu/restgo

先来个简单的,构建一个GET请求

func TestGet(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().Send(restgo.GET, "http://www.baidu.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}
respWrappererror
BodyStrstringBody[]byteBodyUnmarshalHeader

请求生成Curl

restgo

生成Curl的函数签名如下

func (builder *httpBuilder) Curl(curlConsumer func(curl string)) *httpBuilder {
	builder.curlConsumerFunc = curlConsumer
	return builder
}
restgo
var ConsolePrint = func(curl string) {
	fmt.Println(curl)
}

可以使用默认的控制台打印

func TestGet(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		Curl(restgo.ConsolePrint).
		Send(restgo.GET, "http://restgo.example.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

程序运行后,控制台打印curl信息

curl --location --request GET 'http://www.baidu.com' 

url拼接参数

假设获取用户信息需要传入id,并通过路径拼接的形式

func Test(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		Query(map[string]string{
			"id": "1234",
		}).
		Send(restgo.GET, "http://restgo.example.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

路径参数

假设可以通过username获取用户信息,并在通过路径拼接的形式

func Test(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		PathVariable(map[string]string{
			"name": "1234",
		}).
		Send(restgo.GET, "http://restgo.example.com/:name/detail")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

设置请求头信息

假设请求接口需要传入token认证

func Test(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		Headers(map[string]string{
			"token": "xxxx",
		}).
		Send(restgo.GET, "http://restgo.example.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

发送POST请求

表单请求

application/jsonContent-Typemultipart/form-dataapplication/x-www-form-urlencoded
func Test(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		ContentType(restgo.FormData).
		Payload(map[string]string{
			"name": "1234",
		}).
		Send(restgo.GET, "http://restgo.example.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

试试上传文件

restgo
func Test(t *testing.T) {
	resp, err := restgo.NewHttpBuilder().
		ContentType(restgo.FormData).
		File("file", "/usr/local/test.image").
		Payload(map[string]string{
			"name": "1234",
		}).
		Send(restgo.GET, "http://restgo.example.com")
	if err != nil {
		t.Fatal(err)
	}
	t.Log(resp.BodyStr())
}

请求携带json的payload

Payloadinterface{}Content-Typeapplication/json
// Payload 请求载荷,根据设置的Content-Type确定最终发送形式
func (builder *httpBuilder) Payload(body interface{}) *httpBuilder {
	builder.body = body
	return builder
}

body中携带二进制信息

[]byteContent-TypeOctetStream

下载文件到本地

restgoWriteFile
func (wrapper *respWrapper) WriteFile(path string) error
WriteFilerestgo
restgorestgo

restgo的github地址是: github.com/xiao-ren-wu…

如果restgo对您的学习或者工作有帮助的话,请帮忙点个star~