OkHttp

똘이주인·2021년 8월 9일
0
  • OkHttp는 Square에서 제공하는 오픈소스 프로젝트이며 동기, 비동기 방식을 각각 제공해줌으로서 개발자가 선택하여 사용할 수 있다.
  • OkHttp는 HTTP 및 HTTP/2 통신을 보다 쉽게 할 수 있도록 다양한 기능을 제공해주는 Android 및 Java 용 라이브러리
  • 최신 http통신에 대해 간편히 하고 데이터와 미디어를 교환 하는 방법이며 구성에 도움을 주는 라이브러리

GET

[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

[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 처리하는 것이 편하다.

  • Application Interceptors : Application과 OKHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Request시 추가적인 비즈니스 로직을 공통적으로 수행해야 되는경우 로그 등)
  • Network Interceptors : Network와 OkHttp 사이에 Requests, Responses 정보를 intercept하여 추가적으로 처리. (예: Network의 Responses 정보를 보고 retry할지 여부 등)
  1. 기본 설정값 : OKHttp는 강력한 기본값들이 잘 설정되어 있다. (사용자가 관련 내용을 수정할 수 있다)

3. Retofit은 OkHttp위에서 돈다.

0개의 댓글