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,您需要访问Airtable 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 {
    // 处理错误
}

更多关于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中,我们可以使用github.com/mehanizm/airtable这个高效客户端库来操作Airtable。

安装

首先安装airtable库:

go get github.com/mehanizm/airtable

基本使用

1. 初始化客户端

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/mehanizm/airtable"
)

func main() {
	// 初始化客户端
	client := airtable.NewClient("your-api-key")
	
	// 指定base ID和表名
	baseID := "appXXXXXXXXXXXXXX"
	tableName := "Tasks"
	
	// 获取表对象
	table := client.GetTable(baseID, tableName)
}

2. 查询记录

// 查询所有记录
func getAllRecords(table *airtable.Table) {
	records, err := table.GetRecords().
		FromView("Grid view").
		WithFilterFormula("NOT({Status} = 'Done')").
		ReturnFields("Name", "Status", "Due Date").
		Do()
	if err != nil {
		log.Fatal(err)
	}

	for _, record := range records.Records {
		fmt.Printf("ID: %s, Name: %s, Status: %s\n", 
			record.ID, 
			record.Fields["Name"], 
			record.Fields["Status"])
	}
}

3. 创建记录

// 创建新记录
func createRecord(table *airtable.Table) {
	newRecord := &airtable.Record{
		Fields: map[string]interface{}{
			"Name":       "完成Airtable集成",
			"Status":     "In Progress",
			"Due Date":   time.Now().AddDate(0, 0, 7).Format("2006-01-02"),
			"Priority":   "High",
			"Assignee":   []string{"usrXXXXXXXXXXXXXX"}, // 用户ID
		},
	}

	createdRecord, err := table.CreateRecord(newRecord)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Created record with ID: %s\n", createdRecord.ID)
}

4. 更新记录

// 更新记录
func updateRecord(table *airtable.Table, recordID string) {
	update := &airtable.Record{
		ID: recordID,
		Fields: map[string]interface{}{
			"Status": "Done",
			"Notes":  "任务已完成",
		},
	}

	updatedRecord, err := table.UpdateRecord(update)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Updated record: %+v\n", updatedRecord)
}

5. 删除记录

// 删除记录
func deleteRecord(table *airtable.Table, recordID string) {
	deleted, err := table.DeleteRecord(recordID)
	if err != nil {
		log.Fatal(err)
	}

	if deleted {
		fmt.Println("Record deleted successfully")
	} else {
		fmt.Println("Record deletion failed")
	}
}

高级功能

批量操作

// 批量创建记录
func batchCreateRecords(table *airtable.Table) {
	records := []*airtable.Record{
		{
			Fields: map[string]interface{}{
				"Name": "任务1",
				"Status": "Todo",
			},
		},
		{
			Fields: map[string]interface{}{
				"Name": "任务2",
				"Status": "In Progress",
			},
		},
	}

	createdRecords, err := table.CreateRecords(records)
	if err != nil {
		log.Fatal(err)
	}

	for _, r := range createdRecords.Records {
		fmt.Printf("Created record ID: %s\n", r.ID)
	}
}

分页查询

// 分页查询
func paginatedRecords(table *airtable.Table) {
	pageSize := 5
	offset := ""

	for {
		records, err := table.GetRecords().
			WithPageSize(pageSize).
			WithOffset(offset).
			Do()
		if err != nil {
			log.Fatal(err)
		}

		for _, record := range records.Records {
			fmt.Printf("ID: %s, Name: %s\n", record.ID, record.Fields["Name"])
		}

		if records.Offset == "" {
			break
		}
		offset = records.Offset
	}
}

最佳实践

  1. 错误处理:Airtable API有速率限制,建议实现重试逻辑
  2. 字段映射:考虑创建结构体来映射字段,提高代码可读性
  3. 并发控制:批量操作时控制并发请求数量
  4. 缓存:频繁访问的数据可以适当缓存
// 带重试的查询函数
func getRecordsWithRetry(table *airtable.Table, maxRetries int) (*airtable.Records, error) {
	var records *airtable.Records
	var err error
	
	for i := 0; i < maxRetries; i++ {
		records, err = table.GetRecords().Do()
		if err == nil {
			return records, nil
		}
		
		if i < maxRetries-1 {
			time.Sleep(time.Second * time.Duration(math.Pow(2, float64(i))))
		}
	}
	
	return nil, err
}

这个库提供了简洁的API来操作Airtable,支持大多数常用功能。对于更复杂的需求,可以直接扩展或基于此库构建自己的封装。

回到顶部