浏览全部文档 · 5/37

功能简介

这条最小路径用用户 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"}}'

权限模型

Session/JWT 代表用户,写入先检查 Table create 权限,读取和 Realtime 投递再按 Table/Row read 权限过滤。服务端 API Key 可使用 rows.write/rows.read,但不应放进浏览器。

常见错误

现象处理建议
401user_unauthorized确认请求使用了当前接口允许的 Session、JWT 或 API Key;不要把 Console Session 与 Project API Key 混用。
403general_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.php
  • backend-candidate:app/realtime.php
  • backend-candidate:src/Appwrite/Platform/Modules/Account/Services/Http.php
  • backend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Rows/Create.php
  • backend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Rows/XList.php
  • backend-candidate:tests/e2e/Services/Account/AccountCustomClientTest.php
  • backend-candidate:tests/e2e/Services/Databases/DatabasesBase.php
  • backend-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/realtimehttps://appwrite.io/docs/products/authhttps://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。

继续阅读