如何将Supabase PostgreSQL默认/rpc/端点修改为自定义端点?
自定义Supabase RPC端点的实现方案
问题背景
当前使用Supabase搭配PostgreSQL数据库,希望修改RPC默认的/rpc/端点路径,创建贴合应用需求的自定义端点,且不使用Supabase.js客户端,直接通过HTTP请求调用。已定义如下PostgreSQL函数:
-- 函数定义 CREATE OR REPLACE FUNCTION get_content(param_episodeid integer) RETURNS JSON AS $$ DECLARE result JSON; BEGIN -- 使用COALESCE处理无匹配行的情况 SELECT COALESCE(json_agg(row_to_json(t)), '[]'::json) INTO result FROM ( SELECT id, title FROM episodes WHERE id = param_episodeid ) t; RETURN result; END; $$ LANGUAGE plpgsql immutable;
实现方法
Supabase本身不支持直接修改默认的/rpc/端点路径,但可以通过两种方式实现自定义端点的效果:
1. 使用Supabase边缘函数
创建边缘函数作为中间层,将自定义路径映射到RPC调用:
- 新建边缘函数,比如命名为
get-episode-content - 在函数内部,通过Supabase Admin SDK调用
get_content函数 - 部署后,即可通过
https://<你的项目ID>.functions.supabase.co/get-episode-content这个自定义路径发起请求 - 示例代码(TypeScript):
import { createClient } from '@supabase/supabase-js' export default async function handler(req: Request) { const supabase = createClient( process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_ROLE_KEY! ) const { episodeId } = await req.json() const { data, error } = await supabase.rpc('get_content', { param_episodeid: episodeId }) if (error) return new Response(JSON.stringify({ error: error.message }), { status: 500 }) return new Response(JSON.stringify(data), { status: 200 }) }
2. 反向代理自定义路径
如果不想用边缘函数,可以在自建后端服务中设置反向代理:
- 在后端路由中创建自定义路径,比如
/api/episode/content - 当该路径收到请求时,转发到Supabase的
/rpc/get_content端点,并处理参数和响应 - 示例(Node.js + Express):
const express = require('express') const axios = require('axios') const app = express() app.post('/api/episode/content', async (req, res) => { try { const { episodeId } = req.body const response = await axios.post( 'https://<你的项目ID>.supabase.co/rest/v1/rpc/get_content', { param_episodeid: episodeId }, { headers: { 'apikey': '<你的API密钥>', 'Authorization': 'Bearer <你的API密钥>', 'Content-Type': 'application/json' } } ) res.json(response.data) } catch (error) { res.status(error.response?.status || 500).json({ error: error.message }) } }) app.listen(3000, () => console.log('Server running on port 3000'))
注意事项
- 无论哪种方式,都要确保请求携带正确的Supabase API密钥和Authorization头,权限配置需符合业务需求
- 边缘函数部署在Supabase边缘节点,延迟更低,适合无自建后端的场景
- 反向代理方式需要维护自建后端服务,但灵活性更高,可添加额外业务逻辑处理
内容的提问来源于stack exchange,提问作者Behnam
相关产品推荐
相关产品推荐

