본문 바로가기

JAVA

[JAVA] OkHttp로 REST API 호출하기

728x90
반응형


Android에서 많이 사용하고 있는 OkHttp에 대해 알아보자. OkHttp는 Square에서 제공하는 오픈소스 프로젝트이며 동기, 비동기 방식을 각각 제공해줌으로서 개발자가 선택하여 사용할 수 있다.


[GET 동기]

public void get(String requestURL) {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.build(); //GET Request

//동기 처리시 execute함수 사용
Response response = client.newCall(request).execute();

//출력
String message = response.body().string();
System.out.println(message);
} catch (Exception e){
System.err.println(e.toString());
}

}

[GET 비동기]

public void get(String requestURL) {

try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.build();

//비동기 처리 (enqueue 사용)
client.newCall(request).enqueue(new Callback() {
//비동기 처리를 위해 Callback 구현
@Override
public void onFailure(Call call, IOException e) {
System.out.println("error + Connect Server Error is " + e.toString());
}

@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("Response Body is " + response.body().string());
}
});

} catch (Exception e){
System.err.println(e.toString());
}
}

[POST 동기]

public void post(String requestURL, String jsonMessage) {
try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.post(RequestBody.create(MediaType.parse("application/json"), jsonMessage)) //POST로 전달할 내용 설정
.build();

//동기 처리시 execute함수 사용
Response response = client.newCall(request).execute();

//출력
String message = response.body().string();
System.out.println(message);

} catch (Exception e) {
System.err.println(e.toString());
}

}

[POST 비동기]

public void post(String requestURL, String message) {

try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.post(RequestBody.create(MediaType.parse("application/json"), message))
.build();

//비동기 처리 (enqueue 사용)
client.newCall(request).enqueue(new Callback() {
//비동기 처리를 위해 Callback 구현
@Override
public void onFailure(Call call, IOException e) {
System.out.println("error + Connect Server Error is " + e.toString());
}

@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("Response Body is " + response.body().string());
}
});

} catch (Exception e) {
System.err.println(e.toString());
}
}

• 동기 처리를 하고자 한다면 execute를 사용하면 되고 비동기 처리를 원한다면 enqueue를 사용하면 됩니다.


HttpURLConnection과 HttpClient에 비해 상당히 직관적이고 사용하기도 편리합니다. 동기와 비동기 처리를 아주 쉽게 할 수 있다는 점이 인상적이였습니다.


[OkHttp 장점]

1. Interceptor 처리하는 것이 편하다. 

  1. Application Interceptors : Application과 OKHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Request시 추가적인 비즈니스 로직을 공통적으로 수행해야 되는경우 로그 등..)
  2. Network Interceptors : Network와 OkHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Network의 Responses 정보를 보고 retry할지 여부 등..)
  3. 구현 참고 : https://developer88.tistory.com/m/67?category=219605
2. 기본 설정값 : OKHttp는 강력한 기본값들이 잘 설정되어 있음. (사용자가 관련 내용을 수정할 수 있음)
3. Retofit은 OkHttp위에서 돈다. 


728x90
반응형