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

2023. 8. 21. 23:16·Programming Language/Java
목차
  1. 의존성 추가하기
  2. 저장할 객체 만들기
  3. gson으로 직렬화 하기
  4. lombok 사용해서 리팩토링
  5. 의존성 추가
  6. 객체에 적용하기

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 요청 보내는 방법을 살펴보았습니다.

'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
  1. 의존성 추가하기
  2. 저장할 객체 만들기
  3. gson으로 직렬화 하기
  4. lombok 사용해서 리팩토링
  5. 의존성 추가
  6. 객체에 적용하기
'Programming Language/Java' 카테고리의 다른 글
  • [Java] 컬렉션 프레임워크의 HashSet과 HashMap, HashTable과 Hashing이란
  • [Java] Lombok 제대로 알아보기
  • [Java] Github API 사용하기
  • [JAVA] 소켓 프로그래밍, TCP 소켓 프로그래밍
hurlud
hurlud
나와 같은 궁금증을 가진 사람들을 위해 오늘도! 🐥
  • hurlud
    주독야독
    hurlud
  • 전체
    오늘
    어제
  • 최근 글

    • ALL (106)
      • CS (13)
      • Linux (2)
      • Deploy (7)
        • AWS (6)
        • Docker (1)
      • IDE (13)
        • IntelliJ (5)
        • Android Studio (8)
      • DB (10)
        • MySQL (6)
        • MongoDB (4)
      • Programming Language (20)
        • JavaScript (10)
        • Java (8)
        • Python (2)
      • Framework (32)
        • Node.js (6)
        • SpringBoot (17)
        • React (6)
        • NestJS (2)
      • Git | Github (4)
      • ETC (5)
      • Akka (0)
  • 링크

    • 깃허브
  • hELLO· Designed By정상우.v4.10.0
hurlud
[Java] 자바에서 GitHub REST API 사용하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.