公开文档

星空云开发 Serverless 文档

平台定义 · 组件说明 · 客户端连接 · SDK 使用教程

1平台定义

星空云开发 是一个 Serverless 云开发平台(BaaS,后端即服务)。它把传统后端所需的服务器、数据库、接口、认证等基础设施全部托管到云端,开发者不需要购买服务器、不需要配置环境,创建项目即可获得一套完整可用的后端能力。

核心特点
· 免服务器:项目运行在云端托管集群,自动扩容、自动运维
· 免配置:创建项目即得数据库与 API,开箱即用
· 多端接入:网页、安卓、小程序统一通过 HTTPS API 连接
· 按需付费:免费项目试用,Plus 会员解锁更多项目与配额

2平台组件

每个项目内置以下组件,全部通过统一网关(Gateway)对外提供。

云数据库

PostgreSQL 数据库,自动生成 REST API,支持行级权限控制(RLS)与向量检索。

云函数

在线编写并部署服务端函数,HTTP 直接调用,无需管理运行环境。

云存储

文件上传、下载、签名直传,静态资源统一托管。

用户认证

邮箱验证码注册登录,JWT 会话管理,一套认证全端通用。

实时消息

WebSocket 实时通道,消息推送、在线状态、实时数据同步。

API 网关

统一 HTTPS 网关入口,所有组件走同一地址与认证体系。

3连接客户端

3.1 你需要的信息

1. 网关地址:在控制台「项目详情」里查看,形如 https://xktd.me/gw(统一入口)
2. 项目密钥(API Key):创建项目时生成的密钥,用于认证请求,形如 sb_sk_xxxxxxxx
3. 项目 ID:项目唯一标识,用于区分不同项目的数据

3.2 认证方式

所有 API 请求都需要在请求头带上密钥:

Authorization: Bearer <你的API Key>
Content-Type: application/json
apikey: <你的API Key>

3.3 数据库 REST 接口

数据库表通过 REST API 读写(风格与 Supabase 兼容):

# 查询表数据
GET {网关地址}/rest/v1/表名?select=*

# 插入数据
POST {网关地址}/rest/v1/表名
# 请求体:{"字段": "值"}

# 更新数据
PATCH {网关地址}/rest/v1/表名?字段=eq.值

# 删除数据
DELETE {网关地址}/rest/v1/表名?字段=eq.值

3.4 云函数调用

POST {网关地址}/functions/函数名
# 请求体:函数入参 JSON

3.5 认证接口

# 注册 / 登录由平台统一处理,客户端调用:
POST {网关地址}/auth/v1/signup # 邮箱+验证码注册
POST {网关地址}/auth/v1/login # 登录获取 JWT

4SDK 使用教程与代码示例

平台提供 JavaScript SDK、微信小程序 SDK 与 安卓 SDK(Java / Kotlin)。SDK 已内置你的项目地址与密钥,下载后只需一行初始化即可使用,不需要写任何连接代码。下载入口:控制台 → 项目详情 → SDK 接入。

4.1 引入 SDK

