GithubApi 官方提供一了一些SDK,node仓库的好用一些,Java的也有官方推荐的,但是用的不是很多,所以还是决定自己写以下。
本文记录几个使用 RestTemplate
调用 GithubApi
的实例。
Java17
+ Springboot3.2+
java
/**
* 仓库发布信息列表查询URL
*/
private static final String RELEASE_LIST_URL = "https://api.github.com/repos/{user}/{repo}/releases";
/**
* 获取仓库Releases列表
*
* @param user user
* @param repo repo
* @param pageParam 分页参数
* @return List<GithubRelease>
*/
public static List<GithubRelease> getReleases(String user, String repo, Map<String, Object> pageParam) {
String url = RELEASE_LIST_URL
.replace("{user}", user)
.replace("{repo}", repo);
RestTemplate restTemplate = new RestTemplate();
// 请求信息封装
RequestEntity<Void> requestEntity = getRequestEntity(url, null, pageParam);
// 发送请求并获得响应
ResponseEntity<List<GithubRelease>> responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<List<GithubRelease>>() {
});
return responseEntity.getBody();
}
private static RequestEntity<Void> getRequestEntity(String url, Map<String, String> headerMap, Map<String, Object> param) {
HttpHeaders headers = new HttpHeaders();
if (AitLogProperties.getGithubToken() != null) {
headers.setBearerAuth(AitLogProperties.getGithubToken());
}
if (headerMap != null) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
headers.add(entry.getKey(), entry.getValue());
}
}
return new RequestEntity<>(headers, HttpMethod.GET, URI.create(url + mapToUrlParam(param)));
}
java /**
* 仓库基本信息查询URL
*/
private static final String REPO_INFO_URL = "https://api.github.com/repos/{user}/{repo}";
/**
* 获取仓库信息
*
* @param user GithubUser
* @param repo GithubRepo
* @return GithubRepository
*/
public static GithubRepository getRepoInfo(String user, String repo) {
String url = REPO_INFO_URL
.replace("{user}", user)
.replace("{repo}", repo);
return get(url, null, GithubRepository.class);
}
/**
* Get 请求封装
*
* @param url 请求地址
* @param param 请求参数
* @param clazz 响应数据实体类型
* @return 响应数据实体
*/
public static <T> T get(String url, Map<String, Object> param, Class<T> clazz) {
RestTemplate restTemplate = new RestTemplate();
RequestEntity<Void> requestEntity = getRequestEntity(url, null, param);
ResponseEntity<T> responseEntity = restTemplate.exchange(
requestEntity,
clazz
);
return responseEntity.getBody();
}
java /**
* Readme URL
*/
private static final String README_URL = "https://api.github.com/repos/{user}/{repo}/readme";
/**
* 获取一个仓库的Readme内容,以Html格式返回
*
* @param user the username of the repository owner
* @param repo the name of the repository
* @return the HTML content of the README file
*/
public static String getReadmeHtml(String user, String repo) {
String url = README_URL
.replace("{user}", user)
.replace("{repo}", repo);
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
// 设置请求头
if (AitLogProperties.getGithubToken() != null) {
headers.setBearerAuth(AitLogProperties.getGithubToken());
}
headers.setAccept(MediaType.parseMediaTypes("application/vnd.github.html+json"));
RequestEntity<Void> requestEntity = new RequestEntity<>(headers, HttpMethod.GET, URI.create(url));
// 发送请求并获得响应
ResponseEntity<String> responseEntity = restTemplate.exchange(
requestEntity,
String.class
);
return responseEntity.getBody();
}
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!