Supabase 入门指南:快速了解这个开源后端平台 – wiki基地


Supabase 入门指南:快速了解这个开源后端平台

在现代 Web 和移动应用开发中,后端是不可或缺的一部分。构建一个强大的后端通常涉及数据库管理、用户认证、文件存储、实时数据处理以及构建 API 等多个复杂环节。这些任务不仅耗时,还需要专业的知识和大量的维护工作。

对于许多开发者,尤其是前端开发者或者独立开发者来说,从零开始搭建和维护一个完整的后端是一个巨大的挑战。正是在这样的背景下,后端即服务(Backend-as-a-Service,简称 BaaS)平台应运而生。它们提供了一系列预构建、可扩展的后端服务,让开发者可以专注于构建用户界面和核心业务逻辑,而将繁琐的后端基础设施工作交给平台。

Firebase 是 BaaS 领域的佼佼者,尤其在实时数据库和易用性方面备受赞誉。然而,作为 Google 的闭源产品,Firebase 也有其局限性,比如数据存储基于 NoSQL,对于习惯关系型数据库(如 PostgreSQL)的开发者来说可能需要适应;同时,其定价模式在某些情况下可能不够透明或灵活;更重要的是,闭源意味着开发者无法深入了解其底层实现,也无法在自己的基础设施上部署。

正是在对开源、关系型数据库以及更灵活控制的需求下,Supabase 应运而生。Supabase 自称为 “开源的 Firebase 替代品”,但它远不止是一个简单的复制品。它以强大的 PostgreSQL 数据库为核心,提供了一整套集成的后端服务,并且所有核心组件都是开源的。这使得 Supabase 在提供媲美 BaaS 的开发便利性的同时,也带来了开源技术的优势。

本篇文章将带你深入了解 Supabase 的世界,从其核心理念到主要功能,再到如何快速上手创建你的第一个项目。无论你是经验丰富的老兵,还是刚刚接触后端开发的新手,这篇指南都将为你打开 Supabase 的大门。

第一部分:认识 Supabase – 它是什么?

Supabase 是一个基于开源技术构建的 BaaS 平台。它的核心思想是利用和增强现有的、成熟的开源工具,将它们整合成一个提供统一 API 和管理界面的服务。

Supabase 的核心是:

  1. 强大的 PostgreSQL 数据库: Supabase 并没有发明一个新的数据库,而是选择了世界上最先进的开源关系型数据库 PostgreSQL。这意味着你可以享受到 PostgreSQL 的所有强大功能、稳定性和生态系统优势,包括事务支持、复杂查询、存储过程、触发器、以及成熟的工具链。
  2. 自动生成的 API: 基于你的 PostgreSQL 数据库 schema,Supabase 可以自动生成 RESTful API 和 GraphQL API(正在积极开发中)。你无需手动编写大量的 API 代码来执行基本的 CRUD(创建、读取、更新、删除)操作。
  3. 开箱即用的后端服务: 除了数据库和 API,Supabase 还集成了用户认证(Authentication)、文件存储(Storage)、实时订阅(Realtime)和边缘函数(Edge Functions)等核心后端功能。

