04 · BUSINESS BACKENDP012 MIN
API 分页、过滤与排序契约
把数据库查询能力包装成安全、稳定、可演进的公共接口。
MENTAL MODELQUERY API CONTRACT
01Parse Query
→02Validate Whitelist
→03Inject Data Scope
→04Run Indexed Query
→05Encode Cursor
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
Pagination Contract
统一 pageSize、cursor、hasNext、nextCursor 和总数是否可用。
Filter Whitelist
公开有限字段和操作符,并映射到内部查询。
Stable Sorting
指定默认排序并加入唯一 tie-breaker,让多页结果形成全序。
高级搜索拖垮数据库
客户端可传任意 contains 过滤和五列排序,一个租户发出全表模糊查询。
- 01
公开业务需要的 filter DSL。
- 02
限制组合、页大小和查询时间。
- 03
为高成本报表改为异步导出。
普通列表有确定性能边界,重查询进入可观测的后台任务。
马上动手
- 设计 GET /orders 查询参数。
- 决定何时返回 exact total、estimated total 或不返回。
常见坑
- 把 ORM where 暴露给客户端
- 排序字段无白名单
- 过滤前忘记注入 tenant scope
05 · KNOWLEDGE CHECK为什么 Data Scope 应在解析用户过滤后由服务端注入?查看答案⌄
答案
用户过滤是可选查询条件,租户/数据范围是不可取消的安全边界;必须由服务端独立合并,不能允许客户端覆盖。