网页 JS SDK(三种方式任选)
① script 直链引用:把控制台 SDK 接入页里的引用地址(形如 https://xktd.me/api/sdk/js/<你的密钥>)放进 <script src="…"></script>,即可全局使用 window.Xingkong;
② 下载文件引入:下载 xingkong-sdk.js 放入项目,<script src="xingkong-sdk.js"></script> 引入;
③ 模块化项目(Vite / webpack 等构建工具):下载 xingkong-sdk.js 放到 src/utils/ 下,用 import Xingkong from './utils/xingkong-sdk.js'(或 require)引入,后续代码与下方示例完全一致。
微信小程序 SDK:下载 xingkong-sdk-wx.js 放入 utils/ 目录,const xk = require('../../utils/xingkong-sdk-wx.js') 引入(完整教程见 4.5)
安卓 SDK:① 下载 JAR 放入 app/libs/ 目录;② build.gradle 添加依赖:implementation files('libs/xingkong-sdk.jar')

4.2 JavaScript SDK

// 引入:script 直链 / 文件引入用 window.Xingkong;模块化项目用 import(方式见 4.1)
// import Xingkong from './utils/xingkong-sdk.js';
const xk = window.Xingkong;

// ① 数据库读写(REST 风格,兼容 Supabase 写法)
// 查询(支持 eq / select / order / limit 链式组合)
const todos = await xk.db.from("todos")
  .eq("done", false)
  .select("*")
  .order("created_at", true)
  .limit(20)
  .get();
// 新增
await xk.db.from("todos").insert({ title: "学习星空云开发", done: false });
// 更新 / 删除(eq 过滤条件后 update / remove)
await xk.db.from("todos").eq("id", "1").update({ done: true });
await xk.db.from("todos").eq("id", "1").remove();

// ② 用户认证
await xk.auth().register("user@example.com", "123456", { nickname: "星空" });
await xk.auth().login("user@example.com", "123456");
const me = await xk.auth().me();   // 当前登录用户
xk.logout();

// ③ 验证码(发送 / 校验)
await xk.otp().send("user@example.com", { scene: "register" });
await xk.otp().verify("user@example.com", "123456");

// ④ 云函数
const result = await xk.functions().invoke("hello", { name: "星空" });

// ⑤ 云存储(上传 / 列表 / 下载 / 删除)
await xk.storage().upload("img/logo.png", fileInput.files[0]);
const list = await xk.storage().list("img");
const bytes = await xk.storage().download("img/logo.png");  // ArrayBuffer
await xk.storage().remove("img/logo.png");
// 拼接下载直链:xk.storage().url("img/logo.png")

// ⑥ 实时推送
const ws = xk.realtime().connect("channel_1", msg => console.log("收到消息", msg));

// 其他:更换连接地址(如配了反代)
xk.setBaseUrl("https://你的中转地址");

4.3 安卓 SDK(Java)

一行初始化(地址与密钥已内置),其余全部是异步回调:

// 初始化(已内置项目地址与密钥)
XingkongClient xk = XingkongClient.init(this);

// ① 数据库读写(异步回调)
xk.db.from("todos").eq("done", "false").select("*").order("created_at", true).limit(20)
  .get((res, err) -> {
    if (err != null) { Log.e("SDK", err.getMessage()); return; }
    List<Map<String, Object>> rows = (List<Map<String, Object>>) res;
  });
// 新增 / 更新 / 删除
xk.db.from("todos").insert(row, (res, err) -> { });
xk.db.from("todos").eq("id", "1").update(row, (res, err) -> { });
xk.db.from("todos").eq("id", "1").delete((res, err) -> { });

// ② 用户认证
xk.auth().register("user@example.com", "123456", null, (res, err) -> { });
xk.auth().login("user@example.com", "123456", (res, err) -> { });
xk.auth().me(xk.getRestToken(), (res, err) -> { });
xk.logout();

// ③ 验证码
xk.otp().send("user@example.com", null, (res, err) -> { });
xk.otp().verify("user@example.com", "123456", (res, err) -> { });

// ④ 云函数
xk.invokeFunction("hello", java.util.Collections.singletonMap("name", "星空"), (res, err) -> { });

// ⑤ 云存储
xk.storage().upload("img/logo.png", "logo.png", bytes, (res, err) -> { });
xk.storage().list("img", (res, err) -> { });
xk.storage().download("img/logo.png", (res, err) -> { });  // res 为 byte[]
xk.storage().delete("img/logo.png", (res, err) -> { });

4.4 Kotlin(安卓)

// 用法与 Java 一致,一行初始化
val xk = XingkongClient.init(this)

xk.db.from("todos").eq("done", "false").select("*").get { res, err -> /* 处理结果 */ }
xk.invokeFunction("hello", mapOf("name" to "星空")) { res, err -> }
xk.otp().send("user@example.com", null) { res, err -> }

4.5 微信小程序 SDK

下载小程序 SDK(控制台 → 项目详情 → SDK 接入),放入小程序项目 utils/ 目录,require 引入即可使用(地址与密钥已内置,无需任何连接配置):

// 引入(utils/xingkong-sdk-wx.js 为下载的小程序 SDK)
const xk = require('../../utils/xingkong-sdk-wx.js');

// 用法与网页 JS SDK 完全一致,全部为 Promise
// ① 数据库
const todos = await xk.db.from("todos").eq("done", false).select("*").limit(20).get();
await xk.db.from("todos").insert({ title: "小程序测试" });

// ② 用户认证 / 验证码
await xk.auth().register("user@example.com", "123456", { nickname: "星空" });
await xk.auth().login("user@example.com", "123456");
await xk.otp().send("user@example.com");

// ③ 云函数
const result = await xk.functions().invoke("hello", { name: "星空" });

// ④ 云存储(上传传本地临时文件路径,下载返回临时路径)
const res = await wx.chooseImage({ count: 1 });   // 选择图片
await xk.storage().upload("img/logo.png", res.tempFilePaths[0]);
const tmp = await xk.storage().download("img/logo.png");   // 临时文件路径,可 wx.saveFile 保存
const list = await xk.storage().list("img");
await xk.storage().remove("img/logo.png");
小程序注意事项:① 需在微信小程序后台「开发管理 → 服务器域名」配置合法域名 https://xktd.me(request / uploadFile / downloadFile 三类都要配置;实时推送配 socket 合法域名 wss://xktd.me);② 平台域名已备案且为 HTTPS,满足正式版要求;③ 开发调试阶段可勾选「不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书」。

4.6 密钥安全(重要)

网页 JS / 小程序 SDK 是内置密钥的(方便你零配置起步),意味着任何打开开发者工具的人都能看到你的项目密钥,获得该项目的完整读写权限。因此:
① 仅用于开发调试、内部工具、原型演示等场景;
② 正式上线对公产品时,不要把含密钥的前端 SDK 直接打进生产包——业务逻辑应放进云函数(后台校验),前端只调用你定义的受限接口(如 xk.functions().invoke("下单", {...})),密钥只放在服务端,用户永远接触不到;
③ 安卓 SDK 的 JAR 内含密钥,同样不要随安装包对外分发,除非你能接受密钥公开;
④ 一旦发现密钥泄露,请在控制台删除重建项目(密钥随之更换)。
提示:所有接口的配额独立计算(数据库读写 / 用户读写 / 验证码读写 / 云存储读写 / 云函数调用),明细见「额度配额」。SDK 会自动检查更新,无需手动升级;密钥仅项目创建者可见,请妥善保管。

5配额与用量说明

完整配额明细(免费账号 / 会员 Plus / 各项目额度)、用量计算方式与重置规则,已统一收录在专属文档「额度配额」中。

核心要点:各配额分开独立计算;每个项目的额度完全隔离、互不干扰;用量每月 1 日自动重置。