본문 바로가기
공부하는 하스씨/안드로이드

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

by 박하스. 2015. 9. 11.
728x90
반응형

원글 링크 - http://gun0912.tistory.com/30







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에서 사용할수있는 모든 방식은 공식홈페이지에서 확인해 보실 수 있습니다.

728x90
반응형