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

在一些实际情况中,希望能够直接像读取本地文件一样读取远程仓库中的文件内容,避免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࿰

你可能感兴趣的:(api获得全部项目,调用gitlab)