Supabase Edge Functions là gì và tại sao nên dùng?
Supabase Edge Functions là một giải pháp serverless cho phép bạn chạy code backend ở các vị trí địa lý gần người dùng nhất. Điểm khác biệt so với các dịch vụ serverless khác là Edge Functions được triển khai trên mạng lưới CDN toàn cầu, giúp giảm độ trễ và tăng tốc độ phản hồi. Với Supabase, bạn có thể viết Edge Functions bằng TypeScript hoặc JavaScript, rồi deploy trực tiếp từ dashboard hoặc CLI.
Lợi ích rõ ràng nhất là bạn không cần quản lý server, tự động scale theo nhu cầu, và tích hợp mượt mà với database và authentication của Supabase. Điều này rất phù hợp để xây dựng API nhỏ gọn, webhook, hoặc các tác vụ cần xử lý nhanh ở biên mạng.
Các khái niệm cơ bản cần nắm
Mỗi Edge Function là một file TypeScript/JavaScript trong thư mục supabase/functions/. Bạn export một hàm handler nhận vào Request và Env object, trả về Response. Supabase tự động build và deploy khi bạn chạy lệnh supabase functions deploy.
Các biến môi trường (environment variables) được quản lý qua supabase.functions.config(), giúp bạn lưu trữ secret một cách an toàn. Ngoài ra, bạn có thể import các module từ npm, nhưng cần lưu ý giới hạn kích thước bundle để đảm bảo tốc độ.
Cài đặt và thiết lập dự án
Để bắt đầu, bạn cần cài đặt CLI của Supabase:
npm install -g supabase
Sau đó, khởi tạo project nếu chưa có:
supabase init
Trong project, tạo thư mục supabase/functions/ và file api.ts bên trong. Đây sẽ là nơi chứa code của function đầu tiên.
Viết API đơn giản với Edge Functions
Giả sử bạn muốn tạo một API trả về danh sách sản phẩm từ database. Đầu tiên, cài thêm @supabase/supabase-js để kết nối database:
npm install @supabase/supabase-js
Code mẫu trong api.ts:
import { serve } from 'https://deno.land/x/surf/mod.ts'
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = 'your-project-url'
const supabaseKey = 'your-anon-key'
const supabase = createClient(supabaseUrl, supabaseKey)
Quảng cáo
300x250 In-Content Advertisement
serve({
'/api/products': async (req) => {
const { data, error } = await supabase
.from('products')
.select('*')
.order('id', { ascending: true })
if (error) {
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
headers: { 'Content-Type': 'application/json' },
})
}
return new Response(JSON.stringify(data), {
status: 200,
headers: { 'Content-Type': 'application/json' },
})
},
})
Deploy và test API
Sau khi code xong, deploy bằng lệnh:
supabase functions deploy api
Khi deploy thành công, CLI sẽ trả về URL của function, ví dụ: https://your-project.supabase.co/api. Bạn có thể test bằng curl hoặc browser:
curl https://your-project.supabase.co/api/products
Một số tips thực tế
- Giới hạn thời gian chạy: Edge Functions có timeout khoảng 10-30 giây, nên tránh các tác vụ nặng hoặc vòng lặp vô hạn. - Size bundle: Giữ bundle nhỏ để tăng tốc độ khởi động. Sử dụng tree-shaking và chỉ import những module cần thiết. - Security: Không lưu secret trong code, luôn dùng environment variables. Nếu cần xác thực user, tận dụng Supabase Auth token từ request header. - CORS: Nếu API được gọi từ frontend, nhớ set CORS header phù hợp.
Kết luận
Supabase Edge Functions cung cấp một cách đơn giản và hiệu quả để xây dựng API serverless, đặc biệt khi kết hợp với database và auth của Supabase. Với khả năng triển khai toàn cầu, chi phí hợp lý và độ trễ thấp, đây là lựa chọn đáng cân nhắc cho các dự án vừa và nhỏ, hoặc khi bạn muốn tập trung vào code thay vì quản lý infrastructure.
Nếu bạn mới bắt đầu, hãy thử tạo vài API nhỏ, test kỹ trước khi đưa vào production. Khi đã quen, bạn sẽ thấy việc xây dựng backend nhanh chóng và linh hoạt hơn rất nhiều.