文档目录
开发与扩展

REST API

使用 REST 接口读写项目、任务与工时数据,并了解认证与错误处理约定。

最后更新:2026-10-08

概览

]project-open[ 通过 /intranet-rest/ 提供 REST 风格的接口,适合以下集成:

  • 从 CRM 或合同系统同步客户与项目;
  • 把工时数据推送到财务或 BI 系统;
  • 为移动端或门户提供只读数据;
  • 自动化报表与数据校验。

接口路径与字段可能随版本调整。开发前请先在测试环境确认实际返回结构,并以系统自带的接口文档为准。

认证

推荐使用令牌认证,在请求头中携带:

GET /intranet-rest/project/ HTTP/1.1
Host: pm.example.com
Authorization: Bearer <token>
Accept: application/json

令牌应只授予必要的权限,并绑定到专用集成账号。不要使用个人管理员账号生成长期令牌。

常用端点

资源 方法 路径
项目列表 GET /intranet-rest/project/
项目详情 GET /intranet-rest/project/{id}
创建项目 POST /intranet-rest/project/
更新项目 PUT /intranet-rest/project/{id}
任务列表 GET /intranet-rest/task/
工时列表 GET /intranet-rest/hour/
创建工时 POST /intranet-rest/hour/
客户列表 GET /intranet-rest/company/

查询示例

查询进行中的项目,按更新时间倒序,取前 20 条:

curl -s "https://pm.example.com/intranet-rest/project/?status=active&limit=20&orderby=last_modified" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

返回结构通常为数组,字段包含项目编号、名称、客户、状态与日期:

[
  {
    "project_id": 10231,
    "project_nr": "PRJ-2026-018",
    "project_name": "某客户门户本地化",
    "company_id": 881,
    "project_status_id": 76,
    "start_date": "2026-09-01",
    "end_date": "2026-12-31"
  }
]

创建工时记录:

curl -s -X POST "https://pm.example.com/intranet-rest/hour/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": 2041,
    "project_id": 10231,
    "task_id": 55821,
    "day": "2026-10-08",
    "hours": 6.5,
    "note": "术语表整理与初译"
  }'

分页与筛选

常见查询参数:

  • limit / offset:分页;
  • orderby:排序字段;
  • status:按状态过滤;
  • company_id、project_id:按关联对象过滤。

大批量同步时建议使用增量字段(如 last_modified)而不是全量拉取,并控制单页大小在 100 条以内。

错误处理

接口使用 HTTP 状态码表达结果:

状态码 含义 处理建议
200 成功 —
400 参数错误 检查字段类型与必填项
401 未认证 检查令牌是否过期
403 无权限 检查集成账号角色
404 资源不存在 确认 ID 与路径
409 冲突 通常是唯一约束或状态不允许
500 服务端错误 记录请求 ID 并联系管理员

建议在集成层统一记录请求与响应摘要(脱敏后),便于排查。

集成建议

不要直接写业务表

即使数据库可访问,也应通过接口或业务过程写入数据,否则容易绕过权限、审计与派生字段计算。

使用幂等键

批量创建数据时,在外部系统维护唯一键(如合同编号),重试前先查询是否已存在,避免重复记录。

控制写入频率

工时与财务数据建议按批提交,避免高频单条写入。批量失败时要能定位到具体记录。

只读账号优先

报表与 BI 集成优先使用只读账号;写入权限只授予确实需要的集成。

下一步