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

1 回复

更多关于golang Airtable API 客户端插件库 airtable 的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang Airtable API 客户端库使用指南

Airtable 是一个流行的云端数据库服务,提供了友好的 API 接口。在 Golang 中,我们可以使用第三方库来简化与 Airtable API 的交互。

常用 Golang Airtable 客户端库

目前比较流行的 Golang Airtable 客户端库有:

  1. go-airtable
  2. airtable-go

下面我以 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",
			},
		},
	},
}

最佳实践

  1. 错误处理:始终检查 API 调用的错误
  2. 速率限制:Airtable API 有速率限制(5请求/秒),考虑添加延迟
  3. 字段映射:为 Airtable 字段创建结构体映射可以提高代码可读性
  4. 连接池:对于高频访问,考虑重用 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 限制和功能变化。

回到顶部