通过这种方式,Supabase 极大地简化了后端开发的流程。你可以通过一个直观的 Web 界面管理你的数据库、配置认证规则、上传文件等,并通过各种客户端库(JavaScript, Python, Go, C#, Swift, Kotlin 等)轻松地与这些后端服务进行交互。

Supabase 的目标是: 提供一个能够快速构建和扩展应用的后端基础设施,让开发者能够更多地投入到应用的创新和用户体验上。它尤其适合需要关系型数据模型、看重开源、以及希望保留一定底层控制能力的开发者。

第二部分:Supabase 的核心功能概览

Supabase 提供了一系列紧密集成的服务,共同构成了其强大的 BaaS 能力。让我们逐一了解这些核心组件:

1. Database (数据库)

正如前面提到的,PostgreSQL 是 Supabase 的基石。选择 PostgreSQL 的原因在于其成熟、可靠、功能丰富以及强大的社区支持。

  • 完全托管的 PostgreSQL: Supabase 为你提供了托管的 PostgreSQL 实例,你无需关心数据库的安装、配置、备份、扩展等繁琐工作。
  • 直观的表格编辑器: Supabase 提供了一个类似于电子表格的界面,让你无需编写 SQL 语句即可创建、编辑表格,定义列、数据类型、主键、外键、索引等。这对于数据库新手来说尤为友好。
  • SQL 编辑器: 对于熟悉 SQL 的开发者,Supabase 也提供了功能齐全的 SQL 编辑器,你可以直接运行任意 SQL 命令,执行复杂查询、管理用户、创建视图、函数、触发器等。
  • Row Level Security (RLS – 行级安全): 这是 PostgreSQL 的一个强大功能,Supabase 将其作为核心的安全机制。通过定义 RLS 策略,你可以精确控制哪些用户(或角色)可以访问哪些行数据,以及他们能执行什么操作(SELECT, INSERT, UPDATE, DELETE)。RLS 是构建安全应用的基石,尤其在使用自动生成的 API 时。注意:RLS 默认是关闭的,在暴露公共 API 之前,务必为你的敏感表启用并配置 RLS 策略。
  • 数据库扩展: Supabase 支持许多流行的 PostgreSQL 扩展,例如 PostGIS(地理信息系统)、pg-cron(定时任务)、uuid-ossp(生成 UUID)等,进一步增强了数据库的能力。
  • 实时订阅 (Realtime Integration): 数据库的变化(INSERT, UPDATE, DELETE)可以实时地通过 Realtime 服务广播出去,后面会详细介绍。

2. Auth (用户认证)

用户认证是几乎所有应用都需要的功能。Supabase Auth 基于 GoTrue 开源项目,提供了一套安全、灵活的认证解决方案。

  • 多种认证方式: 支持常见的认证方式,包括:
    • 邮箱/密码
    • 魔术链接(Magic Link – 通过邮件发送登录链接,无需密码)
    • 第三方 OAuth 提供商:Google, GitHub, Facebook, Twitter, Discord, Azure, Slack, Spotify 等数十种。
    • 手机号/OTP (短信验证码)
  • 用户管理: 提供用户注册、登录、登出、密码重置、邮箱验证等功能。
  • JWT (JSON Web Tokens): 认证成功后,Supabase 会颁发 JWT。客户端在后续请求中携带此 JWT,后端(包括自动生成的 API 和 RLS)可以验证用户身份并获取用户的元数据(如用户 ID)。
  • 与数据库集成: Supabase Auth 与数据库深度集成。认证用户的 uuid 可以作为外键存储在你的业务表中,结合 RLS 策略,可以轻松实现“用户只能看到自己的数据”这样的需求。
  • 自定义用户元数据: 你可以在用户对象中存储自定义信息。

3. Storage (文件存储)

Supabase Storage 基于 S3 兼容的 API 构建,用于存储和管理文件,如图片、视频、文档等。

  • 桶 (Buckets): 文件被组织在不同的桶中,类似于文件夹。你可以为不同的文件类型或用途创建不同的桶。
  • 文件上传与下载: 提供简单的 API 进行文件的上传、下载和删除。
  • 公共与私有文件: 可以设置桶或文件的访问权限。公共文件可以直接通过 URL 访问,私有文件则需要通过带签名的 URL 或经过认证才能访问。
  • 与 RLS 集成: 你可以通过 Storage API 策略(Policy)结合用户认证,精细控制哪个用户可以访问哪个文件。例如,“用户只能删除自己上传的图片”。
  • 图像转换 (Image Transformation): 支持基本的图像转换功能,如调整大小。

4. Realtime (实时订阅)

Supabase Realtime 基于 Elixir 语言构建,利用了其在构建高并发、分布式系统方面的优势。它使得客户端能够实时监听数据库的变化或接收广播消息。

  • 数据库变更订阅: 客户端可以订阅特定表、甚至特定行的插入、更新、删除事件。当数据库发生相应变化时,Supabase Realtime 会立即将数据推送给所有订阅的客户端。这非常适合构建聊天应用、实时协作工具、仪表板等需要即时数据同步的应用。
  • 广播 (Broadcasting): 除了数据库变更,Realtime 服务也支持自定义广播消息。客户端可以加入特定的频道并发送/接收任意 JSON 消息,实现更灵活的实时通信。
  • 安全: Realtime 订阅也与 Supabase Auth 和 RLS 集成。客户端只能订阅他们通过 RLS 策略允许访问的数据。

5. Edge Functions (边缘函数)

Supabase Edge Functions 基于 Deno(一个安全的 JavaScript/TypeScript 运行时)构建,让你可以在靠近用户的地方运行无服务器函数。

  • 使用 TypeScript/JavaScript: 利用熟悉的语言编写后端逻辑。
  • 全球部署: 函数部署在全球多个地点,降低延迟。
  • 用途: 处理 Webhooks、与第三方服务集成、执行自定义业务逻辑、验证数据等不适合直接在数据库中处理的任务。
  • 通过 CLI 管理: Edge Functions 通常通过 Supabase CLI 在本地开发、测试和部署。
  • 与 Auth/Database 集成: 函数内部可以方便地通过 Supabase 客户端库访问数据库和用户信息。

6. 其他特性

  • Supabase Studio (Dashboard): 提供一个漂亮的 Web 界面,用于管理你的项目,包括表格编辑器、认证用户列表、存储桶管理、SQL 编辑器、API 文档查看等。这是入门和日常管理的主要工具。
  • 自动生成 API 文档: 基于你的数据库 schema,Supabase 会自动生成 Swagger/OpenAPI 格式的 API 文档,方便开发者查阅如何调用生成的 REST API。
  • Supabase CLI: 命令行工具,用于本地开发、管理数据库迁移、部署 Edge Functions、生成类型定义等。对于更高级或自动化的工作流程非常重要。
  • 客户端库: 提供多种语言和框架的客户端库(JavaScript/TypeScript 是最主要的),简化了与 Supabase 服务的交互。
  • 开源: 所有核心组件(PostgREST, GoTrue, Storage, Realtime, Deno Edge Functions)都是开源的,你可以查看源代码,甚至在自己的服务器上部署 Supabase(自托管)。

第三部分:为什么选择 Supabase?

了解了 Supabase 的功能,现在我们来看看它有哪些吸引人的优势:

  • 基于 PostgreSQL 的强大和灵活性: 如果你熟悉或偏爱关系型数据库,PostgreSQL 是一个极好的选择。它支持复杂的数据模型、事务、ACID 合规性,并且拥有庞大的生态系统。Supabase 充分利用了 PostgreSQL 的能力,而不是限制它。
  • 极致的开发者体验 (Developer Experience, DX):
    • 快速启动: 创建项目、设置数据库、获取 API 密钥都非常迅速。
    • 自动生成 API: 极大地减少了编写样板 API 代码的工作量。你只需定义好数据库 schema,就可以立即通过 API 进行 CRUD 操作。
    • 直观的 Dashboard: 提供了友好的 UI 来管理各种服务。
    • 优秀的客户端库: 使得从前端或移动应用中调用后端服务变得简单。
    • 详细的文档: Supabase 拥有非常全面和清晰的官方文档,涵盖了各个方面。
  • 强大的开源生态系统: Supabase 构建在 PostgREST, GoTrue, Storage API, Realtime, Deno 等成熟的开源项目之上。这意味着:
    • 透明度: 你可以了解底层的工作原理。
    • 可控性: 如果需要,你可以在自己的基础设施上托管 Supabase。
    • 社区支持: 除了 Supabase 社区,你还能受益于各个底层开源项目的社区。
    • 无厂商锁定: 你的数据在标准的 PostgreSQL 数据库中,你可以随时导出并在其他地方使用。
  • 强大的安全模型 (RLS): 将安全逻辑直接内置在数据库层面(通过 RLS)是一种强大而一致的方式,确保数据访问权限得到严格控制,无论数据是通过自动 API、SQL 还是 Edge Function 访问。
  • 实时能力: 内置的 Realtime 服务使得构建实时应用变得非常简单。
  • 成本效益: Supabase 提供慷慨的免费套餐,对于许多小型项目、原型或学习来说是足够的。随着项目规模的增长,付费计划也相对透明和灵活。
  • 持续快速发展: Supabase 团队和社区正在快速迭代和增加新功能。

Supabase vs. Firebase (简而言之):

  • 数据库核心: Supabase (PostgreSQL – 关系型) vs. Firebase (Firestore/Realtime DB – NoSQL 文档/实时树)。选择取决于你的数据结构偏好和查询需求。
  • API 范式: Supabase (基于数据库 schema 生成的 REST/GraphQL) vs. Firebase (SDK 直接操作数据库,REST/GraphQL 需云函数辅助)。
  • 开源 vs. 闭源: Supabase (核心开源,可自托管) vs. Firebase (完全闭源,托管在 Google Cloud)。
  • 安全: Supabase (RLS 在数据库层面) vs. Firebase (Security Rules 在数据库层面)。概念类似但实现方式不同。
  • 函数: Supabase (Edge Functions – Deno) vs. Firebase (Cloud Functions – Node.js/Python等)。

选择哪个平台取决于你的具体需求、团队对技术栈的熟悉程度以及对开源和数据控制的需求。但毫无疑问,Supabase 是一个强大且日益流行的选择,尤其适合那些喜欢 PostgreSQL 和开放生态的开发者。

第四部分:Supabase 入门:快速上手

现在,让我们通过实际操作来体验一下 Supabase。

步骤 1:注册并创建 Supabase 账号

  1. 打开 Supabase 官网:https://supabase.com/
  2. 点击页面右上角的 “Start your project” 或 “Sign In”。
  3. 你可以选择使用 GitHub 账号快速登录,或者使用邮箱注册。使用 GitHub 登录通常更方便。
  4. 按照提示完成注册流程。

步骤 2:创建新项目

  1. 登录成功后,你将进入 Supabase 的项目仪表盘。
  2. 点击 “+ New project” 按钮。
  3. 你需要填写一些项目信息:
    • Organization: 选择或创建一个组织(用于分组项目,个人用户通常默认有一个组织)。
    • Name: 给你的项目起一个名字(例如:my-todo-applearning-supabase)。
    • Database Password: 设置一个强大的数据库密码。务必记住或妥善保存这个密码! 这个密码用于直接访问你的 PostgreSQL 数据库(例如通过 psql 客户端),拥有高级权限。
    • Region: 选择一个离你的用户群体或你所在位置较近的区域。这会影响应用的延迟。
    • Pricing Plan: 对于入门学习,选择 Free 计划即可。
  4. 点击 “Create new project”。
  5. Supabase 会开始配置你的项目,这包括设置 PostgreSQL 数据库、Auth、Storage 等服务。这个过程可能需要几分钟。

步骤 3:探索 Supabase Dashboard

项目创建成功后,你将被重定向到新项目的 Dashboard 页面。这是一个功能丰富的管理界面。让我们熟悉一下左侧的导航栏:

  • Table Editor: 在这里,你可以可视化地创建、编辑和管理你的数据库表格。你可以像操作电子表格一样添加列、定义数据类型、设置主键外键等。
  • Auth: 管理你的认证设置、查看已注册用户、配置第三方登录提供商、管理用户元数据等。
  • Storage: 管理你的文件存储桶,上传、下载、查看文件,配置存储策略。
  • Realtime: 查看 Realtime 服务的使用情况,管理广播频道(虽然大部分配置在代码中完成)。
  • Edge Functions: 查看和管理你的无服务器函数。部署和调试通常通过 CLI 进行。
  • SQL Editor: 直接在这里运行 SQL 命令来查询、修改数据或管理数据库结构。Supabase 提供了一些常用的启动模板 SQL 查询。
  • API Docs: 自动生成的 API 文档,详细列出了如何通过 REST API 与你的数据库进行交互。这是了解自动生成 API 的重要资源。
  • Logs: 查看项目的各种日志,有助于调试问题。
  • Settings: 项目的各种设置,包括 API 密钥、数据库设置、认证设置、计费信息等。

步骤 4:获取你的 API 密钥

在开始从客户端代码与 Supabase 交互之前,你需要获取项目的 API 密钥。

  1. 在左侧导航栏点击 “Settings”。
  2. 选择 “API”。
  3. 你会看到两个主要的 API 密钥:
    • Project URL: 这是你的 Supabase 项目的入口 URL。你的客户端库将使用这个 URL 来连接到 Supabase 服务。
    • anon (public) key: 这是一个匿名公开密钥。它用于需要匿名访问 Supabase 服务的情况,或者用于需要 RLS 策略来控制访问的情况。这个密钥可以在客户端代码中安全地使用。
    • service_role (secret) key: 这是一个具有更高权限的密钥,可以绕过 RLS 策略,直接对数据库进行操作。这个密钥非常敏感,绝不能暴露在客户端代码中! 它应该只在安全的后端环境(如你的 Edge Functions、服务器端代码或通过 Supabase CLI)中使用。

复制你的 Project URL 和 anon key,你将在接下来的客户端代码中使用它们。

步骤 5:创建一个简单的数据库表

让我们在 Table Editor 中创建一个简单的 todos 表来存储待办事项。

  1. 点击左侧导航栏的 “Table Editor”。
  2. 点击 “+ New table”。
  3. 填写表格信息:
    • Name: todos
    • Description: (可选) Table to store todo items
    • Enable Row Level Security (RLS): 暂时不勾选(为了演示简单插入,但请记住,在生产环境中,务必启用并配置 RLS 来保护你的数据!)
  4. 点击 “Columns” 下的 “+ Add column”。
    • Name: id, Type: uuid, Default Value: gen_random_uuid(), Is Primary Key: 勾选,Is Unique: 勾选。 (这将自动生成一个唯一的 ID 作为主键)
    • 点击 “+ Add column”。
    • Name: created_at, Type: timestamptz, Default Value: now(), Is Nullable: 不勾选。 (记录创建时间)
    • 点击 “+ Add column”。
    • Name: task, Type: text, Is Nullable: 不勾选。 (待办事项内容)
    • 点击 “+ Add column”。
    • Name: is_complete, Type: boolean, Default Value: false, Is Nullable: 不勾选。 (事项是否完成)
    • 点击 “+ Add column”。
    • Name: user_id, Type: uuid, References: 选择你的 Auth 模式下的 users 表的 id 列。Is Nullable: 不勾选。 (这将把待办事项关联到创建它的用户。这对于后续启用 RLS 实现“用户只能看到自己的待办事项”至关重要。 )
  5. 检查你的表格结构,确保看起来正确。
  6. 点击 “Save” 创建表格。

步骤 6:使用 SQL Editor 插入一些数据 (可选)

虽然我们可以通过 API 插入数据,但先在 SQL Editor 中手动插入一些数据可以帮助我们快速验证表格结构。

  1. 点击左侧导航栏的 “SQL Editor”。
  2. 点击 “+ New query” 或选择一个模板(例如 “Insert row”)。
  3. 输入 SQL 语句来插入数据。由于我们还没有设置 Auth 并关联用户,暂时先插入一个没有 user_id 的数据(或者使用一个硬编码的 UUID,但请注意这仅用于测试)。

    sql
    -- 注意:在实际应用中,user_id 应该来自当前认证的用户
    -- 为了快速测试,我们先忽略 user_id 或使用一个示例 UUID
    INSERT INTO public.todos (task, is_complete)
    VALUES ('学习 Supabase', false);

    4. 点击 “Run” 按钮执行查询。
    5. 回到 “Table Editor”,选择 todos 表,你应该能看到刚刚插入的数据。

步骤 7:使用 Supabase JavaScript 客户端与服务交互 (代码示例 – 概念性)

Supabase 提供了易于使用的客户端库。这里以 JavaScript/TypeScript 客户端为例,展示如何从前端应用中与 Supabase 交互。

首先,你需要在你的项目中安装 Supabase 客户端库:

“`bash
npm install @supabase/supabase-js

or

yarn add @supabase/supabase-js
“`

然后,在你的前端代码中初始化客户端:

“`javascript
import { createClient } from ‘@supabase/supabase-js’

const supabaseUrl = ‘YOUR_SUPABASE_PROJECT_URL’ // 替换为你的 Project URL
const supabaseKey = ‘YOUR_ANON_PUBLIC_KEY’ // 替换为你的 anon key
const supabase = createClient(supabaseUrl, supabaseKey)
“`

现在,你可以使用 supabase 客户端对象来与不同的 Supabase 服务交互。

示例:插入一个待办事项 (假设用户已登录)

“`javascript
async function addTodo(taskContent) {
const user = supabase.auth.user() // 获取当前登录用户
if (!user) {
alert(‘请先登录!’)
return
}

const { data, error } = await supabase
.from(‘todos’) // 选择 ‘todos’ 表
.insert([
{ task: taskContent, user_id: user.id } // 插入数据,关联当前用户 ID
])

if (error) {
console.error(‘插入待办事项失败:’, error.message)
} else {
console.log(‘待办事项插入成功:’, data)
}
}

// 调用函数插入一个待办事项
// addTodo(‘构建 Supabase 应用’);
“`

示例:查询所有当前用户的待办事项 (需要配置 RLS)

首先,在 Supabase Dashboard 的 Table Editor 中为 todos 表启用 RLS,并添加一个策略允许认证用户查询 user_id 是他们自己的行:

  1. 回到 Table Editor,选择 todos 表。
  2. 点击表格名称旁边的 “Row Level Security (RLS)” 图标(像一个盾牌)。
  3. 点击 “Enable RLS”。
  4. 点击 “+ New policy”。
  5. 选择 “From scratch”。
  6. 填写策略信息:
    • Name: Allow authenticated users to view their own todos
    • For: SELECT operation
    • Using expression: auth.uid() = user_id (这个表达式是核心:只有当当前认证用户的 ID (auth.uid()) 等于行的 user_id 时,才允许 SELECT)
  7. 点击 “Review” -> “Save policy”。

现在,回到你的客户端代码:

“`javascript
async function fetchMyTodos() {
const user = supabase.auth.user()
if (!user) {
alert(‘请先登录!’)
return []
}

// RLS 策略会自动过滤,只返回 user_id 与当前用户 ID 匹配的行
const { data, error } = await supabase
.from(‘todos’)
.select(‘*’) // 选择所有列
.order(‘created_at’, { ascending: false }) // 按创建时间倒序排列

if (error) {
console.error(‘获取待办事项失败:’, error.message)
return []
} else {
console.log(‘获取待办事项成功:’, data)
return data
}
}

// 调用函数获取待办事项
// fetchMyTodos().then(todos => console.log(‘我的待办事项:’, todos));
“`

示例:实时监听待办事项变化 (需要配置 RLS 和 Realtime)

在 Supabase Dashboard 的 Realtime 设置中,确保 todos 表被启用。然后,在客户端代码中:

“`javascript
function subscribeToTodos() {
// RLS 策略同样适用于实时订阅
const subscription = supabase
.from(‘todos’)
.on(‘*’, payload => { // 监听所有事件 (INSERT, UPDATE, DELETE)
console.log(‘实时待办事项变化:’, payload)
// 根据 payload.eventType 和 payload.new/payload.old 更新 UI
})
.subscribe() // 启动订阅

// 返回 subscription 对象,以便后续可以取消订阅
return subscription
}

// 启动订阅 (在组件挂载时调用)
// const todoSubscription = subscribeToTodos();

// 取消订阅 (在组件卸载时调用)
// todoSubscription.unsubscribe();
“`

这些示例展示了 Supabase 客户端库如何简化与数据库、认证和实时服务的交互。通过遵循 Supabase 文档和示例,你可以构建更复杂的应用功能。

第五部分:进阶话题和下一步

掌握了基础知识和入门步骤后,你可以进一步探索 Supabase 的更多高级功能和用法:

  • 深入学习 RLS: 理解并熟练运用 RLS 是构建安全应用的重中之重。学习如何编写更复杂的策略,利用自定义函数等。
  • 使用 Edge Functions: 学习如何编写和部署 Edge Functions 来处理自定义后端逻辑、集成第三方服务等。
  • 使用 Supabase CLI: 学习如何使用 CLI 在本地进行开发、管理数据库迁移、自动化工作流。
  • 数据库函数、触发器和存储过程: 利用 PostgreSQL 原生的高级功能来在数据库层面实现更复杂的业务逻辑。
  • 性能优化: 学习如何使用索引、优化查询来提升数据库性能。
  • 扩展和集成: 探索 Supabase 如何与其他服务和技术栈集成,如全文搜索、队列服务等。
  • 自托管: 如果你有特定的合规性或部署需求,可以探索在自己的基础设施上托管 Supabase。

第六部分:社区与资源

Supabase 拥有一个活跃的社区和丰富的学习资源:

充分利用这些资源,将帮助你更快地掌握 Supabase 并解决开发中遇到的问题。

结论

Supabase 为开发者提供了一个强大、灵活且易于使用的开源后端平台。它以成熟的 PostgreSQL 数据库为基础,集成了用户认证、文件存储、实时数据、边缘函数等核心后端服务,并通过自动生成的 API 和直观的 Dashboard 极大地提升了开发效率。

通过选择 Supabase,你无需从头搭建和管理复杂的后端基础设施,可以更加专注于构建你的核心应用功能。同时,其开源的特性、基于标准 SQL 和 PostgreSQL 的架构,为你提供了更高的透明度、控制力和无厂商锁定的自由。

无论你是想快速构建一个 MVP、开发一个全栈应用,还是寻求一个强大且可扩展的开源后端解决方案,Supabase 都值得你尝试。现在就开始你的 Supabase 之旅吧!创建你的第一个项目,体验快速开发带来的便利,并探索它为你的应用带来的无限可能。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部