박상권의 삽질블로그

[안드로이드/Android]유용한 라이브러리 - Retrofit(REST API 통신) 본문

IT/Android-TIP (한글)

[안드로이드/Android]유용한 라이브러리 - Retrofit(REST API 통신)

박상권 2015. 8. 14. 09:11

안드로이드 개발자들이 모여있는 오픈채팅방에 참여해보세요 .
Q&A 및 팁을 공유하는 방입니다..
오픈채팅방 참여



블로그를 Medium으로 옮겨서 운영하고 있습니다.
앞으로 새로운 글은 모두 미디엄 블로그를 통해서 올릴 예정입니다.
미디엄에서 다양하고 유익한 포스팅을 살펴보세요
미디엄 블로그 보기






Retrofit 라이브러리는 제가 사랑하는 Square라는 회사에서 만든 REST API통신을 위한 Android/JAVA 라이브러리 입니다.



유틸리티 어플리케이션이 아닌 좀더 큰 범위의 서비스를 사용한다면 클라이언트 <-> 서버 통신은 빼놓을수 없이 구현해야 할것입니다.

그만큼 안드로이드 어플리케이션에서는 서버와의 통신이 많을것이고 이를 잘 다루어야 합니다.


AsyncTask,HttpUrlConnection을 사용해서 직접 네트워크 통신을 구현하려면 여러가지 귀찮은 작업들이 많습니다.

1. 네트워크 통신 연결/해제

2. 가져온 데이터 파싱

3. Json통신의 경우, Json데이터<-> Class 변환

4. 각종 에러처리






API통신을 이용하는 서비스에서 정말 편하게 사용할 수 있는 Retrofit을 소개해드립니다.



사용 예시



GitHub에서 특정 사용자의 repository 목록을 가져오는 통신이 있다고 가정해보겠습니다.

API주소는 'http://api.github.com/users/사용자 ID/repos' 입니다.

만약 사용자 ID에 ParkSangGwon를 넣을경우 아래와 같은 리턴 Json값을 받아볼 수 있습니다.


[
{
"id": 35079604,
"name": "DLog",
"full_name": "ParkSangGwon/DLog",
"owner": {... },
"private": false,
...
},
{
"id": 35081014,
"name": "ObjectUtils",
"full_name": "ParkSangGwon/ObjectUtils",
"owner": {...},
"private": false,
...

},
{
"id": 35081259,
"name": "UpdateCheck",
"full_name": "ParkSangGwon/UpdateCheck",
"owner": {...},
"private": false,
...
}
]





Retrofit을 사용하는 경우 통신방식에 대해 알아보겠습니다.





1. Interface Class 선언하기



user를 파라미터로 받아 API URL을 완성해서 GET방식으로  요청할 것입니다.


public interface GitHubService {
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
}












2. Interface Class 구현하기


Retrofit에서 제공하는 restAdapter를 이용해서 Base URL(https://api.github.com)을 지정해주고 GitHubService 변수를 만들어 줍니다.


RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();

GitHubService service = restAdapter.create(GitHubService.class);











3. Repo클래스 만들기


앞서 예시에서 호출했을때 나온 json을 받아줄 클래스를 생성해줍니다.

json의 키에 해당하는 값들을 변수 이름으로 지정해주면 됩니다.



public class Repo {

int id;
String name;
String full_name;
...

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getFull_name() {
return full_name;
}

public void setFull_name(String full_name) {
this.full_name = full_name;
}
}











4. 서비스 호출해서 리스트 가져오기


1번에서 선언한 함수를 사용하면 3번의 Repo클래스들의 리스트형태를 결과로 받아 볼수 있습니다.



List<Repo> repos = service.listRepos("ParkSangGwon");














물론 GET방식 이외에도 POST,PUT,DELETE,HEAD등의 다양한 Request방식을 지원합니다.

GET방식의 경우 위의 예제방식 이외에도 Query방식으로도 호출할수 있습니다.


Retrofit에서 사용할수있는 모든 방식은 공식홈페이지에서 확인해 보실 수 있습니다.





Retrofit을 활용한 다른 유용한 팁들이 궁금하시다면 아래 포스팅을 참고하세요

[안드로이드]Retrofit에서 Interceptor를 이용해 쿠키/세션 유지하는 방법



Comments