Airtable API для разработчиков

Airtable - потрясающий инструмент. Узнайте, почему любому разработчику полезно знать об этом и его API.

Airtable - потрясающий инструмент.

Это смесь электронной таблицы и базы данных.

Как разработчик, вы можете создать базу данных с очень приятным интерфейсом, с простотой использования и редактирования электронной таблицы, и вы можете легко обновлять свои записи даже из мобильного приложения.

Идеально подходит для прототипов

Однако Airtable - это гораздо больше, чем просто прославленная таблица. Это идеальный инструмент для разработчика, который хочет прототипировать или создать MVP приложения.

MVP или минимально жизнеспособный продукт - это одна начальная версия приложения или продукта.

Большинство продуктов терпят неудачу не из-за технических ограничений или из-за того, что «стек не масштабируется». Они терпят неудачу, потому что либо в них нет необходимости, либо у производителя нет четкого способа продать продукт.

Создание MVP сводит к минимуму риски потратить месяцы на попытки создать идеальное приложение, а затем понять, что оно никому не нужно.

Отличный API

У Airtable есть отличный API для работы, который упрощает программный интерфейс с вашей базой данных Airtable.

Это то, что в 10 раз превосходит стандартную электронную таблицу, когда дело доходит до обработки данных и упрощения аутентификации.

API имеет ограничение в 5 запросов в секунду, что невысоко, но все же приемлемо для работы в большинстве сценариев.

Отличная документация по API

Вот документация Airtable API:https://airtable.com/api.

Как разработчики, мы проводим много времени, читая документацию и пытаясь понять, как все работает.

API - это сложно, потому что вам нужно взаимодействовать с сервисом, и вы хотите узнать, что предоставляет сервис, и как вы можете использовать API, чтобы делать то, что вам нужно.

Airtable поднимает планку для любой документации API. Он помещает ваши ключи API, базовые идентификаторы и имена таблиц непосредственно в примеры, поэтому вам просто нужно скопировать и вставить их в свою кодовую базу, и вы готовы к работе.

Не только это, примеры в документации API используют фактические данные в вашей таблице. Обратите внимание на то, что на этом изображении примеры значений полей являются фактическими значениями, которые я помещаю в свою таблицу:

The Airtable API docs

Документация по API предлагает примеры использованияcurl:

Examples using curl

и их официальный клиент Node.js:

Examples using Node.js

Официальный клиент Node.js

Airtable поддерживает официальнуюAirtable.jsКлиентская библиотека Node.js, очень простой в использовании способ доступа к данным Airtable.

Это удобно, потому что предлагает встроенную логику для обработки ограничений скорости и повторного выполнения запросов, когда вы их превышаете.

Давайте посмотрим на несколько общих операций, которые вы можете выполнять с помощью API, но сначала давайте определим пару значений, на которые мы будем ссылаться в коде:

  • API_KEY: ключ API Airtable
  • BASE_NAME: название базы, с которой вы будете работать
  • TABLE_NAME: имя таблицы в этой базе.
  • VIEW_NAME: имя представления таблицы.

База - это короткий срок длябаза данных, и он может содержать множество таблиц.

В таблице есть одно или несколько представлений, которые по-разному организуют одни и те же данные. Всегда есть хотя бы один вид (узнать больше о просмотрах)

Аутентифицировать

Вы можете настроитьAIRTABLE_API_KEYпеременная окружения, и Airbase.js автоматически использует ее или явно добавит в ваш код:

const Airtable = require('airtable')

Airtable.configure({ apiKey: API_KEY })

Инициализировать базу

const base = require('airtable').base(BASE_NAME)

или, если вы уже инициализировали переменную Airtable, используйте

const base = Airtable.base(BASE_NAME)

Ссылка на таблицу

Сbaseобъект, теперь вы можете ссылаться на таблицу, используя

const table = base(TABLE_NAME)

Получить записи таблицы

Любая строка внутри таблицы называетсязаписывать.

Airtable возвращает не более 100 записей на каждой странице результатов. Если вы знаете, что никогда не перейдете более чем на 100 элементов в таблице, просто используйтеfirstPageметод:

table.select({
    view: VIEW_NAME
}).firstPage((err, records) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#75715e">//all records are in the `records` array, do something with it

})

Если у вас (или ожидаете) более 100 записей, вам необходимо пролистать их по страницам, используяeachPageметод:

let records = []

// called for every page of records const processPage = (partialRecords, fetchNextPage) => { records = […records, …partialRecords] fetchNextPage() }

// called when all the records have been retrieved const processRecords = (err) => { if (err) { console.error(err) return }

//process the records array and do something with it }

table.select({ view: VIEW_NAME }).eachPage(processPage, processRecords)

Проверка содержимого записи

Любая запись имеет ряд свойств, которые вы можете проверить.

Во-первых, вы можете получить его ID:

record.id

//or record.getId()

и время создания:

record.createdTime

и вы можете получить любое из его свойств, к которым вы получаете доступ через имя столбца:

record.get('Title')
record.get('Description')
record.get('Date')

Получите конкретную запись

Вы можете получить конкретную запись по ID:

const record_id = //...

table.find(record_id, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">record</span>)

})

Или по определенному значению столбца:

const getData = url => {
  table.select({
    filterByFormula: `{url} = "${url}"`
  }).eachPage(function page(records) {
    records.forEach(function(record) {
      console.dir(record.get('json'))
    })
  })
}

Также удобно использовать.all()и async / await, если вы хотите вернуть данные из функции:

const getData = async url => {
  const records = await table.select({
    filterByFormula: `{url} = "${url}"`
  }).all()

return records[0].get(‘json’) }

Обратите внимание, чтоall()извлекает все страницы результатов синхронно, и я бы использовал его только тогда, когда у вас есть несколько страниц результатов (или 1 результат, как в этом случае)

Создать новую запись

Вы можете добавить новую запись

table.create({
  "Title": "Tutorial: create a Spreadsheet using React",
  "Link": "https://flaviocopes.com/react-spreadsheet/",
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">record</span>.<span style="color:#a6e22e">getId</span>())

})

Обновить запись

Вы можете обновить одно поле записи и оставить другие поля нетронутыми, используяupdate:

const record_id = //...

table.update(record_id, {
  "Title": "The modified title"
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">record</span>.<span style="color:#a6e22e">get</span>(<span style="color:#e6db74">'Title'</span>))

})

Или вы можете обновить некоторые поля в записи ивычищатьте, кого вы не трогали, сreplace:

const record_id = //...

table.replace(record_id, {
  "Title": "The modified title",
  "Description": "Another description"
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">record</span>)

})

Удалить запись

Запись можно удалить с помощью

const record_id = //...

table.destroy(record_id, (err, deletedRecord) => {
    if (err) {
      console.error(err)
      return
    }
<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">'Deleted record'</span>, <span style="color:#a6e22e">deletedRecord</span>.<span style="color:#a6e22e">id</span>)

})


Дополнительные руководства по услугам: