Edge Functions คืออะไร
ไอเดียในหนึ่งประโยค
หัวข้อที่มีชื่อว่า “ไอเดียในหนึ่งประโยค”Edge Functions คือฟังก์ชัน TypeScript ฝั่งเซิร์ฟเวอร์ที่รันบน Deno ถูก deploy กระจายไปทั่วโลกใกล้ผู้ใช้ ใช้ตอนที่ logic ของคุณไม่ใช่แค่ database query
ไม่ใช่ Node.js และไม่ใช่ database query
หัวข้อที่มีชื่อว่า “ไม่ใช่ Node.js และไม่ใช่ database query”ทุก layer ที่คอร์สนี้พูดถึงมาก่อนหน้านี้อยู่ใกล้ Postgres มาก ๆ PostgREST แปลง table ให้กลายเป็น REST API, RPC function รัน logic ที่ใกล้เคียง SQL อยู่ในตัวฐานข้อมูล ส่วน RLS บังคับสิทธิ์ระดับ row ส่วน Edge Functions คือ layer สำหรับทุกอย่างที่ไม่เข้ากับรูปแบบนั้น เช่น เรียก third-party API, เก็บ secret ที่ไม่ควรอยู่ในฐานข้อมูล, ทำงานที่กิน CPU หนักนอกเหนือ SQL หรือทำ HTTP endpoint แบบ stateless ที่ควบคุม request/response เองทั้งหมด
รายละเอียด runtime ที่สำคัญคือ Edge Functions รันบน Deno ไม่ใช่ Node.js Deno มี Deno.serve เป็น global function สำหรับจัดการ HTTP request มาให้ในตัว รองรับ TypeScript แบบ first-class โดยไม่ต้องมี build step และปลอดภัยแบบ secure-by-default ด้วย sandboxing ถ้าคุณเคยเขียน server code บน Node.js มาก่อน รูปแบบ request/response จะคุ้นเคย แต่ API และ permission model เป็นของ Deno เอง
Deno.serve((req) => { return new Response('Hello from the edge')})เลือก Edge Function แทน Postgres RPC function เมื่อไหร่
หัวข้อที่มีชื่อว่า “เลือก Edge Function แทน Postgres RPC function เมื่อไหร่”โมดูล Auto-Generated API ให้วิธีรัน logic เองใกล้ข้อมูลไปแล้วคือ Postgres RPC function นั่นยังคงเป็นตัวเลือกที่ถูกต้องเมื่อ logic นั้นเป็น database operation โดยพื้นฐาน เขียนด้วย SQL ได้ดีที่สุด หรือต้องรันอยู่ใน transaction เดียวกับการเขียนข้อมูลอื่น ๆ ให้เลือก Edge Function แทนเมื่อข้อใดข้อหนึ่งต่อไปนี้เป็นจริง
- ต้องเรียก third-party API ภายนอก (payment provider, email service, AI model)
- logic ต้องใช้ secret (API key, signing key) ที่ห้ามให้ฐานข้อมูลหรือ client อ่านได้
- งานนั้นกิน CPU หนักในแบบที่ SQL แสดงออกได้ไม่สะอาด (image processing, parse string ซับซ้อน, เรียก library อื่น)
- ต้องการ HTTP endpoint แบบ stateless ที่ควบคุม header, status code และ request/response cycle เองเต็มรูปแบบ
ถ้าไม่เข้าเงื่อนไขข้างต้นเลยและ operation นั้นแค่ “อ่านหรือเขียนบาง row พร้อม logic บางอย่าง” RPC function มักจะง่ายกว่าและเร็วกว่าเพราะไม่ต้องออกจากฐานข้อมูลเลย
workflow ผ่าน CLI
หัวข้อที่มีชื่อว่า “workflow ผ่าน CLI”Supabase CLI มองว่า Edge Functions เป็นแค่ไฟล์ธรรมดาในโปรเจกต์ deploy ได้ด้วยคำสั่งเดียว
# Scaffold a new function at supabase/functions/hello-world/index.tssupabase functions new hello-world
# Run all functions locally for developmentsupabase functions serve
# Ship a function to your live projectsupabase functions deploy hello-worldsupabase functions new สร้างไฟล์และโฟลเดอร์ boilerplate ให้ supabase functions serve เปิด Deno runtime ในเครื่องเพื่อให้ทดสอบได้โดยไม่ต้อง deploy supabase functions deploy อัปโหลด function ให้ infrastructure ฝั่ง edge ของ Supabase รันใกล้จุดที่ request มาที่สุด
flowchart LR
client["Client app"] -->|"GET/POST via PostgREST"| rest["Auto-generated REST API"]
client -->|"rpc()"| rpcfn["Postgres RPC function"]
client -->|"functions.invoke()"| edge["Edge Function (Deno, deployed at the edge)"]
rest --> db[("Postgres")]
rpcfn --> db
edge -->|"optional"| db
edge -->|"optional"| ext["Third-party API"]