用途
convex-http 是 Convex 平台中用于编写 HTTP 动作(HTTP Actions)的技能,适用于在 Convex 项目中构建 Webhook 处理器和 API 端点。典型用途包括接收 Stripe、Clerk、GitHub 等第三方服务的 Webhook 回调、创建 REST API 端点,以及处理文件的上传与下载。
主要能力
该技能通过 httpRouter 和 httpAction 定义 HTTP 路由,支持按路径和 HTTP 方法(GET、POST、OPTIONS 等)注册处理器。资料中展示的能力包括:
- 基础路由:如
/health健康检查端点,返回 JSON 响应。 - Webhook 处理:读取请求头中的签名(如
stripe-signature),获取原始请求体,并调用内部 action 进行验证与处理。 - Webhook 签名验证:在
"use node"的 action 中使用 Stripe SDK 的constructEvent校验签名,并按事件类型分发到对应的 mutation。 - CORS 配置:定义
Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等响应头,并单独处理 OPTIONS 预检请求。 - 路径参数:使用
pathPrefix定义动态路由,从request.url中解析出参数(如用户 ID、文件 ID)。 - API Key 认证:从
X-API-Key请求头读取密钥,通过内部 query 校验有效性,并返回 401 或 403 状态。 - 文件上传:通过
request.bytes()读取字节流,构造 Blob 并调用ctx.storage.store存储,返回storageId。 - 文件下载:通过
ctx.storage.getUrl获取文件 URL,并使用Response.redirect重定向。 - 错误处理:提供
jsonResponse辅助函数统一返回 JSON 与状态码,并在处理器中捕获异常返回 500。
使用方式
在 convex/http.ts 中导入 httpRouter 与 httpAction,创建 router 实例,通过 http.route({ path, method, handler }) 注册路由,最后 export default http。处理器内可通过 ctx.runAction、ctx.runQuery、ctx.runMutation 调用内部函数,通过 ctx.storage 操作文件存储。涉及 Node 依赖(如 Stripe SDK)的 action 需在文件顶部添加 "use node"。
适用场景
适合需要在 Convex 后端对外暴露 HTTP 接口的项目,尤其是需要接收第三方 Webhook、提供受 API Key 保护的 REST 端点,或实现文件上传下载功能的场景。
限制
资料未提供该技能的安装命令、收费方式、平台支持范围或性能限制等信息,这些内容暂未提供。具体 API 行为请以 Convex 官方文档为准。
参考
HTTP Actions 官方文档:https://docs.convex.dev/functions/http-actions