Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mehanizm/airtable

Simple golang airtable API wrapper
https://github.com/mehanizm/airtable

airtable api go golang

Last synced: 14 days ago
JSON representation

Simple golang airtable API wrapper

Awesome Lists containing this project

README

        

Golang Airtable API
================

[![GoDoc](https://godoc.org/github.com/mehanizm/airtable?status.svg)](https://pkg.go.dev/github.com/mehanizm/airtable)
![Go](https://github.com/mehanizm/airtable/workflows/Go/badge.svg)
[![codecov](https://codecov.io/gh/mehanizm/airtable/branch/master/graph/badge.svg)](https://codecov.io/gh/mehanizm/airtable)
[![Go Report](https://goreportcard.com/badge/github.com/mehanizm/airtable)](https://goreportcard.com/badge/github.com/mehanizm/airtable)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go)

A simple #golang package to access the [Airtable API](https://airtable.com/api).

Table of contents
===
- [Golang Airtable API](#golang-airtable-api)
- [Table of contents](#table-of-contents)
- [Installation](#installation)
- [Basic usage](#basic-usage)
- [Initialize client](#initialize-client)
- [Get table](#get-table)
- [List records](#list-records)
- [Add records](#add-records)
- [Get record by ID](#get-record-by-id)
- [Update records](#update-records)
- [Delete record](#delete-record)
- [Bulk delete records](#bulk-delete-records)
- [Special thanks](#special-thanks)

## Installation

The Golang Airtable API has been tested compatible with Go 1.13 on up.

```
go get github.com/mehanizm/airtable
```

## Basic usage

### Initialize client

You should get `your_api_token` in the airtable [account page](https://airtable.com/account)
```Go
client := airtable.NewClient("your_api_token")
```

You can use custom http client here
```Go
client.SetCustomClient(http.DefaultClient)
```

### Custom context
Each method below can be used with custom context. Simply use `MethodNameContext` call and provide context as first argument.

### List bases

```Go
bases, err := client.GetBases().WithOffset("").Do()
```

### Get base schema

```Go
schema, err := client.GetBaseSchema("your_database_ID").Do()
```

### Get table

To get the `your_database_ID` you should go to [main API page](https://airtable.com/api) and select the database.

```Go
table := client.GetTable("your_database_ID", "your_table_name")
```

### List records

To get records from the table you can use something like this

```Go
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 {
// Handle error
}
```

### Add records

```Go
recordsToSend := &airtable.Records{
Records: []*airtable.Record{
{
Fields: map[string]any{
"Field1": "value1",
"Field2": true,
},
},
},
}
receivedRecords, err := table.AddRecords(recordsToSend)
if err != nil {
// Handle error
}
```

### Get record by ID

```Go
record, err := table.GetRecord("recordID")
if err != nil {
// Handle error
}
```

### Update records

To partial update one record

```Go
res, err := record.UpdateRecordPartial(map[string]any{"Field_2": false})
if err != nil {
// Handle error
}
```

To full update records

```Go
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 {
// Handle error
}
```

### Delete record

```Go
res, err := record.DeleteRecord()
if err != nil {
// Handle error
}
```

### Bulk delete records

To delete up to 10 records

```Go
records, err := table.DeleteRecords([]string{"recordID1", "recordsID2"})
if err != nil {
// Handle error
}
```

## Special thanks

Inspired by [Go Trello API](github.com/adlio/trello)