標籤: web

  • 實作 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,供後端系統呼叫,實現功能的模組化和重用性。

  • Docker 初體驗

    最近在嘗試用 docker 建構各種環境,目標有 N 個:

    1. 實現 docker 的優勢,讓開發環境和正式環境一致,去除可能的環境差異
    2. 讓環境設定模塊化,搭配已經整理好的設定檔案,減少重複架設的工作內容
    3. 環境設定可以更為彈性和獨立,降低耦合,增加不同語言協作的可行性。

    我想打造一個可以無腦部署又有彈性而且開發成本低的系統部署方法就是。

    這邊弄了一個 LEMP 的結構,未來應該會在不斷新增各種可選的設定檔案上去這樣。

    GitHub – lazyjerry/docker-compose-lemp-stack: Docker Compose LNMP 結構安裝
    Docker Compose LNMP 結構安裝. Contribute to lazyjerry/docker-compose-lemp-stack development by creating an account on GitHub.

    有興趣可以幫我點星星和留言。

    先說設定檔案我都是網路上直接抓模板還有抄各種 hosting panel 的設定檔,到時還要再優化是真的。

    目前玩到這裡的有些結論,記錄起來避免忘記:

    1. 這肯定套件王愛用,hub 上很多已經有配置好的,每個都是獨立的一包不會互相依賴。
    2. 不會互相依賴也是有壞處,一些基礎的套件要分開裝,所以使用 docker 還是有門檻在。
    3. 設定檔案先寫好,docker 的優勢就會出來,到時一包一個配置好裝起來就可以用。
    4. 但是因為設定檔案必須先寫好的原因,所以如果在本機開發環境上,常常會遇到一次要開不同的案子,這邊本機用 docker 就會囧囧的。
    5. 所有的 config 建議 mont 到宿主機的磁碟上,這邊如果不是使用官方的 docker image 就會囧囧,很多 docker 會包成一包,這樣違反 docker 無狀態的精神,建議套件王避開這種 image。
    6. 不要把 docker 當作 VM 來跑作業系統,這樣彈性就跑掉了。然而我也不懂是為什麼會有文章寫不建議 docker 跑 mysql ? 這個問題待釐清就是。

    這裡有一份對岸知乎的比較文章,簡體字閱讀功能沒障礙的話推薦可以看一下:

    请问各位业界人士,Docker的优缺点有哪些? – 知乎
    如题,有一篇相关论文提到了docker。我随便看了看感觉这东西缺点很多,尽管安装后使用可以省掉很多安装第…


    同場加映 附上 Docker 安裝步驟

    安裝套件

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    docker.repo 中也同時包含 edge 版本的 Docker 套件庫,不過預設是被停用的,想安裝 edge 版本的話,就要先啟用 edge 版本的套件庫(如果只是要安裝 stable 版本的人,就可以省略這一步):

    sudo yum-config-manager --enable docker-ce-edge

    更新 yum 的套件索引:

    sudo yum makecache fast

    安裝 Docker CE 版:

    sudo yum install docker-ce

    第一次安裝 Docker 的時候,會需要匯入 GPG 的金鑰,Docker CE 版的金鑰指紋是 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 確認無誤就選擇 y 匯入。

    安裝好之後,啟動系統的 Docker 服務:

    sudo systemctl start docker

    執行 hello world 程式測試:

    sudo docker run hello-world

    安裝 docker-compose

    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    建立連結

    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    測試版本,應該要顯示版本號碼

    docker-compose --version
    
    # docker-compose version 1.29.2, build 1110ad01

    啟動 docker

    systemctl start docker;systemctl enable docker;




    參考資料:

    專家觀點:Docker架構優缺點大剖析
    深入研究Docker原始碼、著有《Docker源碼分析》而大受好評的中國Docker …
    Share Compose configurations between files and projects
    How to use Docker Compose's extends keyword to share configuration between files and projects

    GitHub – stevenliebregt/docker-compose-lemp-stack: Docker Compose Linux Nginx MariaDB PHP7.2 Stack
    Docker Compose Linux Nginx MariaDB PHP7.2 Stack. Contribute to stevenliebregt/docker-compose-lemp-stack development by creating an account on GitHub.

    可以裝起來抓裡面的設定檔案樣板,滿實用我覺得

    GitHub – aaPanel/BaoTa: 宝塔Linux面板 – 简单好用的服务器运维面板
    宝塔Linux面板 – 简单好用的服务器运维面板. Contribute to aaPanel/BaoTa development by creating an account on GitHub.

    2021-07-29 update

    推薦一個不錯的筆記: