golang Trello API集成开发插件库Trello的使用

Golang Trello API集成开发插件库Trello的使用

安装

Go Trello API已经测试兼容Go 1.7及以上版本。它唯一的依赖是github.com/pkg/errors包,其他仅依赖Go标准库。

go get github.com/adlio/trello

基本用法

所有交互都从trello.Client开始。使用您的appKey和token创建一个客户端:

client := trello.NewClient(appKey, token)

所有API请求都接受一个trello.Arguments对象,这是一个简单的map[string]string,在API调用中转换为查询字符串参数。

board, err := client.GetBoard("bOaRdID", trello.Defaults())
if err != nil {
  // 处理错误
}

客户端持久性

当从Board获取Lists或从Lists获取Cards时,原始的trello.Client指针会在返回的子对象中传递。这使得您可以通过在接收到的对象上调用函数来发起额外的API调用:

client := trello.NewClient(appKey, token)
board, err := client.GetBoard("ID", trello.Defaults())

// GetLists使用`client`中的凭据向/boards/:id/lists发起API调用
lists, err := board.GetLists(trello.Defaults())

for _, list := range lists {
  // GetCards使用`client`中的凭据向/lists/:id/cards发起API调用
  cards, err := list.GetCards(trello.Defaults())
}

获取用户的Trello Boards

可以通过ID直接检索Board,或者通过请求成员的所有Board:

member, err := client.GetMember("usernameOrId", trello.Defaults())
if err != nil {
  // 处理错误
}

boards, err := member.GetBoards(trello.Defaults())
if err != nil {
  // 处理错误
}

获取Board上的Lists

board, err := client.GetBoard("bOaRdID", trello.Defaults())
if err != nil {
  // 处理错误
}

lists, err := board.GetLists(trello.Defaults())
if err != nil {
  // 处理错误
}

获取Board上的Cards

board, err := client.GetBoard("bOaRdID", trello.Defaults())
if err != nil {
  // 处理错误
}

cards, err := board.GetCards(trello.Defaults())
if err != nil {
  // 处理错误
}

获取List上的Cards

list, err := client.GetList("lIsTID", trello.Defaults())
if err != nil {
  // 处理错误
}

cards, err := list.GetCards(trello.Defaults())
if err != nil {
  // 处理错误
}

创建和删除Board

可以在使用其凭据的用户的Board结构上创建或删除Board。

board := trello.NewBoard("My bucket list")

// POST
err := client.CreateBoard(&board, trello.Defaults())

// DELETE
err := board.Delete(trello.Defaults())
if err != nil {
  fmt.Println(err)
}

向Board添加新成员

board, err := client.GetBoard("bOaRdID", trello.Defaults())
if err != nil {
  // 处理错误
}

member := Member{Email: "user@example.com"}
_, err := board.AddMember(&member, trello.Defaults())

if err != nil {
  // 处理错误
}

归档、取消归档和删除Card

// 归档
err := card.Archive()

// 取消归档
err := card.Unarchive()

// 删除
err := card.Delete()

创建Card

API提供了几种创建新Card的机制。

在客户端从头创建Card

这种方法需要最多的Card输入数据:

card := trello.Card{
  Name: "Card Name",
  Desc: "Card description",
  Pos: 12345.678,
  IDList: "iDOfaLiSt",
  IDLabels: []string{"labelID1", "labelID2"},
}
err := client.CreateCard(card, trello.Defaults())

在List上创建Card

list, err := client.GetList("lIsTID", trello.Defaults())
list.AddCard(&trello.Card{ Name: "Card Name", Desc: "Card description" }, trello.Defaults())

通过复制另一个Card创建Card

err := card.CopyToList("listIdNUmber", trello.Defaults())

获取Board上的Actions

board, err := client.GetBoard("bOaRdID", trello.Defaults())
if err != nil {
  // 处理错误
}

actions, err := board.GetActions(trello.Defaults())
if err != nil {
  // 处理错误
}

获取Card上的Actions

card, err := client.GetCard("cArDID", trello.Defaults())
if err != nil {
  // 处理错误
}

actions, err := card.GetActions(trello.Defaults())
if err != nil {
  // 处理错误
}

在List内重新排列Cards

err := card.MoveToTopOfList()
err = card.MoveToBottomOfList()
err = card.SetPos(12345.6789)

将Card移动到另一个List

err := card.MoveToList("listIdNUmber", trello.Defaults())

Card祖先关系

Trello在Card作为其他Card的副本创建时提供祖先跟踪。这个包提供了处理这些数据的函数:

// ancestors将保存一个*trello.Cards切片,第一个
// 是Card的父级,最后一个是父级的父级的父级...
ancestors, err := card.GetAncestorCards(trello.Defaults())

