功能简介
这条最小路径用用户 Session 建立身份,在已配置的 Table 中写入一条 Row,并订阅当前用户有权看到的数据事件。它同时验证 Project 配置、Web 平台 Origin、资源 Permission 和 WebSocket 建连。
当前支持范围
- 身份认证与账号(SUPPORTED):为应用提供注册、登录、会话、JWT、多因素认证、账号验证与用户管理;具体登录渠道由项目配置决定。
- 数据行(SUPPORTED):支持带资源权限的 Row 增删改查、批量操作、结构化查询与事务内写入。
- 实时订阅(SUPPORTED):通过 WebSocket 按频道订阅账号、数据、文件、函数等事件,并在发送前应用项目权限过滤。
适用场景
- 验证 Web SDK 初始化是否正确。
- 搭建带登录态的数据列表或协作页面。
- 确认 Realtime 不会越过 Row 读取权限。
前置条件
- Console 已创建 Web Platform 并允许当前 Origin。
- 已创建 Database、Table 与所需 Column。
- Table/Row Permission 允许当前用户 create/read。
Console 操作路径
Console → Project → Auth 创建或登录测试用户;Project → Databases → 选择 Database/Table 配置 Columns 与 Permissions。Realtime 没有独立数据编辑页,订阅由客户端 SDK 建立。
SDK 示例
SDK · TypeScript
import { Client } from 'appbase-web-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>');
import { Account, TablesDB, Realtime, ID, Channel } from 'appbase-web-sdk';
const account = new Account(client);
await account.createEmailPasswordSession({
email: '<USER_EMAIL>',
password: '<USER_PASSWORD>'
});
const tables = new TablesDB(client);
const realtime = new Realtime(client);
const subscription = await realtime.subscribe(
Channel.tablesdb('<DATABASE_ID>').table('<TABLE_ID>').row(),
event => console.log(event.events)
);
await tables.createRow({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
rowId: ID.unique(),
data: { title: 'first row' }
});
await subscription.close();REST 示例
REST · Bash
curl 'https://<APPBASE_HOST>/v1/tablesdb/<DATABASE_ID>/tables/<TABLE_ID>/rows' \
-X POST \
-H 'X-Appwrite-Project: <PROJECT_ID>' \
-H 'X-Appwrite-JWT: <USER_JWT>' \
-H 'Content-Type: application/json' \
--data '{"rowId":"unique()","data":{"title":"first row"}}'常见错误
| 现象 | 处理建议 |
|---|---|
401 或 user_unauthorized | 确认请求使用了当前接口允许的 Session、JWT 或 API Key;不要把 Console Session 与 Project API Key 混用。 |
403 或 general_access_forbidden | 检查 API Key Scope、组织角色以及资源级 Permission;认证成功不等于拥有目标操作权限。 |
404 | 核对资源 ID 与 Project;不可见资源可能与不存在资源使用相同响应,客户端不应据此探测资源。 |
429 | 按响应的限流语义退避,避免并发重试放大请求。 |
当前限制
- 客户端只能向已存在的 Table 写入符合 Column 定义的数据。
- Realtime 是 WebSocket API;GraphQL Subscription 不受支持。
- Channel 构造方法随 SDK 版本变化,安装时以目标包导出为准。
Appwrite 兼容说明
Auth、TablesDB 与 Realtime 保留常见 Appwrite 接入概念,但示例使用 AppBase 包名与实际导出。
AppBase 增强说明
AppBase 可在相同 Project 边界继续组合 Aggregation、Schema Version、Memory 或 Moderation。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:app/controllers/api/account.phpbackend-candidate:app/realtime.phpbackend-candidate:src/Appwrite/Platform/Modules/Account/Services/Http.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Rows/Create.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Rows/XList.phpbackend-candidate:tests/e2e/Services/Account/AccountCustomClientTest.phpbackend-candidate:tests/e2e/Services/Databases/DatabasesBase.phpbackend-candidate:tests/e2e/Services/Realtime/frontend-candidate:console/src/routes/(console)/project-[region]-[project]/auth/frontend-candidate:packages/sdks/client-web/src/services/realtime.ts
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/apis/realtime、https://appwrite.io/docs/products/auth、https://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。