如何设计符合REST规范的接口查询用户是否被另一用户拉黑
你的接口设计评估
可行性判断
- 你当前的设计完全可以正常跑通,是可行的。
- 整体符合REST规范的核心要求:GET请求语义正确(仅做查询、无副作用),资源路径
/members/{userId}/blocks合理对应了用户的拉黑关系集合资源,返回结构简洁明了,完全能满足业务需求。
优化建议(更贴合REST设计规范)
你可以做小调整让接口语义更清晰,扩展性更好:
REST规范推荐用路径唯一标识单个资源,查询参数多用于过滤、分页等集合查询场景
- 你当前的需求是查询两个用户之间的特定拉黑关系,而非查询用户1的所有拉黑记录,所以可以把被查询的用户ID放到路径中,改成
GET /members/1/blocks/2,路径本身就直接对应「ID为2的用户对ID为1的用户的拉黑关系」这个独立资源,不需要额外传查询参数,语义更明确。 - 保留原来的不带参数的
GET /members/1/blocks接口,后续可以直接用来返回用户1的所有拉黑/被拉黑列表,不需要额外改设计,扩展性更强。 - 务必做好权限校验:仅允许当前登录的用户查询自己相关的拉黑状态,避免越权查询其他用户的隐私数据。
额外说明
如果后续你需要同时返回双向拉黑状态(比如同时返回「用户2是否拉黑用户1」「用户1是否拉黑用户2」),可以把返回结构调整为:
{ "youAreBlocked": true, "youBlockedThem": false }
完全不需要调整接口路径,兼容性很好。
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

