retrofit

Square(https://squareup.com/)는 가장 핫한 기업중 하나이다. 트위터의 창립자인 잭 도시(Jack Dorsey)가 다양한 모바일 기기에서 신용카드 결제를 할 수 있는 서비스를 만들었고 그게 스퀘어이다.

그리고 스퀘어에서 다양한 오픈소스를 내놓았고, 요즘 많이 소개되고 있는듯하다. 그 중에서도 네트워크 라이브러리인 retrofit(https://github.com/square/retrofit) 에 대해서 알아보자.

보통 네트워크 관련 코드를 작성하다보면,

1. 네트워크 통신 작업 ( 소켓연결, 데이터 업다운로드, 소켓종료 )
2. 데이터 객체를 마셜링, 언마셜링 작업

2가지로 나누어 볼 수 있다. retrofit을 사용하면 이러한 작업을 대폭적으로 줄여줄 수 있다.

예를들어, Github API(http://developer.github.com/v3/users)를 사용하여 사용자 정보를 가져오는 코드를 작성한다고 생각해보자.

사용자 정보는 아래와 같은 JSON 형태로 데이터가 전달된다.

{
  "login": "octocat",
  "id": 1,
  "avatar_url": "https://github.com/images/error/octocat_happy.gif",
  "gravatar_id": "somehexcode",
  "url": "https://api.github.com/users/octocat",
  "name": "monalisa octocat",
  "company": "GitHub",
  "blog": "https://github.com/blog",
  "location": "San Francisco",
  "email": "octocat@github.com",
  "hireable": false,
  "bio": "There once was...",
  "public_repos": 2,
  "public_gists": 1,
  "followers": 20,
  "following": 0,
  "html_url": "https://github.com/octocat",
  "created_at": "2008-01-14T04:33:35Z",
  "type": "User"
}

그리고 요청하는 URL은 https://api.github.com/users/{user_id} 형태이다. JSON 데이터 중에서 필요한 데이터를 객체로 만든다.

class User {
  String id;
  String login;
  String name;
  String blog;
  String avatar_url;
}

그리고, 실제로 RESTFul 통신을 할 인터페이스를 만들자. https://api.github.com 제외한 URI를 Http Method와 함께 기술하고 파라미터로 받는 데이터는 어노테이션으로 기술하면 된다. 코드는 다음과 같다.

interface GitHub {
 @GET("users/{id}")
 User getUser(@Named("id") String id);

 @GET("users/{id}/followers")
 List getFollowers(@Named("id")   
 String id);

 @GET("users/{id}/following")
 List getFollowing(@Named("id") 
 String id);
}

실제 사용은 RestAdapter의 create 메소드를 통해서 인터페이스를 네트워크 통신과 객체마셜링, 언마셜링을 할 수 있는 객체로 반환받아 그냥 사용하기만 된다.

RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(new Server(“https://api.github.com/”))
.setClient(new DefaultHttpClient())
.setConverter(new GsonConverter(new Gson()))
.build();

GitHub github = restAdapter.create(GitHub.class);
User me = github.getUser("realbeast");

List followers = github.getFollowers("realbeast");
for(User user : followers) {
  System.out.println(user.login);
}
    
List following =   github.getFollowing("realbeast");
for(User user : following) {
  System.out.println(user.login);
}

일반적인 웹어플리케이션을 만들때도 좋고, 안드로이드 어플리케이션에서도 사용가능하다.

retrofit”에 대한 1개의 생각

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중