Skip to content

API 路由

插件可以用 @api 或 initializer 上下文暴露 HTTP handler。

ts
import { BasePlugin, api, definePlugin } from "@ps-generator-bridge/sdk/plugin";

class PaintPlugin extends BasePlugin {
  @api("/status")
  status() {
    return { ok: true };
  }
}

export default definePlugin("paint", (context) => new PaintPlugin(context));

路由会挂载到插件 id 下面:

text
GET /paint/status

HTTP 方法

使用对象形式选择方法:

ts
@api({ method: "POST", url: "/create" })
create(params: unknown) {
  return { ok: true };
}

普通对象插件在同步初始化期间注册相同路由:

ts
import type { PluginInitContext } from "@ps-generator-bridge/sdk/plugin";

export default function init(context: PluginInitContext) {
  context.api("/status", () => ({ ok: true }));
  context.api({ method: "POST", url: "/create" }, () => ({ ok: true }));
  return {};
}

路由路径必须以 / 开头。支持的方法包括 GETPOSTPUTPATCHDELETEHEADOPTIONS。重复或格式错误的路由会在插件可用前让激活失败。

路由冲突

插件 id 会保留它的第一段路径。模块 API 路由不能使用和已加载插件 id 相同的第一段路径。

这样可以把插件 HTTP 路由稳定地放在:

text
/{pluginId}/...

并防止全局模块路由抢占插件命名空间。

内置模块路由

generator 也会在保留的 /action/document/layer/image/selection 路径段下暴露内置模块 HTTP 路由。这些路由是现有 Protocol 方法的第二入口, 返回形状复用对应 WebSocket request 方法。

方法路由输入
POST/action/auto-cutout无需请求体
POST/action/remove-background无需请求体
GET/document/current
POST/document/exportJSON 请求体,必须包含 filePath,并可包含其他导出字段
POST/document/saveJSON 请求体,可包含 savePath
GET/layer/info可选 query 参数:idindexgetChildrengetGeneratorSettings
GET/layer/by-id/:layerID可选 query 参数 getChildren
GET/layer/by-index/:layerIndex可选 query 参数 getChildren
GET/layer/current-preview
POST/layer/import-imageLayerImportImageParams JSON 请求体;image 为必填字段
POST/image/export-layerJSON 请求体,必须包含 layerSpec;可包含 documentIdsettings
POST/image/export-layer-with-selected-pathJSON 请求体,必须包含数值 layerSpec;可包含 documentIdexpand
GET/image/preview/:layerSpec可选 query 参数 documentId
POST/image/export-documentJSON 请求体,可包含 documentIdsettings
GET/selection/area
GET/selection/path可选 query 参数 expand

POST 请求体必须是 JSON 对象。数值型路径参数和 query 参数可以使用数值字符串; 标记为整数的参数不接受小数。布尔 query 参数接受 truefalse10。 无效 JSON、缺少必填字段或参数值无效时,会返回 400 和 Protocol 错误体。

图片导出路由返回 WsImageResult。其中 datadata:image/png;base64,... URI;启用 COS 上传时也可能是 HTTPS URL。预览路由始终返回 data URI。其余字段包含 图片的 boundswidthheight

错误响应

模块路由使用与 WebSocket 响应相同的 ProtocolError 形状序列化错误。HTTP 状态码 由 Protocol 错误码决定:

HTTP 状态码Protocol 错误
400BadRequest,包括无效 JSON 和无效参数
404PluginNotFoundDocumentNotFoundLayerNotFound
409NoDocumentPhotoshopBusy
503PhotoshopUnavailable
500其他服务端错误和 JSX 执行失败

持续事件能力(例如 selection:change)仍然通过 WebSocket 事件订阅使用, 不会暴露为 HTTP 路由。