golang Airtable API 客户端插件库 airtable 的使用
Golang Airtable API 客户端插件库 airtable 的使用
安装
Golang Airtable API 已测试兼容 Go 1.13 及以上版本。
go get github.com/mehanizm/airtable
基本用法
初始化客户端
您应该从 Airtable 账户页面获取 your_api_token
。
client := airtable.NewClient("your_api_token")
您可以使用自定义的 HTTP 客户端:
client.SetCustomClient(http.DefaultClient)
自定义上下文
下面的每个方法都可以与自定义上下文一起使用。只需使用 MethodNameContext
调用并将上下文作为第一个参数提供。
列出数据库
bases, err := client.GetBases().WithOffset("").Do()
获取数据库结构
schema, err := client.GetBaseSchema("your_database_ID").Do()
获取表格
要获取 your_database_ID
,您应该访问主 API 页面并选择数据库。
table := client.GetTable("your_database_ID", "your_table_name")
列出记录
要从表格中获取记录,可以使用类似以下的代码:
records, err := table.GetRecords().
FromView("view_1").
WithFilterFormula("AND({Field1}='value_1',NOT({Field2}='value_2'))").
WithSort(sortQuery1, sortQuery2).
ReturnFields("Field1", "Field2").
InStringFormat("Europe/Moscow", "ru").
Do()
if err != nil {
// 处理错误
}
添加记录
recordsToSend := &airtable.Records{
Records: []*airtable.Record{
{
Fields: map[string]any{
"Field1": "value1",
"Field2": true,
},
},
},
}
receivedRecords, err := table.AddRecords(recordsToSend)
if err != nil {
// 处理错误
}
通过 ID 获取记录
record, err := table.GetRecord("recordID")
if err != nil {
// 处理错误
}
更新记录
部分更新一条记录:
res, err := record.UpdateRecordPartial(map[string]any{"Field_2": false})
if err != nil {
// 处理错误
}
完整更新多条记录:
toUpdateRecords := &airtable.Records{
Records: []*airtable.Record{
{
Fields: map[string]any{
"Field1": "value1",
"Field2": true,
},
},
{
Fields: map[string]any{
"Field1": "value1",
"Field2": true,
},
},
},
}
updatedRecords, err := table.UpdateRecords(toUpdateRecords)
if err != nil {
// 处理错误
}
删除记录
res, err := record.DeleteRecord()
if err != nil {
// 处理错误
}
批量删除记录
删除最多 10 条记录:
records, err := table.DeleteRecords([]string{"recordID1", "recordsID2"})
if err != nil {
// 处理错误
}
特别感谢
灵感来源于 Go Trello API
更多关于golang Airtable API 客户端插件库 airtable 的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang Airtable API 客户端插件库 airtable 的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang Airtable API 客户端库使用指南
Airtable 是一个流行的云端数据库服务,提供了友好的 API 接口。在 Golang 中,我们可以使用第三方库来简化与 Airtable API 的交互。
常用 Golang Airtable 客户端库
目前比较流行的 Golang Airtable 客户端库有:
下面我以 go-airtable
为例进行介绍。
安装
go get github.com/mehanizm/airtable
基本使用
1. 初始化客户端
package main
import (
"fmt"
"log"
"github.com/mehanizm/airtable"
)
func main() {
// 使用你的 API key 和 base ID 初始化客户端
client := airtable.NewClient("your-api-key")
// 获取指定 base 的实例
base := client.GetBase("your-base-id")
// 现在可以使用 base 操作表和数据
}
2. 查询记录
// 获取表实例
table := base.GetTable("TableName")
// 查询所有记录
records, err := table.GetRecords().
WithFilterFormula("NOT({Name} = '')"). // 可选过滤条件
WithSort("Name", airtable.SortAsc). // 可选排序
WithOffset(""). // 可选偏移
WithLimit(10). // 可选限制数量
Do()
if err != nil {
log.Fatal(err)
}
for _, record := range records.Records {
fmt.Printf("Record ID: %s\n", record.ID)
fmt.Printf("Fields: %+v\n", record.Fields)
}
3. 创建记录
newRecord := &airtable.Record{
Fields: map[string]interface{}{
"Name": "John Doe",
"Email": "john@example.com",
"Status": "Active",
},
}
createdRecord, err := table.CreateRecord(newRecord)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created record with ID: %s\n", createdRecord.ID)
4. 更新记录
updateRecord := &airtable.Record{
ID: "recExistingRecordId",
Fields: map[string]interface{}{
"Status": "Inactive",
},
}
updatedRecord, err := table.UpdateRecord(updateRecord)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Updated record: %+v\n", updatedRecord)
5. 删除记录
deleted, err := table.DeleteRecord("recExistingRecordId")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Record deleted: %v\n", deleted)
高级功能
批量操作
// 批量创建记录
recordsToCreate := []*airtable.Record{
{
Fields: map[string]interface{}{
"Name": "Batch 1",
},
},
{
Fields: map[string]interface{}{
"Name": "Batch 2",
},
},
}
createdRecords, err := table.CreateRecords(recordsToCreate)
if err != nil {
log.Fatal(err)
}
// 批量更新记录
recordsToUpdate := []*airtable.Record{
{
ID: "rec1",
Fields: map[string]interface{}{
"Status": "Updated",
},
},
{
ID: "rec2",
Fields: map[string]interface{}{
"Status": "Updated",
},
},
}
updatedRecords, err := table.UpdateRecords(recordsToUpdate)
if err != nil {
log.Fatal(err)
}
处理附件字段
record := &airtable.Record{
Fields: map[string]interface{}{
"Name": "Document",
"Files": []airtable.Attachment{
{
URL: "https://example.com/file.pdf",
Filename: "document.pdf",
},
},
},
}
最佳实践
- 错误处理:始终检查 API 调用的错误
- 速率限制:Airtable API 有速率限制(5请求/秒),考虑添加延迟
- 字段映射:为 Airtable 字段创建结构体映射可以提高代码可读性
- 连接池:对于高频访问,考虑重用 HTTP 客户端
示例:完整 CRUD 操作
package main
import (
"fmt"
"log"
"os"
"github.com/mehanizm/airtable"
)
type Contact struct {
ID string
Name string
Email string
Status string
}
func main() {
apiKey := os.Getenv("AIRTABLE_API_KEY")
baseID := os.Getenv("AIRTABLE_BASE_ID")
client := airtable.NewClient(apiKey)
base := client.GetBase(baseID)
table := base.GetTable("Contacts")
// 创建
newContact := &airtable.Record{
Fields: map[string]interface{}{
"Name": "Alice Smith",
"Email": "alice@example.com",
"Status": "New",
},
}
created, err := table.CreateRecord(newContact)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created: %s\n", created.ID)
// 查询
records, err := table.GetRecords().Do()
if err != nil {
log.Fatal(err)
}
var contacts []Contact
for _, r := range records.Records {
contacts = append(contacts, Contact{
ID: r.ID,
Name: fmt.Sprintf("%v", r.Fields["Name"]),
Email: fmt.Sprintf("%v", r.Fields["Email"]),
Status: fmt.Sprintf("%v", r.Fields["Status"]),
})
}
// 更新
if len(contacts) > 0 {
update := &airtable.Record{
ID: contacts[0].ID,
Fields: map[string]interface{}{
"Status": "Active",
},
}
_, err := table.UpdateRecord(update)
if err != nil {
log.Fatal(err)
}
}
// 删除
if len(contacts) > 0 {
_, err := table.DeleteRecord(contacts[0].ID)
if err != nil {
log.Fatal(err)
}
}
}
总结
Golang 的 Airtable 客户端库使得与 Airtable API 的交互变得简单。通过合理使用这些库,你可以快速构建与 Airtable 集成的应用程序。记得查阅官方文档了解最新的 API 限制和功能变化。