https://docs.github.com/ko/rest?apiVersion=2022-11-28
통합을 만들고, 데이터를 검색하고, 워크플로를 자동화하고, GitHub REST API를 사용하여 빌드합니다.
docs.github.com](https://docs.github.com/ko/rest?apiVersion=2022-11-28)
Java에서 GitHub REST API를 사용하는 방법에 대해 정리해봤습니다.
깃허브 API 말고도 다른 API에 요청을 보낼 때에도 응용할 수 있습니다.
의존성 추가
먼저 HTTP 요청을 보내기 위해 build.gradle 파일에 의존성을 추가합니다.
(원래 있는 코드는 삭제하지 않고 중괄호 안 코드만 추가합니다.)
dependencies {
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.13'
}
유저 정보 받기
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class GitHubApiClient {
public static void main(String[] args) {
String token = "깃허브에서 발급받은 토큰";
String userName = "유저 아이디";
String apiUrl = "https://api.github.com/users/" + userName;
// userName의 user정보를 가져옴
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(apiUrl);
// 토큰이 있어야 요청을 보낼 수 있음
httpGet.addHeader("Authorization", token);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
// 요청에 대한 응답 코드 받기
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { // 200 ok 코드라면
// 응답에서 객체를 가져오고
HttpEntity entity = response.getEntity();
// 그 객체를 문자열로
String responseBody = EntityUtils.toString(entity);
//유저 정보 출력
System.out.println("User Information:\n" + responseBody);
} else {
// 200 ok가 아니라면 상태 코드 출력
System.err.println("HTTP Error: " + statusCode);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
위 코드는 userName의 user 정보를 받아오는 코드입니다.
코드 안 주석에 자세한 설명을 드렸습니다.
응답 받은 json을 클래스로 변환하기
의존성 추가하기
build.gradle 파일에 의존성을 추가합니다.
(원래 있는 코드는 삭제하지 않고 중괄호 안 코드만 추가합니다.)
dependencies {
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.8' // Use the latest version
}
저장할 객체 만들기
import com.google.gson.annotations.SerializedName;
public class GitHubUser {
private String login;
private String name;
private String bio;
//Getter와 Setter
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
}
저는 유저 정보에서 login, name, bio만 저장해보도록 하겠습니다.
gson으로 직렬화 하기
import com.google.gson.Gson;
public class GitHubApiClient {
public static void main(String[] args) {
String token = "토큰";
String userName = "유저 아이디";
String apiUrl = "https://api.github.com/users/username";
try {
String jsonResponse = sendAuthenticatedGetRequest(apiUrl, token);
// gson으로 직렬화 하기
Gson gson = new Gson();
GitHubUser gitHubUser = gson.fromJson(jsonResponse, GitHubUser.class);
// 확인하기
System.out.println("GitHub User Information:");
System.out.println("Login: " + gitHubUser.getLogin());
System.out.println("Name: " + gitHubUser.getName());
System.out.println("Bio: " + gitHubUser.getBio());
} catch (Exception e) {
e.printStackTrace();
}
}
private static String sendAuthenticatedGetRequest(String apiUrl, String token) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(apiUrl);
httpGet.addHeader("Authorization", token);
CloseableHttpResponse response = httpClient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { // 200 OK
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
} else {
throw new Exception("HTTP Error: " + statusCode);
}
}
}
lombok 사용해서 리팩토링
아까 만든 객체를 롬복을 사용해 다시 짜보도록 하겠습니다.
의존성 추가
build.gradle 파일에 의존성을 추가합니다.
(원래 있는 코드는 삭제하지 않고 중괄호 안 코드만 추가합니다.)
dependencies {
implementation group: 'org.projectlombok', name: 'lombok', version: '1.18.22' // Use the latest version
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.22'
testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.22'
}
객체에 적용하기
import com.google.gson.annotations.SerializedName;
import lombok.Data;
@Data
public class GitHubUser {
@SerializedName("login")
private String login;
@SerializedName("name")
private String name;
@SerializedName("bio")
private String bio;
}
훨씬 단순해졌죠?
지금까지 자바에서 깃허브 API 요청 보내는 방법을 살펴보았습니다.
'Programming Language > Java' 카테고리의 다른 글
[Java] 컬렉션 프레임워크의 HashSet과 HashMap, HashTable과 Hashing이란 (0) | 2024.05.06 |
---|---|
[Java] Lombok 제대로 알아보기 (0) | 2023.08.22 |
[Java] Github API 사용하기 (0) | 2023.08.20 |
[JAVA] 소켓 프로그래밍, TCP 소켓 프로그래밍 (0) | 2023.07.19 |
[JAVA] 네트워킹 이해하기 & InetAddress (0) | 2023.07.18 |