利用 iOS 的 Shortcuts App 定期呼叫無伺服器函式或 Web API

每次做 side project 的時候,我都有需要每天、或是每小時執行一次 API 或無伺服器函式 (Serverless Function) 。要定期執行無伺服器函式或 Web API 有很多方法,在這篇文章中,RayRay 會為大家介紹一個免費的方法,就是捷徑 (Shortcuts) App。
利用 iOS 的 Shortcuts App 定期呼叫無伺服器函式或 Web API
利用 iOS 的 Shortcuts App 定期呼叫無伺服器函式或 Web API
In:

本篇原文(標題:How to Call a Serverless Function Or Web API Periodically With iOS Shortcuts)刊登於作者 Medium,由 RayRay 所著,並授權翻譯及轉載。

我們有很多方法可以定期執行無伺服器函式 (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,並點擊 + 符號來建立新的捷徑。

shortcuts-app

點擊 “Add Action” 並搜尋 “URL”,點選它並添加想呼叫的 API URL。

call-web-api-1

貼上一個 URL 給 API 後,我們可以點擊 “Get Contents of URL”,來選擇想要的請求 (request) 類型。如果你在裝置上看不到 “Get Contents of URL” 選項,可以在底部的搜尋欄搜索。

我們可以選擇 GET、POST、PUT、PATCH、或 DELETE。如果有需要,我們也可以添加 Headers。

在這個時候,我們可以點擊底部的 “Play” 按鈕來建立請求。

call-web-api-2

如果我們想在請求完成後收到通知,可以在底部的搜尋欄搜尋 “Show Notification”,並點擊它。

你可以按需要輸入文字。在這個範例中,我就輸入了 “Received Posts URL”,在這裡 URL 就是我們在頂部設定好的網址。

call-web-api-3

我們可以點擊底部的 “Play” 按鈕,來測試捷徑。

test-shortcuts

2. 自動化捷徑

剛剛我們已經測試過捷徑,那就可以把它自動化,讓它每天、每週、或按其他週期執行。

在捷徑 App 主頁的底部打開 Automation 頁面,並點擊 “Create Personal Automation”。

automation-1

點擊 “Time of Day”,並輸入想要執行這個自動化操作的時間,你想輸入甚麼時間都可以!

automation-setting-time

在頂部點擊 “Next”,並選擇 “Add Action”。讓我們搜尋 “Run Shortcut” Action 並點選它。

add-action

現在,我們要選擇剛剛添加的 “Call Web API”。點擊 ”Shortcut” 並搜尋我們的捷徑。

run-shortcut

在我的範例中,這個自動化操作會在每天 15:10 時運行。

automation

使用捷徑 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。如果你有其他建議,歡迎留言與我分享,我亦會把建議寫在文章內!

謝謝你的閱讀。

本篇原文(標題:How to Call a Serverless Function Or Web API Periodically With iOS Shortcuts)刊登於作者 Medium,由 RayRay 所著,並授權翻譯及轉載。

作者簡介:RayRay,喜歡撰寫關於科技、編程、自動化、Web 開發、低程式碼開發、積極態度的文章,歡迎訂閱我的 Blog 閱讀更多文章。

譯者簡介:Kelly Chan-AppCoda 編輯小姐。

作者
AppCoda 編輯團隊
此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。
評論
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。