讓 Airtable 的 Web API 聽話,照順序列出資料

只要透過 Airtable 的介面,讓行銷、PM 編輯資料,就可以在網站上呈現資料的情境,這流程在團隊工作時很常見。通常,沒有程式開發背景的同事,也可以 1 天搞懂 Airtable

只是,API 回傳的資料,似乎沒有肉眼看得出來的規則。文件上也沒有特別提到怎麼排序,得要進行非常複雜、難以理解的流程,讓順序跟介面上一致,光是寫好步驟也花很多時間。

這篇只會提到使用 Airtable Web API 遇到的問題,不會從頭開始說怎麼用,去看文件就已經相當完整。

Airtable 的標誌

"airtable": "^0.11.6"

接下來的內容


遇到的問題

快速瀏覽過 AirtableWeb API 文件,很快就可以將 Airtable API 接上 Next.jsAstro 等 framework。然而,資料並沒有跟著資料表上的順序顯示:

{
  "records": [
    {
      "id": "rec6Gyln6EB3kvQyl",
      "createdTime": "2024-08-04T08:27:24.000Z",
      "fields": { "title": "第一項", "order": 1 }
    },
    {
      "id": "recQ8ULBm3nP3vMzT",
      "createdTime": "2024-08-04T08:27:24.000Z",
      "fields": { "title": "第三項", "order": 3 }
    },
    {
      "id": "recTXYe5qOyMKkgZK",
      "createdTime": "2024-08-04T08:27:24.000Z",
      "fields": { "title": "第二項", "order": 2 }
    },
    {
      "id": "recaNRk3tQFDhG08V",
      "createdTime": "2024-08-04T09:30:30.000Z",
      "fields": { "title": "第四項", "order": 4 }
    },
    {
      "id": "recvKVMfeFiaoYEv9",
      "createdTime": "2024-08-04T09:30:33.000Z",
      "fields": { "title": "第五項", "order": 5 }
    }
  ]
}

❌ 很笨的解決方法

在表格裡新增 Column,這裡取名為 order,格式是 Autonumber

取得資料時,加上 sort 選項:

await base('tbl**************')
  .select({
    fields: [
      'title'
    ],
    pageSize: 16,
    filterByFormula: 'active = 1',
    sort: [{ field: 'order', direction: 'asc' }]
  })
  .catch((error) => {
    console.error(error);
    return false;
  });

然而,每次要改變排序時,就要再新增一欄 Autonumber 格式,然後把先前的 order 欄位刪掉,非常不 DRY。不熟悉 Airtable 的時候,操作錯誤的機率也會大幅提高。

這也是反覆 Google 後,在官方社群裡提到的方法

✅ 很簡單的解決方法

使用 Airtable Web API,在 select() 裡加上 view: 'Grid view' 就可以了:

await base('tbl**************')
  .select({
    fields: [
      'title'
    ],
    pageSize: 16,
    filterByFormula: 'active = 1',
    view: 'Grid view'
  })
  .catch((error) => {
    console.error(error);
    return false;
  });

結語

因為 Airtable 的資料,並不是以版本控制的概念來呈現,直接改資料有相當高的風險。希望能夠減少冗長流程,避開操作錯誤。


💬 討論

新增討論 👆連至 Github 的 Discussions 參與