Files
TakeoutSaaS.Prototypes/specs/001-personal-center-api/research.md

3.2 KiB
Raw Blame History

Phase 0 Research - 租户个人中心 API第一版

Decision 1: 接口组织采用“总览聚合 + 明细分页”组合

  • Decision: 使用 GET /personal/overview 提供聚合首屏数据,同时为账单、支付、操作记录、消息等提供独立分页接口。
  • Rationale: 聚合接口满足首屏加载效率,独立接口避免过度返回,便于分别鉴权、分页和缓存。
  • Alternatives considered:
    • 单一超大接口一次返回全部数据:实现简单但耦合高、回归风险大。
    • 全拆分接口无聚合:调用次数多,首屏体验差。

Decision 2: 聚合查询采用“部分失败降级返回”

  • Decision: 请求语义正确时返回可用模块数据,并在响应中显式标识失败模块、错误码与错误原因。
  • Rationale: 个人中心是查询场景,部分可用优于整页失败;显式失败标识可避免前端误判空数据。
  • Alternatives considered:
    • 任一模块失败即整体失败:稳定性差,用户可用性低。
    • 静默置空失败模块:对排障与运营监控不友好。

Decision 3: 时间范围与分页采用统一默认策略

  • Decision: 账单/支付/操作记录在未传时间筛选时默认查询最近 90 天;操作记录单次返回默认 50 条且上限 50 条。
  • Rationale: 兼顾查询性能与业务可用性,满足已确认的产品澄清并降低大租户尾页查询压力。
  • Alternatives considered:
    • 默认 30 天:可能不足以覆盖常见追溯场景。
    • 默认全量历史:高并发与高数据量下风险高。

Decision 4: 账单与配额可见范围由租户角色清单配置

  • Decision: 提供租户级角色清单配置能力,账单/配额查询仅对配置角色开放。
  • Rationale: 满足不同租户组织结构差异,遵循最小权限原则,减少硬编码角色导致的维护成本。
  • Alternatives considered:
    • 全员可见:敏感信息暴露面过大。
    • 固定仅管理员可见:灵活性不足,无法适配租户自定义角色模型。

Decision 5: 安全与审计采用“敏感查询强审计 + 脱敏输出”

  • Decision: 手机号、邮箱统一脱敏输出;敏感查询记录审计事件(操作者、租户、模块、结果、追踪标识)。
  • Rationale: 满足商用 SaaS 合规要求,支持事后追溯与安全稽核。
  • Alternatives considered:
    • 前端脱敏:后端仍可能泄露原始敏感字段。
    • 仅失败请求审计:无法覆盖敏感数据浏览行为追踪。

Decision 6: 可观测与回滚按发布门禁前置

  • Decision: 对新增接口输出结构化日志与 OTel 指标/追踪;定义失败率和延迟阈值,触发功能开关回滚。
  • Rationale: 与宪法“可观测与可回滚”原则对齐,降低首版全量发布风险。
  • Alternatives considered:
    • 仅记录日志无指标:无法快速发现趋势型故障。
    • 人工回滚无阈值:响应慢且容易扩大故障窗口。

Research Resolution Summary

  • 技术上下文中的不确定项已消解,本阶段无 NEEDS CLARIFICATION 遗留项。
  • 研究结论已回写到 plan.mddata-model.mdcontracts/openapi.yaml 的设计约束中。