跳到正文

REST API 与 MCP 集成

REST API 概览与身份验证

连接当前 ExCoil REST API:访问条件、实际路由、请求体、单位、响应和运行限制。

修订日期

1. 访问条件与 REST/MCP 的区别

REST 访问要求 Enterprise 或 Manufacturer 订阅,且状态为 active 或 trialing。服务器在每次请求时检查密钥所有者的当前订阅;降级或失去有效状态后,旧密钥不能保留访问权限。

REST 使用 /api/v1 和以 exk_ 开头的 API 密钥。MCP 是独立的 Streamable HTTP 接口,地址为 /api/mcp,仅供 Manufacturer 使用,并要求手动配置专用 Bearer 令牌。两种凭据不能互换。这些 REST 路由没有实现 OAuth 授权流程。

以下路由提供六种翅片盘管计算引擎和制冷剂列表,不提供 REST 项目增删改查、Shell & Tube、制造文件或 CAD/PDF 导出。REST 密钥上的 projects:read 权限不会产生项目端点。制造详图仍仅限 Manufacturer;本指南不代表 REST 提供制造权限。

2. 基础 URL 与身份验证

使用 API 实际部署的 ExCoil 环境的源地址,再加上 /api/v1。生产域名的基础 URL 为 https://excoil.net/api/v1。预览属于不同环境;预览中存在的代码不表示已发布到生产域名。

在 API 密钥页面生成密钥,并立即保存完整值:它只显示一次。所有请求都必须发送 Authorization: Bearer 加 REST 密钥,包括 GET /health 和 GET /refrigerants。请保留 Bearer 的大写首字母及后面的空格。浏览器登录 Cookie 本身不能验证这些路由。

计算 POST 请求应发送 Content-Type: application/json。密钥应保存在服务端安全存储中,不要放入浏览器代码包、URL、提示词、代码仓库或共享日志。密钥遗失或泄露时应撤销并更换;降级后仍可管理旧密钥。

bash

BASE_URL='https://excoil.net/api/v1'
EXCOIL_API_KEY='exk_REPLACE_WITH_YOUR_REST_KEY'
curl --include "$BASE_URL/health" \
  -H "Authorization: Bearer $EXCOIL_API_KEY"

3. 已实现的路由

表中所有路径均相对于 /api/v1,且都要求身份验证和有效订阅。计算 POST 路由及 /refrigerants 还要求 calc:read。/health 不额外检查该权限。

方法路径用途
GET/healthAPI 状态、版本和时间戳
GET/refrigerants可用制冷剂标识符
POST/calculate/chilled-water冷水盘管
POST/calculate/hot-water热水盘管
POST/calculate/steam-coil蒸汽盘管
POST/calculate/dry-cooler干冷器
POST/calculate/dx-evaporatorDX 蒸发器
POST/calculate/dx-evaporator/balanced使用平衡求解器的 DX 蒸发器
POST/calculate/dx-condenserDX 冷凝器
POST/calculate/dx-condenser/balanced使用平衡求解器的 DX 冷凝器

4. 构造正确的 JSON 请求体

普通计算路由直接接收引擎输入对象,不使用 data 或 inputs 包装。冷水和热水输入包含 air、water、coil、hydraulic、calib;蒸汽包含 air、steam、coil、hydraulic、calib;干冷器使用自己的 fluid、air、coil、hydraulic、calib 字段。DX 使用 air、coil、ref、calib。各引擎的必填字段不同,不要直接复制网页表单的显示对象,也不要跨模块复用请求体。

DX 蒸发器的 balanced 路由是例外:发送包含 inputs 和可选 options 的对象。inputs 中放置完整的 DX 蒸发器引擎输入。DX 冷凝器的 balanced 路由则直接接收冷凝器输入,不使用蒸发器的 inputs/options 包装。

DX 请求应在 ref.fluid 中使用 /refrigerants 返回的准确标识符。路由在选择物性表时也识别旧字段 ref.refrigerant 或顶层 refrigerant,但引擎的规范字段仍是 ref.fluid。成功匹配物性表并不能替代 ref 中其他必填字段。

REST 包装层只对请求体和制冷剂做有限检查,不执行全面的结构验证。它不会自动转换界面单位,也不会补齐所有缺失的引擎字段。发送前应在集成端验证必填值、物理范围、几何和校准参数。

5. 单位属于接口契约

API 使用引擎字段名和单位,不受网页显示单位设置影响。JSON 数值必须提前转换;不要在数值字段中发送本地化数字字符串或单位标签。

