REST API区分权限与成员身份返回项目资源的实现方案咨询
最优实现方案为方案5:/projects 与 /me/projectsforservicerecording 两个资源分离设计
选型核心逻辑
REST API设计的核心要求是资源语义明确、职责单一,你提到的两个场景属于完全独立的业务逻辑,权限校验规则、适用场景、返回结果的使用目标都没有重叠,拆分独立端点能最大程度降低开发、维护、调用侧的出错概率:
/projects端点对应场景1「基于用户全局权限返回项目列表」:权限逻辑仅校验用户的三类全局项目权限,返回结果用于常规项目查询、管理类业务场景,和你的现有权限体系天然对齐。/me/projectsforservicerecording端点对应场景2「基于项目成员身份返回项目列表」:资源前缀/me明确标识这是和当前登录用户绑定的个性化资源,权限逻辑完全忽略全局项目权限,仅过滤用户作为成员加入的项目,专门用于工时、费用、物料服务的创建场景,调用方不需要记忆额外参数,直接调用对应端点即可。
其他方案的劣势
- 方案1/2(单个
/projects端点靠参数区分场景):同一个端点需要承载两套完全独立的权限校验逻辑,代码耦合度高,参数漏传、误传极易导致权限逻辑出错,后期如果两个场景的返回字段、分页规则、过滤条件出现差异,代码会快速变得臃肿难以维护。 - 方案3(两个根资源
/projects和/projectsforservicerecording):服务录入可用的项目是和当前用户强绑定的个性化资源,放在根资源路径下语义不清晰,调用方无法直观判断这个资源的适用范围。 - 方案4(
/projects和/projects/forservicerecording):/projects下的子资源默认语义是项目集合的公共维度,和当前用户身份无关,放在这个路径下语义错位,容易误导调用方。
可扩展性优化
如果后续有更多个人维度的项目查询需求,可以统一收敛到/me/projects路径下,通过子资源区分不同场景,比如调整为/me/projects/for-service-recording,语义更清晰,后续新增其他个人项目过滤维度时不需要新增根资源,扩展性更强。
内容的提问来源于stack exchange,提问作者Mike Kaufmann
相关产品推荐
相关产品推荐

