
1) 【一句话结论】
基于RESTful架构设计人权报告查询API,核心是通过资源URL标识(如/reports),用GET方法操作,采用cursor分页(高效处理大数据)、参数化过滤、稳定排序,传输JSON,用标准HTTP状态码和错误体处理异常,配合单元测试确保功能正确,并考虑数据库索引与缓存优化性能。
2) 【原理/概念讲解】
RESTful API的核心是资源识别与HTTP方法操作。对于人权报告查询,关键设计点如下:
/reports 标识,用GET方法获取资源列表。country、time、type)动态构建SQL,用参数化查询(如JDBC的PreparedStatement或ORM的查询构建器)防止SQL注入,确保安全性。country升序,再按date升序),确保相同条件结果一致,便于用户预期。3) 【对比与适用场景】
分页方式对比(Offset-Limit vs Cursor)
| 特性 | Offset-Limit(偏移量+数量) | Cursor(游标) |
|--------------|------------------------------|----------------------|
| 定义 | 偏移量(当前页起始位置)+数量 | 当前页最后一个ID+数量 |
| 优点 | 简单易实现,逻辑直观 | 更高效,避免重复数据 |
| 缺点 | 数据量增长时性能下降(如offset=90000,每次扫描前90万条) | 需存储游标,维护复杂(如游标过期处理) |
| 适用场景 | 数据量小(<10万条)、顺序固定 | 数据量大(>100万条)、频繁分页 |
过滤参数构建方式
?或ORM占位符),将用户输入的参数作为参数传递,避免拼接SQL。排序稳定性
country升序,再date升序),确保相同条件结果一致。4) 【示例】
GET /reportsGET /reports?cursor=0&size=10&country=China&time=2023-01-01&type=Violations&sort=country:asc
(注:cursor默认为0(第一页第一个ID),size默认为10(每页10条)){
"cursor": "123", // 下一次查询的游标(当前页最后一个ID)
"size": 10,
"totalElements": 150,
"content": [
{
"id": 124,
"country": "China",
"date": "2023-01-20",
"type": "Violations",
"description": "Human rights violation report"
},
...
]
}
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "InvalidTimeFormat",
"message": "Time parameter must be in YYYY-MM-DD format"
}
5) 【面试口播版答案】
面试官好,针对人权报告查询的RESTful API设计,我遵循RESTful架构,核心是通过资源URL标识(如/reports),用GET方法获取,支持高效分页(cursor机制)、参数化过滤、稳定排序,传输JSON,用标准HTTP状态码和错误体处理异常,配合单元测试确保功能正确。具体来说,API端点为/reports,通过查询参数实现分页(cursor=lastId&size=10,cursor分页更高效,避免重复数据;默认cursor为0,size为10),过滤(country=国家、time=时间范围、type=事件类型),排序(sort=字段:升序/降序)。响应体包含游标、分页信息和报告列表。错误处理方面,参数无效(如page为负数)返回400 Bad Request,报告不存在返回404,服务器错误返回500,错误体含错误码和消息。单元测试用Jest+Supertest模拟请求,验证响应的cursor、size、过滤条件是否生效。这样设计既符合REST规范,又能高效处理大量人权报告数据,满足查询需求。
6) 【追问清单】
time=2023-02-30)如何处理?sort=invalid_field)如何处理?7) 【常见坑/雷区】