字段或后缀含义和单位
Vdot_m3_s; mdot_kg_s体积流量:m³/s;质量流量:kg/s
T_in_C; Tevap_C; *_K温度:°C;温差或过热度:K
height_m; width_m; Do_m; wall_m几何尺寸以米表示,而非毫米
P_Pa; *_Pa; *_kPa压力严格按名称使用 Pa 或 kPa
RH_in; freeAreaRatio0 至 1 的比例,而非百分数
glycol_pct水盘管乙二醇百分数,而非 0 至 1 的比例
fpi每英寸翅片数,而非每米翅片数
P_steam_kPa蒸汽表压,单位 kPa;不是绝对压力 Pa
Q_total_W; h_out容量:W;冷水/DX 蒸发器出口焓:J/kg 干空气

6. 读取响应与工程诊断

计算成功时返回 {"success":true,"data":...},data 为引擎结果对象。GET /refrigerants 使用相同包装,data 为标识符数组。GET /health 不同:直接返回 status、version 和 timestamp,没有 success 或 data。

HTTP 200 和 success:true 表示求解器返回了结果,不代表所有工程标准均已满足。应检查模块的 flags、收敛状态、notes 和可用性能诊断。请将警告与输入快照及结果一起保存,不要静默忽略不收敛或不可行标记。

平衡端点在 data 中返回各自的求解结果。应查看具体结果契约,不能假设所有端点都具有相同的 perf 或 flags 路径。较小的能量平衡误差只是数值诊断,不是独立验证、认证或制造许可。

json

{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": "<ISO-8601 时间戳>"
}

7. 请求限额与重试

限流以 REST 密钥和服务器进程为单位。它使用密钥配置的 rateLimit;缺失或为零时回退为每分钟 100 次请求。60 秒窗口从首次获准请求开始,不应假定在每个整分钟重置。

通过身份验证和订阅检查后,请求会在路由权限检查或计算之前消耗额度。因此健康检查、制冷剂列表、权限失败和计算错误都可能消耗额度。身份验证和订阅失败发生在此限流器之前。

读取 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset。Reset 是以秒为单位的 Unix 时间戳,不是毫秒或持续时间。429 响应包含这些响应头和 rate_limit_exceeded;此中间件不设置 Retry-After。等待重置,考虑时钟差异并限制重试次数,不要紧密循环。

限流器保存在内存中,进程重启后重置,也不是跨副本共享的全局配额。它不保证吞吐量、并发量或响应时间。此 REST 路由器没有实现逐请求截止时间,也不提供异步任务和状态轮询端点。

8. 诊断 HTTP 与计算错误

路由器生成的错误返回 error 和 message,不包含 success:false。检查 HTTP 状态和错误代码,并保留脱敏消息用于排查。解析器、代理或基础设施错误可能使用其他响应格式;不要在检查内容类型之前假定响应一定是 JSON。

HTTP / error含义处理方法
400 / bad_request普通请求体缺失或不是对象;DX 制冷剂缺失/未知;平衡蒸发器缺少 inputs修正请求体结构和制冷剂标识符
401 / unauthorizedBearer 头缺失/错误,密钥前缀错误或密钥无法识别检查请求头和 REST 密钥,不要使用 MCP 令牌
403 / forbidden密钥撤销/过期,订阅计划或状态不符,或权限不足检查密钥状态、所有者订阅和 calc:read
422 / calculation_error求解处理程序发生异常检查消息、输入、单位和工况范围;不要无限重复相同请求
429 / rate_limit_exceeded密钥已耗尽当前内存窗口的额度依据限流响应头延后重试

json

{
  "error": "unauthorized",
  "message": "Invalid API key."
}

9. 实用集成检查清单

  1. 确认目标环境、有效订阅及专用 REST 密钥。安全保存完整密钥,常规诊断仅记录前缀。
  2. 用经过身份验证的 /health 检查连接;DX 计算还需查询 /refrigerants。将这两类请求计入请求预算。
  3. 选择准确路由和引擎输入契约,明确转换单位并在发送前验证必填字段。各模块详情参见计算器指南。
  4. 计算 POST 中添加 Authorization 和 Content-Type,并序列化完整输入。仅在平衡 DX 蒸发器中使用 inputs/options 包装。
  5. 检查状态、响应格式、限流响应头和工程诊断。保存提交的输入、返回的引擎版本及全部警告。
  6. 先纠正 400/401/403/422 的原因,不要盲目重试;遇到 429 应等待。撤销泄露密钥,并在选型、采购或制造前进行工程审核。

文档所述功能取决于订阅等级以及计算中可用的数据。尺寸图不代表制造批准。

全部指南