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列表

  1. 添加更多选项(灵活性)
  2. 支持XML响应
  3. 更好的错误处理

更多关于golang简单易用的REST API消费插件库gopencils的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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!

回到顶部