API Airtable pour les développeurs

Airtable est un outil incroyable. Découvrez pourquoi il est bon que tout développeur le sache et son API

Airtable est un outil incroyable.

C'est un mélange entre une feuille de calcul et une base de données.

En tant que développeur, vous pouvez créer une base de données avec une interface très agréable à utiliser, avec la facilité d'utilisation et d'édition d'une feuille de calcul, et vous pouvez facilement mettre à jour vos enregistrements même à partir d'une application mobile.

Parfait pour les prototypes

Cependant, Airtable est bien plus qu'une feuille de calcul glorifiée. C'est un outil parfait pour un développeur qui cherche à prototyper ou à créer un MVP d'une application.

Un MVP, ou produit minimum viable, est une version initiale d'une application ou d'un produit.

La plupart des produits échouent non pas à cause de limitations techniques ou parce que «la pile n'a pas évolué». Ils échouent parce que soit ils n'en ont pas besoin, soit le fabricant n'a pas de moyen clair de commercialiser le produit.

La création d'un MVP minimise les risques de passer des mois à essayer de créer l'application parfaite, puis de réaliser que personne n'en veut.

Une excellente API

Airtable dispose d'une API absolument agréable avec laquelle travailler, ce qui facilite l'interface avec votre base de données Airtable par programmation.

C'est ce qui le rend 10 fois supérieur à une feuille de calcul standard, en ce qui concerne la gestion des données ET le rend facile à authentifier.

L'API a une limite de 5 requêtes par seconde, ce qui n'est pas élevé, mais toujours raisonnable de travailler avec la plupart des scénarios.

Une excellente documentation pour l'API

Voici la documentation de l'API Airtable:https://airtable.com/api.

En tant que développeurs, nous passons beaucoup de temps à lire des documents et à essayer de comprendre comment les choses fonctionnent.

Une API est délicate car vous devez interagir avec un service et vous voulez à la fois savoir ce que le service expose et comment utiliser l'API pour faire ce dont vous avez besoin.

Airtable élève la barre pour toute documentation API disponible. Il place vos clés API, vos ID de base et vos noms de table directement dans les exemples, il vous suffit donc de les copier et de les coller dans votre base de code et vous êtes prêt à partir.

Non seulement cela, les exemples dans la documentation de l'API utilisent les données réelles de votre tableau. Dans cette image, remarquez comment les valeurs d'exemple de champs sont des valeurs réelles que j'ai placées dans ma table:

The Airtable API docs

La documentation de l'API propose des exemples d'utilisationcurl:

Examples using curl

et leur client officiel Node.js:

Examples using Node.js

Le client officiel Node.js

Airtable maintient le fonctionnaireAirtable.jsBibliothèque cliente Node.js, un moyen très facile à utiliser pour accéder aux données Airtable.

C'est pratique car il offre une logique intégrée pour gérer les limites de débit et réessayer les demandes lorsque vous les dépassez.

Voyons quelques opérations courantes que vous pouvez effectuer avec l'API, mais définissons d'abord quelques valeurs que nous référencerons dans le code:

  • API_KEY: la clé API Airtable
  • BASE_NAME: le nom de la base avec laquelle vous travaillerez
  • TABLE_NAME: le nom de la table dans cette base.
  • VIEW_NAME: le nom de la vue de table.

Une base est un court terme pourbase de données, et il peut contenir de nombreuses tables.

Une table a une ou plusieurs vues qui organisent les mêmes données d'une manière différente. Il y a toujours au moins une vue (en savoir plus sur les vues)

Authentifier

Vous pouvez configurer leAIRTABLE_API_KEYvariable d'environnement, et Airbase.js l'utilisera automatiquement ou l'ajoutera explicitement dans votre code:

const Airtable = require('airtable')

Airtable.configure({ apiKey: API_KEY })

Initialiser une base

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

ou, si vous avez déjà initialisé la variable Airtable, utilisez

const base = Airtable.base(BASE_NAME)

Faire référence à une table

Avec unbaseobjet, vous pouvez désormais référencer une table en utilisant

const table = base(TABLE_NAME)

Récupérer les enregistrements de la table

Toute ligne à l'intérieur d'une table s'appelle unrecord.

Airtable renvoie un maximum de 100 enregistrements dans chaque page de résultats. Si vous savez que vous n'allez jamais dépasser 100 éléments dans un tableau, utilisez simplement lefirstPageméthode:

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

})

Si vous avez (ou prévoyez) plus de 100 enregistrements, vous devez les parcourir en utilisant leeachPageméthode:

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)

Inspection du contenu de l'enregistrement

Tout enregistrement a un certain nombre de propriétés que vous pouvez inspecter.

Tout d'abord, vous pouvez obtenir son identifiant:

record.id

//or record.getId()

et le temps de la création:

record.createdTime

et vous pouvez obtenir l'une de ses propriétés, auxquelles vous accédez via le nom de la colonne:

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

Obtenez un enregistrement spécifique

Vous pouvez obtenir un enregistrement spécifique par 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>)

})

Ou par une valeur de colonne spécifique:

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

C'est aussi pratique à utiliser.all()et async / await si vous souhaitez renvoyer les données de la fonction:

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

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

Notez queall()récupère toutes les pages de résultats de manière synchrone, et je ne l'utiliserais que lorsque vous avez quelques pages de résultats (ou 1 résultat, comme dans ce cas)

Créer un nouvel enregistrement

Vous pouvez ajouter un nouvel enregistrement

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>())

})

Mettre à jour un enregistrement

Vous pouvez mettre à jour un seul champ d'un enregistrement et laisser les autres champs inchangés, en utilisantupdate:

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>))

})

Ou, vous pouvez mettre à jour certains champs dans un enregistrement etévacuerceux que tu n'as pas touchés, avecreplace:

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>)

})

Supprimer un enregistrement

Un enregistrement peut être supprimé à l'aide de

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>)

})


Plus de tutoriels sur les services: