api获得全部项目 调用gitlab_使用GitLabApi获取远程仓库中的文件内容

本文详细介绍了如何利用GitLab API 来获取远程仓库的文件内容,包括分析所需的API接口,获取用户private token,获取项目ID,以及如何获取文件内容。整个流程涉及到POST和GET请求,通过RestTemplate进行HTTP调用,并对返回的Base64编码内容进行解码,最终获取到原始文件内容。
摘要由CSDN通过智能技术生成

在一些实际情况中,希望能够直接像读取本地文件一样读取远程仓库中的文件内容,避免git操作失败的情况下读取的本地缓存的文件内容。由于项目使用gitLab管理配置文件,查询了GitLabApi,其提供了诸多API接口,包括常见的git操作、项目管理以及我们需要的获取文件内容等接口。

1.接口分析

查询GitLab api,可以容易找到获取文件内容的API文档:GitLab获取仓库中文件内容,可以发现,其格式要求为:

GET /projects/:id/repository/files/:file_path

curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' 'https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master'

通过分析可以发现,如果想获取仓库中文件内容,需要以下几个要素:

仓库地址

项目id

用户的private token

经过url编码的文件全路径

文件所在的分支

由此,我在实现时将API接口整理为一个常量:

private static String GITLAB_FILECONTENT_API = "http://#{REPO_IP}/api/v3/projects/#{PROJECT_ID}/repository/files?private_token=#{PRIVATE_TOKEN}&file_path=#{FILE_PATH}&ref=#{BRANCH_NAME}";

2.获取用户的private token

GitLabApi关于获取个人口令的API可以整理为常量类:

private static String GITLAB_SESSION_API = "http://#{REPO_IP}/api/v3/session?login=#{USER_NAME}&password=#{PASSWORD}";

提供如下3个变量即可获取指定用户的token:

仓库地址

用户名

密码

经过简单的json解析就能获取到结果,代码如下:

/**

* 根据用户名称和密码获取gitlab的private token,为Post请求

*

* @param ip gitlab仓库的ip

* @param userName 登陆gitlab的用户名

* @param password 登陆gitlab的密码

* @return 返回该用户的private token

*/

public static String getPrivateTokenByPassword(String ip, String userName, String password) {

/** 1.参数替换,生成获取指定用户privateToken地址 */

// 校验参数

Objects.requireNonNull(ip, "参数ip不能为空!");

Objects.requireNonNull(userName, "参数userName不能为空!");

Objects.requireNonNull(password, "参数password不能为空!");

// 参数准备,存入map

Map params = new HashMap(4);

params.put("REPO_IP", ip);

params.put("USER_NAME", userName);

params.put("PASSWORD", password);

// 调用工具类替换,得到具体的调用地址

String reqUserTokenUrl = PlaceholderUtil.anotherReplace(GITLAB_SESSION_API, params);

sysLogger.debug(String.format("获取用户:%s的private token地址为:%s", userName,reqUserTokenUrl));

/** 2.访问url,获取指定用户的信息 */

RestTemplate restTemplate = new RestTemplate();

ResponseEntity response = restTemplate.postForEntity(reqUserTokenUrl, null,String.class);

sysLogger.debug(String.format("响应头为:%s,响应体为:%s", response.getHeaders(), response.getBody()));

/** 3.解析结果 */

String body = response.getBody();

JSONObject jsonBody = JsonUtil.parseObjectToJSONObject(body);

String privateToken =jsonBody.getString("private_token");

sysLogger.debug(String.format("获取到用户:%s的privateToken为:%s", userName, privateToken));

/** 4.返回privateToken */

return privateToken;

}

注意,这个接口时POST请求,正确的HTTP响应码是201࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值