我們有很多方法可以定期執行無伺服器函式 (Serverless Function) 或 Web API。但是今天,我想跟用 iPhone 或 iPad 的你們,介紹一個免費的方法,就是捷徑 (Shortcuts) App。
捷徑 App 可用於所有 iOS 13.1 以上的 iPhone、iPad、和 iPod touch。如果你沒有 Apple 裝置,文章的後半部分我也會介紹另一個方法,讓我們用另一個服務來做同樣的實作。
執行定時操作
每次我做 side project 的時候,都有需要每天、或是每小時執行一次 API 或無伺服器函式。
但我不太喜歡設置排程工作 (Cron Job)。因為我是在 Netlify 上執行所有 App,根本沒有地方讓我設置排程工作。
所以我想,既然我可以利用 iOS 的捷徑 App 調用 Web API,把它自動化不就可以了嗎?
範例 App
我正在利用 Angular、Angular Material、無伺服器函式和 Upstash(Redis 的無伺服器數據庫)構建一個 Dashboard。在這個 Dashboard 中,我會使用 “Our World In Data” 中的開源數據。
從 Our World In Data 的儲存庫加載大量數據需要很多時間,我認為利用 Upstash 將其保存到 Redis 中,就可以提升加載數據的速度。
由於更新數據十分耗時,因此我有望為 Netlify 建立一個無伺服器函式,然後每天使用捷徑 App 呼叫它。
以下是我的無伺服器函式:
import { Handler, HandlerContext, HandlerEvent } from '@netlify/functions';
import fetch from 'node-fetch';
import { client } from '../functions-utils/redis-client';
import { headers } from 'functions-utils/cors';
function getData(): Promise<any> {
return fetch(
'https://apiurl.com/data.json'
).then((res) => res.json());
}
const handler: Handler = async (
event: HandlerEvent,
) => {
try {
if (event.httpMethod === 'OPTIONS') {
return { statusCode: 200, headers, body: 'Ok' };
}
if (event.httpMethod !== 'PUT') {
return {
statusCode: 405,
headers,
body: JSON.stringify({ message: 'Method Not Allowed' }),
};
}
const allCountries = await getData();
const data = await client.set('countries', allCountries);
return {
statusCode: 200,
headers,
body: JSON.stringify({
message: 'All countries data',
data: JSON.parse(allCountries ?? '{}'),
}),
};
} catch (err) {
console.log('Error:', err);
return {
statusCode: 400,
headers,
body: JSON.stringify({ message: 'Error', err }),
};
}
};
export { handler };
我不會在這裡詳細解釋如何建立一個無伺服器函式,如果你有興趣了解更多,可以查閱以下網站:
如何定期自動呼叫 Web API
1. 設定捷徑
首先,讓我們打開捷徑 App,並點擊 + 符號來建立新的捷徑。
點擊 “Add Action” 並搜尋 “URL”,點選它並添加想呼叫的 API URL。
貼上一個 URL 給 API 後,我們可以點擊 “Get Contents of URL”,來選擇想要的請求 (request) 類型。如果你在裝置上看不到 “Get Contents of URL” 選項,可以在底部的搜尋欄搜索。
我們可以選擇 GET、POST、PUT、PATCH、或 DELETE。如果有需要,我們也可以添加 Headers。
在這個時候,我們可以點擊底部的 “Play” 按鈕來建立請求。
如果我們想在請求完成後收到通知,可以在底部的搜尋欄搜尋 “Show Notification”,並點擊它。
你可以按需要輸入文字。在這個範例中,我就輸入了 “Received Posts URL”,在這裡 URL 就是我們在頂部設定好的網址。
我們可以點擊底部的 “Play” 按鈕,來測試捷徑。
2. 自動化捷徑
剛剛我們已經測試過捷徑,那就可以把它自動化,讓它每天、每週、或按其他週期執行。
在捷徑 App 主頁的底部打開 Automation 頁面,並點擊 “Create Personal Automation”。
點擊 “Time of Day”,並輸入想要執行這個自動化操作的時間,你想輸入甚麼時間都可以!
在頂部點擊 “Next”,並選擇 “Add Action”。讓我們搜尋 “Run Shortcut” Action 並點選它。
現在,我們要選擇剛剛添加的 “Call Web API”。點擊 ”Shortcut” 並搜尋我們的捷徑。
在我的範例中,這個自動化操作會在每天 15:10 時運行。
使用捷徑 App 最好的地方,就是可以所有步驟都會在裝置上執行。你只要說:「Hi Siri,呼叫 Web API」,捷徑 App 就會照著執行了。
設置自動呼叫 Web API 的另一個方法:Github Actions
如果你沒有 Apple 裝置,就無法使用捷徑 App。我不了解 Android 是否有差不多的功能,但要自動呼叫 Web API 或無伺服器函式,GitHub Actions 也是一個很好的方法。
除了自動呼叫 Web API 之外,Github Actions 還有很多功能。因此,我建議你可以閱讀這篇由 Jason Etcovitch 所寫的教學文章。
總結
除了 iOS 捷徑 App 和 GitHub Actions 之外,還有很多其他方法可以自動化 Web API 或無伺服器函式,不過最重要的是找到自己覺得最方便的方法。
對於我來說,最重要的是可以在我的裝置上免費做到這個功能,因此我會選擇使用捷徑 App。如果你有其他建議,歡迎留言與我分享,我亦會把建議寫在文章內!
謝謝你的閱讀。