Supabase:无需后端代码的 Web 开发完整解决方案

2025-10-11

在现代 Web 应用开发中,构建 MVP(最简可行产品)时,后端基础设施的搭建常常成为主要瓶颈。开发者需要处理数据库、API、用户认证、权限控制、文件存储等多个模块,开发成本较高。

Supabase 提供了一种替代方案:它以 PostgreSQL 为核心,通过一系列集成服务,将数据库、API、认证、实时通信等功能整合在一起,使开发者不用编写后端代码就能够快速构建完整的后端系统。

本文将系统性地介绍 Supabase 的核心机制与工作流程,帮助理解其如何实现“后端即服务(BaaS)”的开发模式。


一、Supabase 的本质:一个增强的 PostgreSQL 实例

Supabase 的底层是一个标准的 PostgreSQL 数据库。它并非使用私有或封闭的数据引擎,而是基于开源的 PostgreSQL 构建,并在此基础上提供了一系列附加服务。

这意味着:

  • 可以使用任何兼容 PostgreSQL 的客户端工具(如 DBeaver、TablePlus)直接连接。
  • 支持 PostgreSQL 的高级特性,如 JSONB、全文检索、GIS、触发器、函数、视图等。
  • 可通过 SQL 编辑器执行自定义查询或数据迁移。

在 Supabase 控制台上方的 Connect菜单中可以获取连接信息:
截屏2025-10-11 08.29.25

其中给出了各种方式连接数据库的方法,包括直接通过客户端工具连接,在前端框架中连接,在ORM工具中连接等等:
截屏2025-10-11 08.30.15

Supabase 拥有多种资费档位,其中免费计划包含 500MB 存储、5万月请求和 1GB 文件存储,已经足够个人项目使用
截屏2025-10-11 08.57.57


二、自动 API 生成:PostgREST 的作用

Supabase 的一个核心特性是: 在创建数据库表后,系统会自动生成对应的 RESTful API

这背后的关键技术是 PostgREST ,一个将 PostgreSQL 数据库直接映射为 REST API 的开源项目。

例如,创建一个待办事项表 todos

保存后,Supabase 会为该表暴露以下接口:

操作方法URL
查询所有待办GET/rest/v1/todos
新增待办POST/rest/v1/todos
更新指定待办PATCH/rest/v1/todos?id=eq.1
删除指定待办DELETE/rest/v1/todos?id=eq.1

同时查询支持多种操作符,如 eq, neq, gt, lt, like, in 等,而且可组合使用。例如:

/rest/v1/todos?status=eq.active&priority=gte.2

这些 API 无需手动编写,由 PostgREST 在运行时动态生成。

在控制台的API Docs页面

截屏2025-10-11 08.32.48

点击表名,就可以查看相关的API文档

三、官方SDK

Supabase 提供官方 的JavaScript SDK @supabase/supabase-js,用于简化与后端服务的交互。

import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://your-project.supabase.co',
  process.env.SUPABASE_ANON_KEY
)

// 查询待办事项
async function fetchTodos() {
  const { data, error } = await supabase
    .from('todos')
    .select('*')
    .order('created_at', { ascending: false })

  if (error) console.error(error)
  else return data
}

// 添加新任务
async function addTodo(title) {
  const { error } = await supabase
    .from('todos')
    .insert([{ title }])
  if (error) throw error
}

// 标记完成
async function markDone(id) {
  await supabase
    .from('todos')
    .update({ is_done: true })
    .eq('id', id)
}

通过该 SDK,前端可以直接与数据库交互,实现完整的 CRUD 操作,而无需额外编写后端服务。

除此之外,也有其他语言的SDK版本
截屏2025-10-11 09.05.13


四、身份认证系统

Supabase 内置了 Supabase Auth ,一个基于 JWT 的身份认证服务,支持多种登录方式:

  • 邮箱密码 / Magic Link
  • OAuth 第三方登录(Google、GitHub、Apple 等)
  • 自定义 JWT 登录(适用于 SSO 集成)

用户登录后,SDK 会自动管理 JWT,并在后续请求中携带该凭证。

const { data, error } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'password'
})

登录成功后,所有数据库操作都会携带用户身份信息。在数据库层面,可通过 auth.uid() 函数获取当前用户 ID,用于权限判断或数据绑定。


五、权限控制:行级安全(RLS)

Supabase 使用 PostgreSQL 的 Row Level Security(RLS) 实现细粒度的访问控制。

Authentication - Policies菜单中可以设置为指定的表开启RLS:

截屏2025-10-11 08.46.34

启用 RLS 后,数据库会默认拒绝所有操作,除非显式定义允许的策略。

这也是很多新手容易踩坑的地方,我明明已经按照文档说明设置了数据库连接,为什么查询不到数据?多半情况下就是因为开启了RLS

RLS 的优势在于:权限逻辑直接定义在数据库层,对所有访问路径(REST、Realtime、SQL 客户端)均生效,避免了在应用层重复实现权限校验。

针对用户身份认证和权限控制的具体实践,将在后面的文章中详细说明


六、实时数据同步

Supabase 提供 Realtime 服务,基于 WebSocket 实现数据库变更的实时推送。

开发者可以订阅特定表或查询的变更事件,支持的事件类型包括 INSERTUPDATEDELETETRUNCATE

Realtime 服务同样受 RLS 策略保护,只有被授权的数据变更才会推送给客户端。


七、文件存储

Supabase 提供对象存储服务(Storage),类似于 AWS S3,可用于存储图片、文档等文件。

存储权限也可通过 RLS 策略控制,例如限制用户只能上传到自己的目录。


八、扩展能力

Supabase支持安装PostgreSQL扩展来增强能力,在 Database - Extensions菜单中即可找到能安装的扩展列表

截屏2025-10-11 08.50.49

尤其需要提一下的是,Supabase 支持安装 PostgreSQL的vector 扩展,这使得 PostgreSQL 能够存储和查询向量数据,适用于 语义搜索、RAG(检索增强生成) 等现在流行的 AI 场景。


九、开源与自托管

Supabase 不仅是一个云服务,更是一个 完全开源的项目 。其所有核心组件(包括数据库接口、认证系统、实时引擎、存储服务等)均在 GitHub 上公开:https://github.com/supabase/supabase

这使得用户可以自行部署Supabase到自己的服务器上运行,同时可以进行定制化二次开发以更加配合业务场景。

结语

Supabase 是一个以 PostgreSQL 为核心,围绕开发者体验构建的集成化后端平台。它的核心理念在于: 将数据库作为应用开发的起点,通过自动化和标准化的方式,减少重复性的后端开发工作

围绕 PostgreSQL,Supabase 构建了一个统一的服务体系。开发者可以在一个平台上完成数据建模、接口暴露、权限配置、文件管理与 AI 集成,避免了在多个服务之间切换和集成的复杂性。

Supabase 大大减少了在底层基础设施和环境配置上需要投入的精力,尤其适合个人开发者或小型开发团队使用。


标题:Supabase:无需后端代码的 Web 开发完整解决方案
作者:aopstudio
地址:https://neusoftware.top/articles/2025/10/11/1760165983730.html