RaisFastRaisFast
JavaScript SDK

概述

官方 TypeScript SDK — 框架无关、零依赖、完整类型安全。

@raisfast/sdk 是一个零依赖的 TypeScript 客户端,用于访问 RaisFast API。支持 React、Vue、Svelte、Next.js、Nuxt、React Native 和原生 JS。

安装

pnpm add @raisfast/sdk
# 或
npm install @raisfast/sdk
# 或
bun add @raisfast/sdk

初始化

import { RaisFast } from "@raisfast/sdk";

const client = new RaisFast("http://localhost:9898/api/v1");

首次使用时调用 init() 自动检测 API 风格(RESTful vs Simple):

await client.init();

构造选项

const client = new RaisFast("http://localhost:9898/api/v1", {
  authStore: store,  // 自定义认证存储(默认 LocalAuthStore)
});

Auth Store

SDK 通过 IAuthStore 接口存储认证令牌。默认使用 localStorage

import { RaisFast, LocalAuthStore } from "@raisfast/sdk";

// 自定义存储键
const store = new LocalAuthStore("my_app_auth");

const client = new RaisFast("http://localhost:9898/api/v1", {
  authStore: store,
});

自定义 Store(SSR / React Native)

为非浏览器环境实现 BaseAuthStore

import { BaseAuthStore } from "@raisfast/sdk";

class CookieAuthStore extends BaseAuthStore {
  save(auth) {
    super.save(auth);
    document.cookie = `auth=${super.exportToStorage()}; path=/`;
  }
  clear() {
    super.clear();
    document.cookie = "auth=; path=/; max-age=0";
  }
}

监听认证状态变化

client.authStore.onChange((token, user) => {
  console.log("已认证:", !!token);
  console.log("用户:", user?.email);
});

RaisFast 类

const client = new RaisFast(baseUrl);

// 动态内容类型访问
client.collection<Portfolio>("portfolios");     // 公开 API
client.adminCollection<Portfolio>("portfolios"); // 管理 API

// 内置模块
client.auth          // 认证 & OAuth & SMS
client.users         // 用户资料
client.posts         // 博客文章
client.pages         // 静态页面
client.comments      // 评论
client.categories    // 分类
client.tags          // 标签
client.media         // 文件上传
client.products      // 商品
client.cart          // 购物车
client.orders        // 订单
client.payment       // 支付
client.wallets       // 钱包
client.events        // SSE 实时事件
client.health        // 健康检查

// 管理模块
client.admin         // 23 个管理子模块

// 单条记录内容类型
const settings = await client.single<SiteSettings>("site_settings");

// RSS 订阅 URL
client.getRssFeedURL();

请求钩子

Before Send

添加自定义请求头、日志或修改请求:

client.beforeSend = (url, options) => {
  options.headers = {
    ...options.headers,
    "X-Custom-Header": "value",
  };
  return { url, options };
};

After Send

转换响应或添加全局错误处理:

client.afterSend = (response, data) => {
  console.log(`${response.status} ${response.url}`);
  return data;
};

请求取消

// 按 key 取消特定请求
client.cancelRequest("search_query");

// 取消所有待处理请求
client.cancelAllRequests();

请求支持 requestKey 选项。相同 key 的新请求会自动取消上一个:

const result = await portfolios.getList(1, 20, {
  requestKey: "portfolio_list",
});

错误处理

import { SDKError } from "@raisfast/sdk";

try {
  await portfolios.getOne("invalid-id");
} catch (e) {
  if (e instanceof SDKError) {
    console.log(e.status);    // 404
    console.log(e.code);      // 后端错误码
    console.log(e.message);   // "not found"
    console.log(e.url);       // 请求 URL
    console.log(e.isAbort);   // 是否被取消?
  }
}

多租户

client.setTenantId("tenant-123");  // 添加 X-Tenant-ID 请求头
client.setTenantId(null);          // 重置

原始请求

用于 SDK 未覆盖的端点:

const data = await client.send("/custom/endpoint", {
  method: "POST",
  body: { key: "value" },
});

下一步

On this page