Sun Jersey로 RESTful 클라이언트 작성

Sun Jersey로 RESTful 클라이언트 작성

Jersey는 JAX-RS에 대한 오픈 소스 참조 구현이다. JSR-311에 요구스펙이 명세되어있다. 
Jersey 공식홈 에서  Archive를 다운로드 받을 수 있으며, 필요한 API들을 Include하는것 만으로 자바 기반의 RESTful 웹 서비스를 쉽게 만들 수 있다.
HTTP 프로토콜에 대해서 조금만 관심을 가졌던 사람이라면 누구나 직관적으로 사용할수 있도록 API가 추상화 되어있다.


  • Jersey Archive

현재 Jersey 홈페이지에서 다운받을수 있는 최선 버전은 1.5 이며, 다운 후 압축을 풀면 11개의 Archive가 나온다.
저는 귀찮아서 다 import했으므로, 좀더 경량화 된  구현물을 원하신다면 스펙을 보고 필요한것만 추가하길 권장합니다.
(jackson 도 들어있으므로 json을 쓰지 않거나, 특정 다른 json처리 api를 쓰는경우 빼셔도 무방합니다.)


  • Jersey 클라이언트 기초

Jersey 클라이언트 API를 사용하기 위해서는 Client 클래스의 객체를 생성해야한다.

import com.sun.jersey.api.client.Client;
Client client = Client.create();

Client 클래스는 jersey를 통해 RESTful 클라이언트를 구성하기 위한 기본객체이다. Client 클래스를 사용하여 클라이언트 기능을 구성하고 목표 RESTful 서비스 공급자를 지정한다.

클라이언트의 요청을 보내기위해서는 웹 리소스를 캡슐화하는 WebResouce개체를 만들어야 한다.

import com.sun.jersey.api.client.WebResource
WebResource webResource = client.resource(“http://yonghyun.net/restservice” );

이와 같이 정의한 후에는 해당 URI를 향해 HTTP GET, PUT, POST, DELETE Action을 요청할수 있다.  
(yonghyun.net에 restservice는 없는 SEI 입니다. 요청을 보내실경우 404 Error만 돌아올뿐입니다.
예제일 뿐이니 사용하고자 하는 SEI를 입력하시기 바랍니다. )

GET 요청 :  String s = webResource.get(String.class);

GET Action은 위와 같이 쉽게 보낼수 있고 Parameter Passing은 MultivaluedMap 클래스를 통해서 지정할수 있다.

MultivaluedMap queryParams = new MultivaluedMapImpl();
queryParams.add("param1", "val1");
queryParams.add("param2", "val2");
String s = webResource.queryParams(queryParams).get(String.class);
이는 다음과 같은 요청을 보내는 형태이다.
http://yonghyun.net/restservice?param1=val1&param2=val2


이와 같이 쉽게 클라이언트를 구성할수 있다. Jackson을 사용하여 JSON을 자바 객체로 파싱해 넣는다던지, BASE64 Encoding을 위한 Filter방법은 후에 업데이트 한다.