行時(shí)上的無服務(wù)器利器)
Supabase Edge Functions 編寫與部署完整指南Deno 運(yùn)行時(shí)上的無服務(wù)器利器【免費(fèi)下載鏈接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/supa/supabaseSupabase Edge Functions 是基于 Deno 運(yùn)行時(shí)編寫、面向 Web 的無服務(wù)器函數(shù)服務(wù)幫你把后端邏輯部署到全球邊緣節(jié)點(diǎn)。作為 Postgres 開發(fā)平臺(tái)的核心能力之一它讓你用 TypeScript 就能快速搭建低延遲的 API 端點(diǎn)、Webhook 接收器和 AI 集成服務(wù)無需管理任何服務(wù)器。本文將從零帶你完成一個(gè) Edge Function 的創(chuàng)建、本地調(diào)試與全球部署。什么是 Supabase Edge Functions簡(jiǎn)單來說Edge Functions 就是一組運(yùn)行在全球邊緣節(jié)點(diǎn)上的 TypeScript 函數(shù)。你的代碼會(huì)被分發(fā)到離用戶最近的區(qū)域執(zhí)行帶來極低的網(wǎng)絡(luò)延遲。它為什么好用核心在于選擇了 Deno 作為運(yùn)行時(shí)的設(shè)計(jì)取舍?開源且可移植函數(shù)既能在本地運(yùn)行也能跑在任何 Deno 兼容平臺(tái)上?TypeScript 優(yōu)先無需編譯步驟原生支持類型檢查還支持 WASM?全球分發(fā)部署一次自動(dòng)覆蓋全球邊緣位置?與 Supabase 生態(tài)無縫集成可直接調(diào)用 Auth、Postgres、Storage 等全部能力 官方文檔對(duì)請(qǐng)求流程的概括請(qǐng)求先進(jìn)入邊緣網(wǎng)關(guān)relay完成路由與 JWT 鑒權(quán)再由邊緣運(yùn)行時(shí)Edge Runtime執(zhí)行你的函數(shù)最后響應(yīng)經(jīng)網(wǎng)關(guān)返回客戶端全程記錄日志與指標(biāo)。工作流程一圖看懂一個(gè) Edge Function 的完整生命周期可以概括為寫代碼 → 本地調(diào)試 → 一鍵部署 → 全球調(diào)用創(chuàng)建函數(shù)用 CLI 腳手架生成模板或在控制臺(tái)直接用 AI Assistant 生成本地運(yùn)行通過 Docker 啟動(dòng)本地 Supabase 環(huán)境支持熱重載部署上線一條命令把函數(shù)分發(fā)到全球邊緣節(jié)點(diǎn)調(diào)用函數(shù)在你的 App 中通過 HTTP 請(qǐng)求或 Supabase SDK 調(diào)用關(guān)于每個(gè)階段的細(xì)節(jié)可參考官方快速上手文檔functions 快速開始、部署指南。5 分鐘創(chuàng)建第一個(gè)函數(shù)本地開發(fā)環(huán)境搭建第一步初始化項(xiàng)目并生成函數(shù)安裝 Supabase CLI 后在項(xiàng)目目錄執(zhí)行兩個(gè)命令即可supabase init # 初始化項(xiàng)目生成 supabase/ 目錄 supabase functions new hello-world # 生成函數(shù)模板這條命令會(huì)在supabase/functions/hello-world/index.ts生成一個(gè)帶鑒權(quán)處理的基礎(chǔ)模板接收一個(gè) JSON 請(qǐng)求體返回問候消息。模板默認(rèn)使用 Supabase Auth 保護(hù)端點(diǎn)你也可以用--auth標(biāo)志調(diào)整鑒權(quán)策略。第二步啟動(dòng)本地運(yùn)行時(shí)supabase start # 啟動(dòng)本地全套 Supabase 服務(wù)需 Docker supabase functions serve hello-world # 熱重載運(yùn)行你的函數(shù)本地函數(shù)運(yùn)行在http://localhost:54321/functions/v1/hello-world保存代碼即自動(dòng)熱重載——這是它比傳統(tǒng)后端開發(fā)體驗(yàn)輕快的關(guān)鍵。第三步發(fā)送測(cè)試請(qǐng)求在控制臺(tái)打開瀏覽器編輯器也可在本地調(diào)試用 curl 或控制臺(tái)的測(cè)試面板發(fā)一個(gè) POST 請(qǐng)求帶上 Publishable Key 和{name:Functions}作為請(qǐng)求體你會(huì)收到{ message: Hello Functions! }在控制臺(tái)直接編寫與測(cè)試免 CLI 方案如果你更喜歡純圖形界面Supabase Dashboard 提供了完整的在線開發(fā)體驗(yàn)。打開控制臺(tái)后點(diǎn)擊 Deploy a new function你會(huì)看到三個(gè)入口Via Editor瀏覽器內(nèi)編寫部署、Via AI Assistant讓 AI 幫你寫、Via CLI本地開發(fā) 版本控制。編輯器內(nèi)置了模板庫——從 Simple Hello World 到 Supabase Database Access、Storage 上傳、Express Server 等選一個(gè)模板改幾行點(diǎn) Deploy function 即可上線。測(cè)試同樣不用離開瀏覽器測(cè)試面板可以設(shè)置 HTTP 方法、請(qǐng)求體、請(qǐng)求頭并選擇以 service role 等身份發(fā)起調(diào)用響應(yīng)狀態(tài)碼如 200和返回 JSON 一目了然體驗(yàn)類似 Postman。 如果你不確定怎么寫AI Assistant 可以直接根據(jù)自然語言生成完整函數(shù)。例如輸入創(chuàng)建一個(gè)處理 Stripe 支付的 Edge Function它會(huì)生成包含 Stripe SDK 調(diào)用、錯(cuò)誤處理的完整代碼點(diǎn)擊 Deploy 即可部署。最快部署方法一條命令上線全球本地調(diào)試滿意后把函數(shù)部署到生產(chǎn)環(huán)境只需三步supabase login # 首次使用需登錄認(rèn)證 supabase link --project-ref your-project-id # 關(guān)聯(lián)遠(yuǎn)程項(xiàng)目 supabase functions deploy hello-world # 部署到全球邊緣網(wǎng)絡(luò)部署成功后你的函數(shù)立刻在全球可訪問https://project-id.supabase.co/functions/v1/hello-world。幾個(gè)實(shí)用細(xì)節(jié)批量部署不帶函數(shù)名執(zhí)行supabase functions deploy會(huì)部署functions目錄下所有函數(shù)無 Docker 環(huán)境CLI 會(huì)自動(dòng)回退到 API 方式部署或用--use-api顯式指定CI/CD 自動(dòng)化配合 GitHub Actions、GitLab CI 或 Bitbucket Pipelines代碼合并到主分支即自動(dòng)部署官方文檔提供了完整配置示例見部署與 CI/CD 指南逐函數(shù)配置每個(gè)函數(shù)的 JWT 校驗(yàn)等選項(xiàng)可寫在config.toml中保證各環(huán)境行為一致在應(yīng)用中調(diào)用已部署的函數(shù)用 Supabase JS 客戶端一行搞定const { data, error } await supabase.functions.invoke(hello-world, { body: { name: JavaScript }, })安全管理密鑰Secrets 最佳實(shí)踐無服務(wù)器函數(shù)調(diào)用第三方 API 時(shí)絕不能把密鑰硬編碼在代碼里。Supabase 為 Edge Functions 內(nèi)置了密鑰管理默認(rèn)密鑰SUPABASE_URL、SUPABASE_DB_URL、SUPABASE_PUBLISHABLE_KEYS等開箱即用自定義密鑰在控制臺(tái)創(chuàng)建或通過 CLI 設(shè)置supabase secrets set KEYvalue讀取方式函數(shù)內(nèi)用Deno.env.get(KEY)安全訪問本地開發(fā)時(shí)密鑰放在supabase/functions/.env文件中supabase start時(shí)自動(dòng)加載記得把它加進(jìn).gitignore永遠(yuǎn)不要提交到版本庫。詳細(xì)規(guī)范見環(huán)境變量文檔。?? 注意service_role等秘密密鑰可繞過行級(jí)安全策略RLS只能用在 Edge Functions 這類服務(wù)端環(huán)境嚴(yán)禁暴露到瀏覽器。排查問題日志與調(diào)試技巧函數(shù)上線后控制臺(tái)提供完整的可觀測(cè)性面板在 Functions 詳情頁的Invocations標(biāo)簽下你可以看到每次調(diào)用的狀態(tài)碼、時(shí)間戳、請(qǐng)求體與部署版本還有按時(shí)間分布的調(diào)用圖表——排查線上問題基本靠它。更深入的調(diào)試可以直接用 Chrome DevTools本地supabase functions serve運(yùn)行時(shí)用 DevTools 附加到 Deno 進(jìn)程即可設(shè)置斷點(diǎn)、查看作用域變量和調(diào)試前端一樣順手。更多排障思路見調(diào)試指南與錯(cuò)誤處理文檔。適合什么場(chǎng)景以及一個(gè)避坑提醒推薦場(chǎng)景來自官方指南場(chǎng)景說明低延遲 HTTP 端點(diǎn)公開或需鑒權(quán)的 APIWebhook 接收Stripe 支付、GitHub 事件等AI 集成編排 OpenAI 等外部 LLM 調(diào)用郵件與消息機(jī)器人Slack、Discord、Telegram Bot圖片生成Open Graph 圖片、按需處理?? 一個(gè)重要的避坑提醒Edge Functions 可能存在冷啟動(dòng)且適合短生命周期、冪等的操作。如果你有長(zhǎng)時(shí)間運(yùn)行的重任務(wù)如大批量數(shù)據(jù)處理不要塞進(jìn) Edge Function而應(yīng)交給后臺(tái)任務(wù)處理。另外Postgres 在邊緣環(huán)境下應(yīng)視為遠(yuǎn)程連接池服務(wù)——使用連接池或服務(wù)端驅(qū)動(dòng)參考連接 Postgres 指南??偨Y(jié)從本地到全球的完整路線回顧一下這條無服務(wù)器開發(fā)路線創(chuàng)建supabase functions new或控制臺(tái) AI Assistant 生成函數(shù)開發(fā)supabase functions serve本地?zé)嶂剌d調(diào)試配置Secrets 管理第三方密鑰Deno.env.get()安全讀取部署supabase functions deploy一條命令全球上線運(yùn)維控制臺(tái)查看調(diào)用日志DevTools 深度調(diào)試想繼續(xù)深入倉庫里有一個(gè)包含 40 真實(shí)場(chǎng)景的示例集合從 Stripe Webhook、Telegram Bot 到 WASM 模塊、單元測(cè)試覆蓋幾乎所有常見玩法官方總覽文檔apps/docs/content/guides/functions.mdx示例函數(shù)合集examples/edge-functions/supabase/functions/示例項(xiàng)目說明與本地運(yùn)行方法examples/edge-functions/README.md掌握 Edge Functions你就擁有了 Postgres 數(shù)據(jù)庫之上完整的無服務(wù)器后端能力——把數(shù)據(jù)庫、認(rèn)證、存儲(chǔ)和函數(shù)編排放在一起構(gòu)建 Web、移動(dòng)端與 AI 應(yīng)用會(huì)變得前所未有地簡(jiǎn)單?!久赓M(fèi)下載鏈接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/supa/supabase創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考