標籤: workers

  • 實作 js 函式庫包裝為 API 提供給後端呼叫

    實作 js 函式庫包裝為 API 提供給後端呼叫

    最近在想有滿多 js 實作資料處理的函式庫,於是想看有沒有 nodejs 或是相似的程式語言可以相容 js 實做包裝城後端,於是想到了用 Cloudflare Worker 服務來實作。

    我拿 iztro 這套服務來實作,我認為很適合包裝成 API 呼叫的功能有幾個特色:

    1. 以處理、整理資料為目的的服務。
    2. 不需要相依其他套件( e.g. jQuery)
    3. 產生的結果是一包字串(json, xml 等),或是能轉成 base64 的檔案字串。

    先附上 Github repo 。名字叫做「My Iztro Worker」,有夠隨便,哈。

    這個服務基於 Cloudflare Worker 實作,實作以下功能:

    • API 服務:接受包含生日、出生時間、性別等參數的 HTTP GET 請求,返回相應的紫微斗數資訊。
    • 使用說明頁面:當請求缺少必要參數時,返回一個包含 API 使用說明和測試表單的 HTML 頁面,方便使用者瞭解如何使用該 API。
    • 速率限制:為了防止濫用,對每個客戶端 IP 設置了每分鐘最多 10 次請求的限制。

    實作了一個 usage.js 頁面作為測試 form 表,並且使用 Worker 特有的功能實作呼叫頻率的限制;src/index.js 中可以依照原始套件的說明參考修改。

    部署方式請參考請參考原始碼的 README,我作了一個線上範例,視狀況可能會停用,且用且珍惜:


    同場加映,請 AI 協助生成實作 nodejs 的說明:

    將 JavaScript 函式庫包裝為 API,提供後端呼叫,是現代軟體開發中常見的需求。這種方法能夠將複雜的邏輯封裝起來,透過標準化的介面供其他應用程式或服務使用。以下是實作此項目的簡要流程:

    1. 選擇適當的執行環境: 首先,選擇一個適合執行 JavaScript 的環境。Node.js 是一個常見的選擇,因為它允許在伺服器端執行 JavaScript。此外,像 Cloudflare Workers 這樣的伺服器無關環境也提供了在邊緣節點執行 JavaScript 的能力。
    2. 建立專案結構: 為您的 API 建立一個新的專案目錄,並初始化專案:
       mkdir my-js-api
       cd my-js-api
       npm init -y

    這將建立一個包含預設設定的 package.json 檔案。

    1. 安裝相依套件: 根據您的需求,安裝必要的相依套件。例如,若您需要處理 HTTP 請求,可以安裝 Express.js:
       npm install express
    1. 撰寫 API 邏輯: 在專案目錄中,建立一個主檔案(例如 index.js),並撰寫處理 HTTP 請求的邏輯。以下是一個使用 Express.js 的簡單範例:
       const express = require('express');
       const app = express();
       const port = 3000;
    
       // 引入您的 JavaScript 函式庫
       const myLibrary = require('./myLibrary');
    
       app.use(express.json());
    
       app.post('/api/your-endpoint', (req, res) => {
         const input = req.body.input;
         const result = myLibrary.yourFunction(input);
         res.json({ result });
       });
    
       app.listen(port, () => {
         console.log(`API 伺服器正在 http://localhost:${port} 上運行`);
       });

    在這個範例中,我們建立了一個 POST 端點 /api/your-endpoint,接受 JSON 格式的請求,並使用 myLibrary 中的函式處理輸入。

    1. 測試 API: 在本機運行您的 API 伺服器,並使用工具(如 Postman)或命令列工具(如 curl)進行測試:
       curl -X POST http://localhost:3000/api/your-endpoint -H "Content-Type: application/json" -d '{"input": "your data"}'

    確保您的 API 能夠正確處理請求並返回預期的結果。

    1. 部署 API: 根據您的需求,將 API 部署到適當的環境中。例如,您可以將其部署到雲端服務提供商(如 AWS、Heroku)或使用 Docker 容器進行部署。
    2. 實作速率限制和安全性: 為了防止濫用,建議實作速率限制機制。此外,確保您的 API 僅允許授權的請求,並實作適當的驗證和授權機制。

    透過上述步驟,您可以將 JavaScript 函式庫包裝為 API,供後端系統呼叫,實現功能的模組化和重用性。

  • Cloudflare Workers 服務介紹

    如果有使用 cloudflare 服務,需要 serverless 功能的話,可以評估使用量來使用 cloudflare 的 workers 服務。參考:

    Cloudflare Workers documentation · Cloudflare Workers docs
    Documentation for Cloudflare Workers, a serverless execution environment that allows you to create entirely new applications or augment existing ones without configuring or maintaining infrastructure.

    他可以作為 client to server 的 middleware 或是當作是一個終端。 serverless 的服務各大 vps 商也都有,像是 AWS GCPAzure 等,這裡也有篇 Linode 關於 Serverless Computing 的優缺點介紹

    值得一提的是他還有 wokers router 服務,以及 workers KV 服務,提供了路由和儲存的實作,有興趣可以玩玩看。另外在 workers 的設定中,如果同一個帳號中也有使用 name server 的服務,可以調整自定義網域的作法,將子域名指定過去,這樣就不用記很奇怪的域名啦。

    Cloudflare 的 workers 服務有提供免費以及付費的方案,參考介紹頁面底下的表格,細節計算可以參考:

    Pricing · Cloudflare Workers docs
    By default, users have access to the Workers Free plan. The Workers free plan includes limited usage of Workers, Pages Functions and Workers KV. Read …

    Workers 使用的語言比較偏向 nodejs ,可用的應用場景滿多的,可以參考官方文件範例
    像是如果需要做一個簡單跳轉,可以這樣寫:

    const base = 'https://example.com';
    const statusCode = 301;
    
    async function handleRequest(request) {
      const url = new URL(request.url);
      const { pathname, search } = url;
    
      const destinationURL = base + pathname + search;
    
      return Response.redirect(destinationURL, statusCode);
    }
    
    addEventListener('fetch', async event => {
      event.respondWith(handleRequest(event.request));
    });
    

     

    同場加映其他介紹文章:

    Cloudflare Workers入門 ─ 簡介
    Cloudflare Workers將送進來的request在cloudflare的網絡上做處理。你可以把它放在client和server的中間,用做Middleware;後方也可以沒有server ─ …

    tool man xyz
    此網站版面極為簡潔,內容包含不好笑又尷尬的文章、覺得之後可能會看所以先保存但事後很少會看的新聞等。