Files
TakeoutSaaS.Docs/Document/15_API边界与自检清单.md

5.1 KiB
Raw Blame History

API 边界与自检清单

目的:明确 Admin/User/Mini 三个 API 的职责边界避免跨端耦合。开发新接口或改动现有控制器时请对照自检确保租户、安全、DTO、路由符合约定。

说明:仓库已拆分为 TakeoutSaaS.AdminApi(管理后台)与 TakeoutSaaS.TenantApiUserApi/MiniApi。本文档只对边界与自检项作约束控制器清单仅对 AdminApi 维护,其余端以各自仓库代码为准。

1. AdminApi管理后台

  • 归属仓库TakeoutSaaS.AdminApi
  • 面向对象:平台运营、客服、内部管理。
  • 职责:商户/门店/商品/订单/支付/配送/字典/权限/RBAC/审计/系统参数等后台管理与洞察。
  • 鉴权JWT + RBAC[Authorize] + PermissionAuthorize不强制租户头AdminApi 默认不做租户隔离(内部工具允许跨租户查询)。如需限定租户,请在路由/参数中显式指定 tenantId 并在应用层校验。
  • 路由前缀api/admin/v{version}/...
  • DTO/约束:仅管理字段,禁止返回 C 端敏感信息long -> string严禁实体直接返回。
  • 现有控制器(以仓库代码为准)AuthControllerCacheMetricsControllerDeliveriesControllerDictionaryControllerDictionaryGroupsControllerDictionaryItemsControllerDictionaryLabelOverridesControllerFilesControllerHealthControllerInventoryControllerMenusControllerMerchantCategoriesControllerMerchantsControllerOrdersControllerPaymentsControllerPermissionsControllerProductsControllerRoleTemplatesControllerStoreAuditsControllerStorePickupControllerStoreQualificationsControllerStoreShiftsControllerStoreStaffsControllerStoreTableAreasControllerStoreTablesControllerStoresControllerSystemParametersControllerUsersController
  • 自检清单
    1. 是否需要权限校验?未加则补 [Authorize] + PermissionAuthorize(内部只读工具也至少需要 [Authorize],避免误暴露)。
    2. 是否调用了应用层 CQRS而非在 Controller 写业务?
    3. DTO 是否按管理口径,未暴露用户端字段?
    4. 是否使用参数化/AsNoTracking/投影,避免 N+1
    5. 路由和 Swagger 示例是否明确权限含义AdminApi 不要求租户头)?
  • 自检记录:已移除租户侧控制器(如 TenantsControllerTenantPackagesControllerTenantBillingsController 等)。UsersController 仅管理平台管理员账号(Portal=AdminTenantId=null),不做租户侧兼容/兜底。

2. UserApiC 端用户)

  • 归属仓库TakeoutSaaS.TenantApi
  • 面向对象App/H5 普通用户。
  • 职责:菜单浏览、下单、支付、评价、地址、售后、订单查询、支付/配送回调(验证签名)等用户闭环。
  • 鉴权:用户 JWT租户隔离幂等接口需校验。
  • 路由前缀api/user/v{version}/...
  • DTO/约束仅用户侧可见字段屏蔽后台配置字段long -> string。
  • 现有控制器:以 TakeoutSaaS.TenantApi 仓库为准(此处不维护清单,避免与代码偏差)。
  • 自检清单
    1. 是否暴露给用户的纯前台功能?后台配置请放 AdminApi。
    2. 是否做租户隔离、用户鉴权、签名/幂等校验?
    3. 响应是否脱敏且只含用户需要的字段?
    4. 是否避免跨端复用后台 DTO/命令?
    5. 回调路由是否验证签名/防重放?

3. MiniApi小程序端

  • 归属仓库TakeoutSaaS.TenantApi
  • 面向对象:微信/小程序前端。
  • 职责:小程序登录/刷新、当前用户档案、订阅消息、直传凭证、小程序场景特定的下单/浏览等。
  • 鉴权:小程序登录态/Token租户隔离必要时区分渠道。
  • 路由前缀api/mini/v{version}/...
  • DTO/约束遵循小程序接口规范错误码与前端对齐long -> string。
  • 现有控制器:以 TakeoutSaaS.TenantApi 仓库为准(此处不维护清单,避免与代码偏差)。
  • 自检清单
    1. 是否为小程序特有流程code2session、订阅消息、直传等通用用户接口放 UserApi。
    2. 是否完成租户/鉴权校验,区分渠道标识?
    3. 请求/响应是否符合小程序对错误码与字段的约定?
    4. 是否避免使用后台管理 DTO/权限模型?
    5. 上传/直传接口是否限制 MIME/大小并做鉴权?

4. 共通约束

  • 分层Controller 仅做路由/DTO 转换,业务放 Application 层 Handler。
  • 租户TenantApi 必须强制租户隔离AdminApi 作为内部平台工具默认允许跨租户查询,但必须受 RBAC 与审计约束。
  • 日志/观测TraceId/SpanId 已贯通;/metrics、/healthz 按服务暴露。
  • 命名:输入 XxxRequest、输出 XxxDto;文件名与类名一致;布尔属性加 Is/Has
  • 发布前检查:运行 dotnet build,必要时补 Swagger 示例、单元测试(核心逻辑 100% 覆盖,服务 ≥70%)。