数据分类方法:按业务领域、敏感度、数据类型分类
数据分类这件事,说白了就是给数据贴标签。但标签怎么贴、贴几层,直接决定了后续API设计的复杂度。我在好几个项目里都见过一个通病——分类太粗,结果API权限控制跟筛子一样;或者分类太细,开发团队直接罢工。这一章,咱们就把三种最实用的分类方法讲透。
按业务领域分类
这是最直观的分类方式。你先梳理公司的业务线,然后每条业务线就是一个大类。举个例子,电商系统常见的业务域:
- 用户域:注册信息、登录日志、个人资料
- 商品域:商品详情、库存数据、价格信息
- 订单域:订单记录、支付流水、物流追踪
- 营销域:优惠券、活动规则、用户画像
我个人习惯,每个业务域用一个两位字母缩写作为前缀。比如用户域用 US,商品域用 PD。这样在API路径、数据库表名、日志标签里都能一眼识别归属。你想想看,如果所有数据都混在一个大池子里,后面做权限隔离的时候得多痛苦?
按敏感度分类
这一层是安全架构师最关心的。敏感度分类决定了数据能不能出内网、能不能缓存、能不能在API响应里明文返回。我一般把敏感度分成四个等级:
| 等级 | 定义 | 示例 | API处理要求 |
|---|---|---|---|
| C0 | 公开数据 | 商品名称、公告内容 | 可直接返回,允许缓存 |
| C1 | 内部数据 | 订单状态、用户昵称 | 需认证,禁止公开缓存 |
| C2 | 敏感数据 | 手机号、详细地址 | 需脱敏或加密,审计日志必记 |
| C3 | 机密数据 | 支付密码、身份证号 | 加密存储,API响应需最小化 |
按数据类型分类
这一层更多是技术层面的考量。不同数据类型对API的设计约束完全不同。我把常见的数据类型归为以下几类:
- 结构化数据:关系型数据库里的表,字段固定。API响应适合用JSON对象,字段名尽量和数据库列名保持一致。
- 半结构化数据:JSON、XML、YAML这类。API设计时要考虑schema验证,防止脏数据流入。
- 非结构化数据:图片、视频、文档。这类数据不适合走常规的JSON API,一般用预签名URL或分块上传。
- 时序数据:日志、监控指标。API需要支持时间范围和聚合查询,否则客户端会拉爆服务端。
嗯,这里要注意。数据类型分类和前面两种分类不是互斥的。一个用户头像,它既属于用户域,敏感度可能是C1,数据类型又是非结构化。所以你在做分类方案时,得把这三个维度组合起来用。
三维分类模型的实践
我在主导一个金融项目时,把这三个维度整合成了一个三维分类矩阵。每个数据资产都有一个三元组标签:
// 三维分类标签示例
// 格式:[业务域]_[敏感度]_[数据类型]
用户手机号: US_C2_STRUCTURED
商品主图: PD_C1_UNSTRUCTURED
订单日志: OD_C0_TIMESERIES
支付密码: US_C3_STRUCTURED
有了这个标签,API网关就能自动路由。比如检测到 C2 或 C3 的数据,强制走加密通道;检测到 TIMESERIES 类型,自动切换到时序查询引擎。说白了,分类的最终目的就是为了自动化决策,而不是给运维人员增加负担。
为什么我强调一定要同时用三个维度?因为单一维度的分类太脆弱了。比如只按业务域分,你没法区分用户昵称和用户密码在安全等级上的差异;只按敏感度分,你又不知道这个数据该走关系型查询还是时序查询。三个维度互相补充,才能构建出经得起推敲的API设计基础。
分类结果如何落地到API设计
有了三维分类矩阵,下一步就是把这些标签映射到API的具体设计里。我总结了一套常见的映射规则:
| 分类标签 | API端点设计 | 传输方式 | 缓存策略 |
|---|---|---|---|
| US_C0_STRUCTURED | GET /api/v1/users/profile |
HTTPS + JSON | CDN缓存5分钟 |
| US_C2_STRUCTURED | POST /api/v1/users/phone |
HTTPS + 加密Payload | 禁止缓存 |
| PD_C1_UNSTRUCTURED | GET /api/v1/products/images |
预签名URL | 客户端本地缓存 |
| OD_C0_TIMESERIES | GET /api/v1/orders/trends?start=&end= |
HTTPS + JSON | Redis缓存聚合结果 |
你看,分类标签一旦确定,API的技术选型基本就定了七八成。剩下的就是按照规范写代码。我在项目里一般要求每个API的文档里必须注明分类标签,这样不管是前端调用还是后端维护,大家都能快速理解这条API的约束条件。
三维分类模型总览
为了方便你理解这三个维度的协作关系,我画了一张结构图。它展示了业务域、敏感度和数据类型如何共同作用于API设计。
这张图很清楚地展示了三个维度如何汇合。每个维度各自独立,但最终通过组合标签共同驱动API的设计决策。你在实际工作中,先跑通这张图里的逻辑,再去做具体的接口开发,会顺畅很多。