调用GitLab MR讨论API时缺失主线评论问题咨询
回答
这个现象不属于GitLab的预期设计行为。你调用的GET /projects/:id/merge_requests/:merge_request_iid/discussions接口本身覆盖MR下全类型讨论内容,既包含绑定代码行的行内评论,也包含MR主页面的主线直接评论、所有层级的评论回复。拿不到主线评论基本是以下两个原因导致的:
- 未处理接口分页
GitLab所有列表类API默认单页仅返回20条记录,默认按讨论创建时间倒序排列。如果目标MR的行内评论总数超过20条,创建时间更早的主线评论会被划分到后续分页中,仅请求第一页数据自然拿不到这部分内容。
修复方式:调用时添加per_page=100参数提升单页返回上限,同时根据响应头携带的x-next-page字段循环拉取所有分页,即可拿到全量讨论数据。 - 响应解析逻辑错误过滤了主线评论
两类评论在接口返回结构中有明确标识差异:- 行内评论:条目会携带
position字段,记录评论绑定的代码文件、行号、对应提交版本等位置信息 - 主线评论:条目无
position字段,单条未回复的主线评论individual_note字段值为true
不少开发者写解析逻辑时会默认只处理带position字段的条目,直接把主线评论筛掉了,最终就只拿到了行内评论。
- 行内评论:条目会携带
如果要快速验证,你可以新建一个还没有任何行内评论的测试MR,在主线发一条直接评论后再调用接口,就能看到这条主线评论正常出现在响应里。
内容的提问来源于stack exchange,提问作者Roberto Morávia
相关产品推荐
相关产品推荐

