Programming Language/Java

[Java] 자바에서 GitHub REST API 사용하기

  • -

https://docs.github.com/ko/rest?apiVersion=2022-11-28

 

GitHub REST API 설명서 - GitHub Docs

통합을 만들고, 데이터를 검색하고, 워크플로를 자동화하고, GitHub REST API를 사용하여 빌드합니다.

docs.github.com

통합을 만들고, 데이터를 검색하고, 워크플로를 자동화하고, 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 요청 보내는 방법을 살펴보았습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.