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
更多关于golang Trello API集成开发插件库Trello的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang Trello API 集成开发指南
Trello 是一个流行的项目管理工具,通过其 API 可以方便地与 Go 应用程序集成。下面我将介绍如何使用 Go 开发 Trello 插件或集成应用。
1. 准备工作
首先需要获取 Trello API 密钥和令牌:
- 在 Trello 开发者门户 获取 API Key
- 生成用户令牌
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. 最佳实践
- 缓存数据:Trello API 有速率限制,缓存频繁访问的数据
- 错误处理:妥善处理 API 错误和网络问题
- 异步操作:对于耗时操作使用 goroutine
- 安全存储:妥善保管 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 应用程序中,构建强大的项目管理工具或自动化工作流。