golang简单易用的REST API消费插件库gopencils的使用
Golang简单易用的REST API消费插件库gopencils的使用
概述
Gopencils是一个用Go语言编写的REST客户端库,可以轻松消费任何REST API。当前支持的响应格式为JSON。
安装
go get github.com/bndr/gopencils
简单使用
Gopencils旨在帮助您轻松地向REST API发出请求,而无需太多麻烦。它支持Basic-Auth和OAuth两种认证方式。
Basic-Auth示例
type UserExample struct {
Id string
Name string
Origin string
Url string
SomeJsonField string
}
// 创建Basic Auth
auth := gopencils.BasicAuth{"username", "password"}
// 使用我们的auth创建新的API
api := gopencils.Api("http://your-api-url.com/api/", &auth)
// 创建指向我们响应结构的指针
resp := &UserExample{}
// 执行GET请求
// 请求的URL: http://your-api-url.com/api/users/1
api.Res("users", resp).Id(1).Get()
// 获取单个项目
api.Res("users", resp).Id(1).Get()
// 使用查询字符串执行GET请求
querystring := map[string]string{"page": "100", "per_page": "1000"}
// 请求的URL: http://your-api-url.com/api/users/123/items?page=100&per_page=1000
resource := api.Res("users").Id(123).Res("items", resp).Get(querystring)
// 现在resp包含返回的json对象
// resource.Raw包含原始http响应
// 您可以向API提供路径后缀,该后缀将应用于每个URL
// 例如 /items/id.json
api := gopencils.Api("http://your-api-url.com/api/", &auth, ".json")
Github API示例
package main
import (
"fmt"
"github.com/bndr/gopencils"
)
type respStruct struct {
Login string
Id int
Name string
}
func main() {
api := gopencils.Api("https://api.github.com")
// 用户资源
users := api.Res("users")
usernames := []string{"bndr", "torvalds", "coleifer"}
for _, username := range usernames {
// 创建一个新的指向响应结构的指针
r := new(respStruct)
// 获取用户ID为i的用户到新创建的响应结构中
_, err := users.Id(username, r).Get()
if err != nil {
fmt.Println(err)
} else {
fmt.Println(r)
}
}
}
为什么选择Gopencils?
作者经常使用REST API,发现自己反复编写相同的代码,因此决定创建一个库来帮助自己(和其他人)快速消费这些API。
当前状态
虽然仍处于测试阶段,但作者鼓励用户在自己的项目中进行测试。API将会改进,但不会进行破坏性变更。
贡献
欢迎所有贡献。TODO列表在README的底部。随时可以发送pull request。
许可证
Apache License 2.0
TODO列表
- 添加更多选项(灵活性)
- 支持XML响应
- 更好的错误处理
更多关于golang简单易用的REST API消费插件库gopencils的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang简单易用的REST API消费插件库gopencils的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用gopencils简化Golang中的REST API消费
gopencils是一个简单易用的Golang库,用于消费RESTful API。它提供了简洁的API,可以轻松地发送HTTP请求并处理响应。下面我将介绍gopencils的基本用法和一些示例代码。
安装gopencils
首先,使用go get安装gopencils:
go get github.com/bndr/gopencils
基本用法
1. 创建API资源
package main
import (
"fmt"
"github.com/bndr/gopencils"
)
func main() {
// 创建API资源
api := gopencils.Api("https://jsonplaceholder.typicode.com")
// 创建特定资源的引用
users := api.Res("users")
// 获取所有用户
var usersData []map[string]interface{}
_, err := users.Get(&usersData)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Users:", usersData)
}
2. 获取单个资源
// 获取单个用户
var user map[string]interface{}
_, err = users.Id(1).Get(&user)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("User 1:", user)
3. 发送POST请求
// 创建新用户
newUser := map[string]interface{}{
"name": "John Doe",
"username": "johndoe",
"email": "john@example.com",
}
var createdUser map[string]interface{}
_, err = users.Post(&newUser, &createdUser)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Created user:", createdUser)
4. 发送PUT和PATCH请求
// 更新用户(PUT)
updatedUser := map[string]interface{}{
"name": "John Updated",
"username": "johnupdated",
"email": "updated@example.com",
}
var putResult map[string]interface{}
_, err = users.Id(1).Put(&updatedUser, &putResult)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Updated user:", putResult)
// 部分更新用户(PATCH)
patchData := map[string]interface{}{
"email": "patched@example.com",
}
var patchResult map[string]interface{}
_, err = users.Id(1).Patch(&patchData, &patchResult)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Patched user:", patchResult)
5. 发送DELETE请求
// 删除用户
var deleteResult interface{}
_, err = users.Id(1).Delete(&deleteResult)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Delete result:", deleteResult)
高级用法
1. 添加查询参数
// 添加查询参数
var filteredUsers []map[string]interface{}
_, err = users.Res("").SetQuery(map[string]string{"username": "Bret"}).Get(&filteredUsers)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Filtered users:", filteredUsers)
2. 设置请求头
// 设置请求头
api.SetHeader("Authorization", "Bearer your_token_here")
api.SetHeader("Content-Type", "application/json")
3. 处理错误响应
// 错误处理
var errorResponse map[string]interface{}
resp, err := users.Id(9999).Get(&errorResponse)
if err != nil {
if resp != nil {
fmt.Printf("HTTP Error: %d\n", resp.StatusCode)
fmt.Println("Response:", errorResponse)
} else {
fmt.Println("Request failed:", err)
}
return
}
4. 使用结构体代替map
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Username string `json:"username"`
Email string `json:"email"`
}
// 使用结构体
var userStruct User
_, err = users.Id(1).Get(&userStruct)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("User struct: %+v\n", userStruct)
实际示例:消费GitHub API
package main
import (
"fmt"
"github.com/bndr/gopencils"
)
func main() {
// 初始化GitHub API
github := gopencils.Api("https://api.github.com")
// 获取用户信息
var user map[string]interface{}
_, err := github.Res("users/octocat").Get(&user)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("GitHub user:", user)
// 获取仓库列表
var repos []map[string]interface{}
_, err = github.Res("users/octocat/repos").Get(&repos)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("First repo:", repos[0]["name"])
}
总结
gopencils提供了简单直观的方式来消费REST API,主要优点包括:
- 简洁的链式API
- 自动JSON编解码
- 支持所有HTTP方法
- 易于添加查询参数和请求头
- 支持结构体和map两种响应格式
对于简单的API消费场景,gopencils是一个轻量级且易用的选择。但对于更复杂的需求,可能需要考虑更强大的库如resty或标准库net/http。
希望这些示例能帮助你快速上手gopencils!