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());
}
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());
}
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 처리하는 것이 편하다.
- Application Interceptors : Application과 OKHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Request시 추가적인 비즈니스 로직을 공통적으로 수행해야 되는경우 로그 등..)
- Network Interceptors : Network와 OkHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Network의 Responses 정보를 보고 retry할지 여부 등..)
- 구현 참고 : https://developer88.tistory.com/m/67?category=219605
2. 기본 설정값 : OKHttp는 강력한 기본값들이 잘 설정되어 있음. (사용자가 관련 내용을 수정할 수 있음)
3. Retofit은 OkHttp위에서 돈다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA8] Lambda(람다)에서 지역변수 사용하기 (0) | 2019.04.17 |
---|---|
[JAVA8] 함수형 인터페이스 정리 (0) | 2019.04.15 |
[JAVA] HttpClient로 REST API 호출하기 (0) | 2019.01.18 |
[JAVA] HttpURLConnection로 REST API 호출하기 (0) | 2019.01.18 |
[JAVA] REST API Client Library 알아보기 in Java Project (0) | 2019.01.17 |