Java 调用 GitLab API

前言:

上一篇我们使用了 webhook 的方式获取用户提交代码的信息,本篇我简单分享一下使用 GitLab API 来获取用户提交代码的信息。

业务分析:

我们需要统计每一个用户的提交代码的信息,那 GitLab 是否有这样的接口呢?GitLab API 官网如下:

GitLab API 官网

我简单的看了一下官网的 API,初步判断是没有直接查询用户的提交记录信息的 API,查询了很多资料也没有看到直接查询用户提交记录信息的 API,个人推断是没有该 API 的,那我们该如何获取用户的提交信息呢?

我这边简单调研了一下,可以通过以下步骤来获取用户提交信息

  1. 获取项目信息(每个项目都有自己的唯一项目id)。
  2. 根据项目信息获取分支信息。
  3. 根据分支信息获取分支提交信息。

代码演示

获取项目信息

java 复制代码
public void queryGitLabAllProject(String url) {
	//获取所有项目信息
	String baseUrl = "https://git.xxx.com/" + "api/v4/projects?per_page=100&page=1";
	baseUrl = String.format(baseUrl, 1775);
	Map<String, Object> params = new HashMap<>();
	params.put("page", 1);
	params.put("per_page", 1000);
	HttpResponse response = httpGet(baseUrl, params);
	String body = response.body();
	if (body == null) {
		throw new BusinessException("没有获取到任何项目信息");
	}
}

根据项目信息获取分支信息

java 复制代码
public void queryGitLabAllBranch() {
	//获取所有项目信息
	String baseUrl = "https://git.xxx.com/" + "api/v4/projects/%d/repository/branches";
	baseUrl = String.format(baseUrl, 2692);
	Map<String, Object> params = new HashMap<>();
	params.put("with_stats", true);
	params.put("page", 1);
	params.put("per_page", 1000);
	HttpResponse response = httpGet(baseUrl, params);
	String body = response.body();
	if (body == null) {
		throw new BusinessException("没有获取到任何分支信息");
	}
}

根据项目分支信息获取代码提交信息

java 复制代码
public void queryGitLabCommitsByBranch(String branchName) {
	Long projectId = 1775L;
	String baseUrl = "https://git.xxx.com/api/v4/projects/%d/repository/commits";
	baseUrl = String.format(baseUrl, 2692);
	Map<String, Object> params = new HashMap<>();
	params.put("ref_name", branchName);   // 指定分支名
	params.put("ref_name", "feature-xxxx/xxx-xxx-xxx");   // 指定分支名
	params.put("with_stats", true);
	params.put("page", 1);
	params.put("per_page", 100);
	HttpResponse response = httpGet(baseUrl, params);
	String body = response.body();
	if (body == null) {
		throw new BusinessException("没有获取到任何提交信息");
	}
}

获取到分支提交信息后,就可以对结果集进行分析,其中就包含用户代码提交信息,这里我只是简单的预研,并没有完整的代码。

我这里使用的是 hutool 工具包的 HttpRequest 完成 Http 调用的,代码如下:

java 复制代码
public HttpResponse httpGet(String url, Map<String, Object> body) {
	HttpRequest request = HttpRequest.get(url)
			.header(Header.CONTENT_TYPE, "application/json")
			.header("Private-Token", "xxxxxxxxx");// 设置授权头
	if (CollectionUtil.isNotEmpty(body)) {
		for (Map.Entry<String, Object> form : body.entrySet()) {
			request.form(form.getKey(), form.getValue());
		}
	}
	return request.timeout(20000).execute();
}

GitLab 创建个人访问令牌

  1. 登录 GitLab,点击右上角头像 → Settings。
  2. 左侧菜单选择 Access Tokens。
  3. 填写令牌名称和过期日期。
  4. 选择权限范围。
  5. 点击 Create personal access token 完成创建,同时立即复制生成的 Token 并保存好,因为页面刷新后将永远无法再次查看。

总结:本篇简单分享了如何使用 GitLab 的 API 获取用户提交信息,希望可以帮助到正需要的你,GitLab 还有很多 API 我没有时间去研究,你如果发现了更好的 API 调用方式,欢迎你的分享。

如有不正确的地方欢迎各位指出纠正。

相关推荐
葫芦和十三1 小时前
图解 MongoDB 05|文档模型设计:内嵌 vs 引用,反范式不是免费午餐
后端·mongodb·agent
不能放弃治疗5 小时前
单 Agent 实现模式
后端
IT_陈寒7 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
小bo波7 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
fliter7 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter8 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪9 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter9 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶9 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿9 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端