본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

[JAVA] 자바에서 REST API 구현하기

by 미노드 2023. 7. 20.

자바로 Rest API를 구현할 수 있다.

일반적으로 Spring 프레임워크 기반에서 구현하는데, 어떤 방식으로 구현하는걸까?

1.HttpURLConnection
2
.HttpClient
3.스프링 RestTemplate

[sample Code]
1.HttpURLConnection 방식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
URL url = new URL("요청하고 싶은 url");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
//인증방식에는 두가지가 있다.
//1. 토큰 방식
//2. ID / PW 를 Base64 로 인코딩하는 방식
 
//1.id / pw 방식
//아이디와 비밀번호를 아래와 같은 방식으로 String 에 넣는다.
//String auth = "awxapi:ds2pass1!";
//byte[] authEncBytes = Base64.encodeBase64(auth.getBytes());
//String authStringEnc = new String(authEncBytes);
 
//Basic 한칸 뛰고 인코딩된 id /pw
//conn.setRequestProperty("Authorization","Basic "+authStringEnc);
 
//2. 토큰 방식
String AwxHeaderToken = "Bearer "+"토큰값"
 
conn.setRequestProperty("POST");
conn.setRequestProperty("Authorization",AwxHeaderToken);
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestProperty("Accept","application/json");
conn.setConnectTimeout(5000);
conn.setDoOutput(true);
 
//요청시 body 사용할경우
OutputStream os = conn.getOutputStream();
os.write(epReqBody.getBytes());
os.flush();
conn.connect();
 
System.out.println(conn.getResponseMessage());
int responseCode = conn.getResponseCode();
cs

2.HttpClient 방식

[GET]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void get(String requestURL) {
    try {
        HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성
        HttpGet getRequest = new HttpGet(requestURL); //GET 메소드 URL 생성
        getRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력
 
        HttpResponse response = client.execute(getRequest);
 
        //Response 출력
        if (response.getStatusLine().getStatusCode() == 200) {
            ResponseHandler<String> handler = new BasicResponseHandler();
            String body = handler.handleResponse(response);
            System.out.println(body);
        } else {
            System.out.println("response is error : " + response.getStatusLine().getStatusCode());
        }
 
    } catch (Exception e){
        System.err.println(e.toString());
    }
}
cs

[POST]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void post(String requestURL, String jsonMessage) {
    try {
        HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성
        HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성
        postRequest.setHeader("Accept""application/json");
        postRequest.setHeader("Connection""keep-alive");
        postRequest.setHeader("Content-Type""application/json");
        postRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력
        //postRequest.addHeader("Authorization", token); // token 이용시
 
        postRequest.setEntity(new StringEntity(jsonMessage)); //json 메시지 입력
        HttpResponse response = client.execute(postRequest);
 
        //Response 출력
        if (response.getStatusLine().getStatusCode() == 200) {
            ResponseHandler<String> handler = new BasicResponseHandler();
            String body = handler.handleResponse(response);
            System.out.println(body);
        } else {
            System.out.println("response is error : " + response.getStatusLine().getStatusCode());
        }
 
      } catch (Exception e){
        System.err.println(e.toString());
    }
}
cs

 

3.스프링 RestTemplate

[POST]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@PostMapping(value= "/responsecheck")
public ResponseEntity responseEntityCheck(@RequestHeader String co1,
                            @RequestBody String bo1)  {
    // body영역(별도 약속된 class를 만들면 됨)
    // headers영역(HttpHeaders 객체 사용)
    // status영역(http status 코드 사용, 상황에 맞춰 적용 가능)
 
    HttpHeaders headers= new HttpHeaders();
    headers.setContentType(new MediaType("application""json", Charset.forName("UTF-8")));
    headers.add("co1", co1);
    headers.add("co2", co2);
    headers.add("co3""accumpany");
 
    ResponseBodyVO responseBody = new ResponseBodyVO();
    responseBody.setCode(co2);
    responseBody.setMessage(bo1.toString());
    responseBody.setStatus(HttpStatus.OK.toString());
 
    // 200 return
    ResponseEntity result = new ResponseEntity(responseBody, headers, HttpStatus.OK);
    // 503 return
    // ResponseEntity result = new ResponseEntity(responseBody, headers, HttpStatus.SERVICE_UNAVAILABLE);
 
    // return 예시
    // return new ResponseEntity(HttpStatus.OK);
    // return new ResponseEntity(bo1, HttpStatus.SERVICE_UNAVAILABLE);
    // return new ResponseEntity(responseBody, headers, HttpStatus.SERVICE_UNAVAILABLE);
 
    return result;
}
 
public class ResponseBodyVO {
    private String code;
    private String message;
    private String status;
}
cs