자바로 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 |
'IT기술 > JAVA' 카테고리의 다른 글
[Java] 자바로 폴더(디렉토리) 생성하기 (0) | 2023.07.31 |
---|---|
[Java] 제네릭스(Generics) 개념 정리하기 (0) | 2023.07.21 |
[Java] 객체지향에 대한 5원칙 정리 (0) | 2023.07.20 |
[java] pojo란 무엇인가?(Plain Old Java Object) (0) | 2023.07.20 |
[Java] Java EE에서 Jakarta EE로의 전환 (0) | 2023.07.13 |