// GetOriginatingCard()是祖先Card切片中最后一个元素的别名
ultimateParentCard, err := card.GetOriginatingCard(trello.Defaults())

调试日志

如果您想查看所有API调用的日志,可以将一个.Logger(实现Debugf(string, ...interface{}))附加到您的客户端。记录器的接口模仿logrus。示例用法:

logger := logrus.New()
logger.SetLevel(logrus.DebugLevel)
client := trello.NewClient(appKey, token)
client.Logger = logger

更多关于golang Trello API集成开发插件库Trello的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang Trello API集成开发插件库Trello的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang Trello API 集成开发指南

Trello 是一个流行的项目管理工具,通过其 API 可以方便地与 Go 应用程序集成。下面我将介绍如何使用 Go 开发 Trello 插件或集成应用。

1. 准备工作

首先需要获取 Trello API 密钥和令牌:

  1. Trello 开发者门户 获取 API Key
  2. 生成用户令牌

2. 安装必要的 Go 库

推荐使用 go-trello 库来简化开发:

go get github.com/VojtechVitek/go-trello

3. 基本 API 操作示例

3.1 初始化客户端

package main

import (
	"fmt"
	"log"
	"github.com/VojtechVitek/go-trello"
)

func main() {
	// 替换为你的 API Key 和 Token
	apiKey := "your_api_key"
	token := "your_user_token"

	// 创建 Trello 客户端
	trello, err := trello.NewAuthClient(apiKey, &token)
	if err != nil {
		log.Fatal(err)
	}

	// 测试连接 - 获取当前用户信息
	user, err := trello.Member("me")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Connected as: %s (%s)\n", user.FullName, user.Username)
}

3.2 获取看板和列表

// 获取用户的所有看板
boards, err := user.Boards()
if err != nil {
	log.Fatal(err)
}

// 打印看板名称
for _, board := range boards {
	fmt.Printf("Board: %s (ID: %s)\n", board.Name, board.Id)
	
	// 获取看板中的列表
	lists, err := board.Lists()
	if err != nil {
		log.Printf("Error getting lists for board %s: %v\n", board.Name, err)
		continue
	}
	
	for _, list := range lists {
		fmt.Printf("  - List: %s\n", list.Name)
	}
}

3.3 创建卡片

// 假设我们有一个列表ID
listID := "your_list_id"

// 创建新卡片
card, err := trello.CreateCard(trello.Card{
	IdList:     listID,
	Name:       "New Task",
	Desc:       "This is a task created via API",
	Pos:        1,
	Due:        time.Now().Add(24 * time.Hour),
	Labels:     []string{"green"}, // 标签颜色
})
if err != nil {
	log.Fatal(err)
}

fmt.Printf("Created card: %s (ID: %s)\n", card.Name, card.Id)

3.4 更新卡片

// 更新卡片描述
err = card.Update(trello.Card{
	Desc: "Updated description via API",
})
if err != nil {
	log.Fatal(err)
}

// 添加评论
comment := "This is a comment added via API"
err = card.AddComment(comment)
if err != nil {
	log.Fatal(err)
}

4. 高级功能

4.1 处理 Webhooks

// 设置Webhook监听看板变化
webhook, err := trello.CreateWebhook(trello.Webhook{
	Description: "My Go App Webhook",
	CallbackURL: "https://yourdomain.com/trello-webhook",
	IdModel:     boardID, // 要监听的看板ID
})
if err != nil {
	log.Fatal(err)
}

// 处理Webhook回调(需要在你的HTTP服务中实现)
func handleWebhook(w http.ResponseWriter, r *http.Request) {
	// 验证请求来自Trello
	// 解析JSON数据
	// 处理事件
}

4.2 批量操作

// 批量移动卡片
func moveCardsToList(trello *trello.Client, cardIDs []string, targetListID string) error {
	for _, cardID := range cardIDs {
		card, err := trello.Card(cardID)
		if err != nil {
			return err
		}
		
		err = card.MoveToList(targetListID)
		if err != nil {
			return err
		}
	}
	return nil
}

5. 最佳实践

  1. 缓存数据:Trello API 有速率限制,缓存频繁访问的数据
  2. 错误处理:妥善处理 API 错误和网络问题
  3. 异步操作:对于耗时操作使用 goroutine
  4. 安全存储:妥善保管 API 密钥和令牌

6. 替代库

如果 go-trello 不满足需求,可以考虑直接使用 REST API:

import "net/http"

func getTrelloBoard(apiKey, token, boardID string) ([]byte, error) {
	url := fmt.Sprintf("https://api.trello.com/1/boards/%s?key=%s&token=%s", boardID, apiKey, token)
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	
	return io.ReadAll(resp.Body)
}

通过以上方法,你可以轻松地将 Trello 功能集成到你的 Go 应用程序中,构建强大的项目管理工具或自动化工作流。

回到顶部