跳转到正文

API 边界与导航

本页说明系统对外入口的边界,以及前端、浏览器插件、代理和后端之间的职责分工。具体接口路径仍以 API 参考 为准。

调用方

当前调用后端的主体有六类:

  • React 前端,通过 frontend/src/api/client.ts 访问后端。
  • 浏览器插件,通过桥接脚本把外部购物车批次送到导入页,再由前端调用后端。
  • Agent skill,通过 CLI 命令面访问后端 API。
  • CLI,通过 python -m lsm_cli 访问后端 API。
  • MCP,通过 lsm_mcp 调用 CLI 子进程,不直接访问数据库。
  • 企业微信智能机器人和微信客服,通过 MCP、CLI 与后端 API 完成查询和确认后的写操作。
  • 调试脚本或运维工具,通过 Bearer Token 或开发环境文档页访问 FastAPI。

从系统边界上看,业务后端只有一个,即 FastAPI。

入口边界

路径前缀归属层说明
/api/*FastAPI 业务接口主业务入口
/api/eventsFastAPI SSE实时推送入口
/static/*FastAPI 静态资源上传图片、模板和导出资源
/healthFastAPI 健康检查部署探活
/docs /redoc /openapi.jsonFastAPI 文档仅非生产运行模式默认开放
/cart-import前后端桥接入口后端重定向到前端导入页

鉴权边界

  • 浏览器页面默认使用 HttpOnly Cookie。
  • 脚本和调试工具可以使用 Authorization: Bearer
  • 管理员接口额外依赖 require_admin
  • GET /api/events 同样要求登录。

涉及 Cookie 的写请求在安全运行模式下还会经过来源校验,因此新域名、反向代理或跨域部署都要同步检查 CORS_ORIGINS

前端边界

前端通过统一 API 基址访问后端,禁止拼接服务内部地址。前后端边界包含以下约束:

  • 以 HTTP 快照为主,SSE 增量更新为辅。
  • 表格状态、列宽和展开状态保存在浏览器本地。
  • 实验步骤查库存的临时结果保存在用户绑定的 sessionStorage 中,并按有效期清理。
  • 认证状态和 UI 状态由 Zustand 管理,不直接回写后端。
  • LLM 与 PubChem 调用由后端统一处理,前端不持有服务端凭据;前端 Sentry 使用独立的构建时公开配置。

页面入口、状态逻辑和工具函数分别对应 应用骨架前端 Hooks前端 Lib 工具箱

浏览器插件边界

浏览器插件与后端通过导入页桥接:

  1. 插件从外部采购平台采集数据。
  2. 插件把批次写入 chrome.storage.local
  3. import-bridge.js/cart-import 页面把批次同步到页面环境。
  4. 前端导入页逐条调用标准试剂订单或耗材订单创建接口。
  5. /api/cart-sync 用于匹配分析,导入落库统一走标准订单创建接口。

浏览器插件定位为外部采集器,系统前端仍由 React 应用承担。

CLI、MCP 与机器人边界

Agent skill 和脚本应统一走 lsm_cli/lsm_cli/ 只暴露明确列入 README 的命令。lsm_mcp/ 在 HTTP 层提供 MCP 工具,但工具实现仍调用 CLI 子进程,并继承 CLI 的命令白名单和退出码契约。

企业微信智能机器人和微信客服入口位于 robot/。它们不直接访问数据库,也不生成任意命令;查询和写操作都要经过 MCP、CLI 和后端 API。借用和归还等写操作必须在候选明确后等待用户确认。

外部服务边界

  • 实验步骤查库存通过后端访问 OpenAI 兼容 LLM 和 PubChem,接口参数与结果均由服务层校验。
  • LLM 配置为空时,实验步骤提取与 CAS 解析接口返回服务不可用,不降级为未经确认的本地推断。
  • Sentry 的 DSN 配置为空时保持停用;前端 source map 仅在构建环境提供上传凭据时发布。
  • LLM 用量日志仅保存调用元数据,实验步骤原文和模型响应不进入用量表。

代理与部署边界

docker/nginx/default.conf 把前后端统一到一个入口:
  • /api/ 反代到后端。
  • /static/ 透传到后端。
  • /docs/redoc/openapi.json 单独透传。
  • / 落到前端产物并回退到 index.html

部署层是统一入口,但安全头、CSRF、CORS 和 /static/ 缓存仍由 FastAPI 主导。

新增接口前检查清单

  • 这是对象 CRUD,还是工作流动作。
  • 是否补齐 get_current_userrequire_admin
  • 是否要触发 SSE 广播与缓存失效。
  • CLI 或 MCP 是否需要同步暴露该能力。
  • 是否涉及上传体积保护、CSRF、CORS 或代理头。
  • 是否需要同步更新 API 参考

相关页面

参考代码

开源项目 · Apache-2.0 license