Recent Posts
Recent Comments
Link
06-28 05:11
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

OkHttp 를 이용한 REST Client 구현 예제 본문

DEV&OPS/Java

OkHttp 를 이용한 REST Client 구현 예제

ALEPH.GEM 2022. 5. 26. 17:41

REST Client

REST API를 이용하여 서버가 리소스를 제공하는 경우 클라이언트 측에서 리소스를 받기 위해 REST Client API가 필요합니다.

그중 하나인 OkHttp 라이브러리를 이용해 JAVA용 REST Client를 구현하는 예제를 소개합니다.

 

OkHttp

OkHttp는 Square 에서 만든 간편하게 REST API나 http기반의 요청 응답을 처리할 수 있는 라이브러리입니다.

오픈소스로 공개된 소프트웨어입니다. https://github.com/square/okhttp

 

GitHub - square/okhttp: Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

Square’s meticulous HTTP client for the JVM, Android, and GraalVM. - GitHub - square/okhttp: Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

github.com

 

Maven 설정

	<dependency>
	    <groupId>com.squareup.okhttp</groupId>
	    <artifactId>okhttp</artifactId>
	    <version>2.7.5</version>
	</dependency>

	<dependency>
	    <groupId>com.squareup.okio</groupId>
	    <artifactId>okio</artifactId>
	    <version>1.6.0</version>
	</dependency>

Maven에서 okhttp 라이브러리만 추가해도 됩니다. 하지만 okhttp는 okio 라이브러리에 의존성이 있습니다.

그래서 수동으로 jar를 추가할 땐 둘 다 다운받아서 라이브러리 경로에 추가해야 합니다.

최신 버전은 3.X 버전이지만 okio 버전 호환 문제가 있어서 여기서는 버전이 호환되는 okhttp 2.7.5와 okio 1.6.0으로 작업하겠습니다.

 

GET 구현 예제

import com.squareup.okhttp.*;

public class REST {

public void callGET(){
    try{
    	//인스턴스를 생성합니다.
    	OkHttpClient client = new OkHttpClient();
        //get방식은 URL로 parameter를 전송합니다.
        String strURL = "http://RESTAPI경로/?param1= ..."
        //GET요청을 위한 build 작업을 합니다.
        Request.Builder builder = new Request.Builder().url(strURL).get();
        //json을 주고받는 경우, 헤더에 추가합니다.
        builder.addHeader("Content-type", "application/json");
        //request 객체를 생성합니다.
        Request request = builder.build();
        //request를 요청하고 그 결과를 response 객체로 응답을 받습니다.
        Response response = client.newCall(request).execute();
        //응답처리
        if(response.isSuccessful()){
       		ResponseBody body = response.body();
        	responseString = body.string();
        	System.out.println("[responseBody]:"+responseString);
           	body.close();
        }
    }catch(Exception e){
    	e.printStrackTrace();
    }
}

 

POST 예제

import com.squareup.okhttp.*;

public class REST {

public void callPOST(){
    try{
    	//인스턴스를 생성합니다.
    	OkHttpClient client = new OkHttpClient();
        //URL
        String strURL = "http://RESTAPI경로";
        //parameter를 JSON object로 전달합니다
        String strBody = "{\"parameter\":\"NA\"}";
        //POST요청을 위한 request body를 구성합니다.
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), strBody);
        //POST요청을 위한 build작업
        Request.Builder builder = new Request.Builder().url(strURL).post(requestBody);
        //json을 주고받는 경우, 헤더에 추가
        builder.addHeader("Content-type", "application/json");
        //request 객체를 생성
        Request request = builder.build();
        //request를 요청하고 그 결과를 response 객체로 응답을 받음.
        Response response = client.newCall(request).execute();
        //응답처리
        if(response.isSuccessful()){
       		ResponseBody body = response.body();
        	responseString = body.string();
        	System.out.println("[responseBody]:"+responseString);
            	body.close();
        }
    }catch(Exception e){
    	e.printStrackTrace();
    }
}

 

PUT이나 DELETE 의경우도 POST와 유사하게 메서드 이름만 바꿔서 구현하면 됩니다.

 

비동기 요청

비동기로 요청하려면 execute() 대신 enqueue()으로 요청하면 됩니다.

Callback은 인터페이스로 다음 메서드를 구현해야 합니다.

public interface Callback{
	void onFailure(Call call, IOException e);
	void onResponse(Call call, Response response) throws IOException;
}
client.newCall(request).enqueue(new Callback(){
    @Override
    public void onFailure(Call call, IOException e){
    	System.err.println("error");
    }
    @Override
    public void onResponse(Call call, Response response) thorws IOException{
        ResponseBody body = response.body();
        System.out.println(body.string());
        body.close();
    });

 

More REST Client options

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

Servlet request response  (0) 2022.06.08
자바 웹 어플리케이션  (0) 2022.06.02
byte 와 16진수(Hex) String 변환  (0) 2022.05.26
BASE64 (64진법)  (2) 2022.05.26
NIO TCP 비동기 채널방식 채팅 서버/클라이언트  (0) 2022.05.26