자바뿐만아니라 여러 언어에서 자주 등장하는 'API' 를 다루는 방법을 알아보도록 하겠습니다.
보통 API를 조금 더 상세하게 설명한다면 REST API라고 불립니다.
REST API란?
REST(Representational State Transfer)란 월드 와이드 웹(www)과 같은 분산 하이퍼미디어 시스템의 한 형식입니다.
주고받는 자원(Resource)에 이름을 규정하고 URL에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미합니다.
API(Application Programming Interface)는 애플리케이션에서 제공하는 인터페이스를 의미하며 API를 통해 서버 또는 프로그램 사이를 연결할 수 있게 합니다.
REST API는 RSET의 설계를 따르는 시스템이며 애플리케이션과 연결할 수 있도록 하는 인터페이스라고 볼 수 있습니다.
REST 아키텍처를 올바르게 구현하는 웹 서비스를 RESTful이라고도 불립니다.
보통 자바에서는 보안적인 측명때문에 HTTP 메서드를 GET보단 POST 형태로 많이 주고 받고 있습니다.
그래서 HTTP 메서드의 POST 형태로 서버에서 응답을 받거나 요청을 하는 두가지 경우에 대해 정리해보겠습니다.
Java API 서버에서 응답&요청 2가지 예제 코드
Java API 서버에서 요청을 하는 경우
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
@Override
public String getApiValue() throws Exception {
URL url = null;
OutputStream outputStream = null;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
HttpURLConnection urlConnection = null;
String apiUrl = "";
String returnVal = "";
String readLine = null;
StringBuilder buffer = null;
JSONObject jsonSendData = new JSONObject();
JSONObject jsonObject = new JSONObject();
int connTimeout = 5000;
int readTimeout = 3000;
apiUrl = "URL";
buffer = new StringBuilder();
try
{
url = new URL(apiUrl);
urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setConnectTimeout(connTimeout);
urlConnection.setReadTimeout(readTimeout);
urlConnection.setRequestProperty("Authorization", "Authorization Value");
urlConnection.setRequestProperty("Content-Type", "application/json;");
urlConnection.setDoOutput(true);
urlConnection.setInstanceFollowRedirects(true);
outputStream = urlConnection.getOutputStream();
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
bufferedWriter.write(jsonSendData.toString());
bufferedWriter.flush();
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
while((readLine = bufferedReader.readLine()) != null) {
buffer.append(readLine).append("\n");
}
JSONObject jsonObject = JSONObject.fromObject(buffer.toString());
//응답 메세지가 복수 객체일 경우
jsonObject = JSONObject.fromObject(buffer.toString());
JSONObject jsonObjectSub = (JSONObject) jsonObject.get("data");
returnVal = (String) jsonObjectSub.get("access_token");
//응답 메세지가 단일 객체일 경우
String message = (String) jsonObject.get("message");
}catch(Exception ex) {
ex.printStackTrace();
}finally{
try{
if (bufferedWriter != null) { bufferedWriter.close(); }
if (outputStream != null) { outputStream.close(); }
if (bufferedReader != null) { bufferedReader.close(); }
}catch(Exception ex){
ex.printStackTrace();
}
}
urlConnection.disconnect();
return returnVal;
}
|
cs |
코드가 길지만 간략하게 설명해보겠습니다.
apiUrl에 보낼 URL 주소를 넣고
HttpURLConnection클래스를 통해 HTTP 프로토콜을 이용하여
웹 서버와 통신을 이용하기 때문에 관련 정보를 넣어줍니다.
POST 데이터를 전송하기 위해 getOutputStream을 사용하여 출력 스트림을 설정하고
BufferedWriter를 통해 write 및 flush를 합니다.
그리고 bufferedReader.readLine()를 통해 데이터를 읽은 다음 StringBuilder객체를 통해 데이터를 담습니다.
그 이후는 StringBuilder객체에 담은 데이터를 입맛에 맞게 설정하시면 됩니다.
Java API 서버에서 응답을 받는 경우
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
37
38
39
40
41
42
43
|
@RequestMapping(value = "/index_CheckData.do", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public JSONObject index_CheckData(HttpServletRequest request,
HttpSession session,
HttpServletResponse response,
ModelMap model) throws Exception {
JSONObject obj = new JSONObject();
response.setContentType("application/json");
PrintWriter out = response.getWriter();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
StringBuilder builder = new StringBuilder();
String buffer;
while ((buffer = bufferedReader.readLine()) != null) {
if (builder.length() > 0) {
builder.append("\n");
}
builder.append(buffer);
}
String atr = builder.toString();
String Lot = "";
boolean dataError = false;
ObjectMapper mapper = new ObjectMapper();
try {
LOG_VO LOG_VO = mapper.readValue(atr, LOG_VO.class);
System.out.println(LOG_VO.getTEST_DATA());
} catch (Exception e) {
e.printStackTrace();
} finally {
bufferedReader.close();
}
return null;
}
|
cs |
이 코드는 HTTP 요청을 받아 JSON 형식의 응답을 생성하는 과정입니다.
produces = MediaType.APPLICATION_JSON_VALUE를 통해
특정 메서드가 JSON 형식으로 응답을 생성하도록 지정합니다.
응답의 컨텐츠 타입을 JSON으로 설정한 다음 PrintWriter 객체를 생성하여 응답을 작성합니다.
요청으로부터 입력 스트림을 가져와 BufferedReader로 감싼 후에
읽어들인 데이터를 StringBuilder에 추가한 합니다.
이후에는 역시 각자 상황에 맞게 활요하시면 됩니다.
많이 활용하는 REST API의 예제 코드를 통해 도움이 되셨으면 좋겠습니다.
'JAVA' 카테고리의 다른 글
[Java] 실시간 프로세스 바 구현 방법 (비동기 방식) (1) | 2024.12.05 |
---|---|
Java에서 데이터 호출 후 Python으로 AI 모델 생성 방법 (0) | 2024.07.10 |
[Java] 날짜 사이의 기간 데이터 구하는 방법 (0) | 2024.02.02 |
[Java] 프로그램 수행시간 측정방법 (0) | 2024.01.30 |
[Linux] Java 설치 및 환경변수 설정 방법 (0) | 2023.06.15 |
댓글