跳到主要内容

扩展 Server API

ReactPress API 基于 NestJS,源码位于 monorepo server/。扩展方式分两类:改 core 模块(贡献者)与 写插件 Hook(推荐第三方)。

何时用插件 vs 改 Server

方式适用升级影响
Plugin Hook业务规则、字段改写、集成低,独立包
Server PR新 REST 资源、鉴权模型、core bug需跟随版本发布

第三方集成优先 插件开发

Server 目录结构(简)

server/src/
├── modules/
│ ├── article/ # 文章 CRUD + Headless
│ ├── page/
│ ├── auth/
│ ├── plugin/ # 插件注册与 HookService
│ └── ...
├── common/ # 过滤器、守卫、拦截器
└── main.ts

每个 Feature Module*.module.ts*.controller.ts*.service.ts

添加 REST 端点(贡献者)

  1. server/src/modules/ 下创建或扩展模块
  2. Controller 使用 Swagger 装饰器(@ApiTags@ApiOperation
  3. app.module.ts 注册模块
  4. 运行 pnpm run build:toolkit 重新生成 OpenAPI 客户端
// 示例:只读端点
@Controller('example')
@ApiTags('example')
export class ExampleController {
@Get()
findAll() {
return { items: [] };
}
}

Hook 集成点

PluginModule 在启动时加载 .reactpress/plugins/ 下已启用插件,由 HookService 分发:

  • applyFilters(name, payload) — 可改数据
  • doAction(name, payload) — 副作用

发布文章流程见 插件开发

本地调试 API

pnpm dev:api # 仅 Server :3002
pnpm run test:smoke # /api/health

Swagger:http://localhost:3002/api

架构约束

  • Server 不得依赖 web/themes/plugins/ 源码包(插件 runtime 通过 dynamic require 加载)
  • 所有对外类型应进入 OpenAPI → toolkit codegen

相关文档