Golang 消费 Restful Api

Golang 消费 Restful Api

本文介绍如何使用http包调用Restful API并解析返回内容至struct。

1. 概述

Golang使用http包调用Restful API,http给服务器发送请求并获得响应,响应格式可能为JSON、XML。我们这里使用json类型作为返回值。为了演示这里使用http://dummy.restapiexample.com/api/v1/employees地址作为API,其返回员工列表信息,读者可以使用Postman进行测试:

{
    "status": "success",
    "data": [
        {
            "id": "1",
            "employee_name": "Tiger Nixon",
            "employee_salary": "320800",
            "employee_age": "61",
            "profile_image": ""
        },
        {
            "id": "2",
            "employee_name": "Garrett Winters",
            "employee_salary": "170750",
            "employee_age": "63",
            "profile_image": ""
        },
        ...
    ]
}

为了节省篇幅,上面仅列出两条数据。我们的任务就是如何调用API并解析返回内容。

2. 示例实现

2.1. 定义数据结构

我们看到返回数据包括两个部分,status和data,其中data是数组,每个元素表示员工符合类型,因此我们定义两个结构体描述返回值信息。

type EmpType struct {
	ID             string `json:"id"`
	EmployeeName   string `json:"employee_name"`
	EmployeeSalary string `json:"employee_salary"`
	EmployeeAge    string `json:"employee_age"`
	ProfileImage   string `json:"profile_image"`
}

type RespData struct {
	Status string		`json:"status"`
	Data [] EmpType		`json:"data"`
}

EmpType描述员工信息,RespData描述返回值信息,其中包括EmpType数组。结构体定义需和返回JSON内容结构一致,否则会提示cannot unmarshal object into Go value of type 解析异常。

2.2. 调用API

	url := "http://dummy.restapiexample.com/api/v1/employees"
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Error is req: ", err)
	}

	// create a Client
	client := &http.Client{}

	// Do sends an HTTP request and
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("error in send req: ", err)
	}

	// Defer the closing of the body
	defer resp.Body.Close()

http.NewRequest定义请求,client.Do(req)执行请求。

2.3. 解析返回数据

	// Fill the data with the data from the JSON
	var data RespData
	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
		fmt.Println(err)
	}

	for _,emp := range data.Data {
		fmt.Println(emp)
	}

json.NewDecoder(resp.Body).Decode(&data)解析json内容至结构体。最后依次输出。

3. 总结

本文通过简单示例介绍如何通过http调用Restful API,并解析返回内容。需要提醒的是定义的结构体需和返回内容结构保持一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值