티스토리 뷰
반응형
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위에서 돈다.
반응형
'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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 데이터플랫폼설계
- 프로그램
- it
- AWS
- 머신러닝
- 자바
- 교육
- HttpClient
- Java
- rest api
- 소프트웨어
- 빅데이터
- ai
- Rest
- java8
- 데이터플랫폼
- llm
- 인공지능
- okhttp
- mlops
- SW
- HTTP
- 데이터파이프라인
- 텐서플로우
- Spring
- 딥러닝
- API
- http client
- tensorflow
- 소프트웨어교육
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함