Retrofit2
안드로이드를 개발하다보니 API 를 호출하는 경우가 있는데 편하게 사용할 수 있는 라이브러리를 소개합니다.
Square사에 Jake Wharton이라는 분이 참여한 오픈소스 프로젝트입니다.
간단한 개발을 하면서 레트로핏 관련 정보를 정리하고자 이 글을 작성하게 되었습니다.
출처 : http://square.github.io/retrofit/
https://news.realm.io/kr/news/droidcon-jake-wharton-simple-http-retrofit-2/
Retrofit의 장점
Retrofit이 인터페이스와 메서드, 그리고 어떻게 요청이 생성됐는지 서술적으로 정의하는 매개 변수 어노테이션을 사용한다는 점.
Apache HTTP client, URL 연결, OkHttp, 커스텀 client 등 어떤 HTTP client라도 원하는 대로 사용할 수 있다는 점.
시리얼라이제이션 역시 플러그형입니다. 기본으로는 GSON을 사용하지만, JSON을 사용하는 분이라면 Jackson으로 교체할 수도 있습니다.
...
등등 공식 페이지에 좋은 설명이 가득합니다.
제가 사용했을때 유용했던 기능들을 요약해서 소개합니다.
응답의 매개 변수화
1 2 3 4 5 6 7 8 9 10 11 | class Response<T> { int code(); String message(); Headers headers(); boolean isSuccess(); T body(); ResponseBody errorBody(); com.squareup.okhttp.Response raw(); } | cs |
다이내믹 URL 매개 변수
1234567891011 interface GitHubService { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors( @Path("owner") String owner, @Path("repo") String repo); @GET Call<List<Contributor>> repoContributorsPaginate( @Url String url);} cs
URL 내부에서 전달할 수 있는 새로운 ‘@Url’ 어노테이션 기능에서는 Git optional에 있는 간접 경로를 만들었음을 볼 수 있습니다. 이 follow up 메서드를 사용해서 링크를 만들고 뒤따르는 call을 받기 위한 두 번째 paginate 메서드 역시 call할 수 있습니다.
123456 String nextLink = nextFromGitHubLinks(links); // https://api.github.com/repositories/892275/contributors?page=2 Call<List<Contributor>> nextCall = gitHubService.repoContributorsPaginate(nextLink); cs
이 코드는 2 페이지를 만들기 위한 요청을 하는 동시에 3 페이지를 만들 수 있게 하는 헤더를 포함합니다. 이 paginate 메서드를 사용해서 이런 작업을 계속 이어갈 수 있습니다. 특정 API들이 지원하는 이런 방법을 Retrofit 1에서는 지원하지 않았기 때문에 많은 사람이 불편해했었죠.
Retrofit Type 설정
123456789101112 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .build(); interface GitHubService { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors( @Path("owner") String owner, @Path("repo") String repo);} GitHubService gitHubService = retrofit.create(GitHubService.class); cs
시작 부분에 /를 넣으면 이것이 호스트에서부터 시작하는 절대 경로가 됨을 의미합니다.
123456 interface GitHubService { @GET("repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors( @Path("owner") String owner, @Path("repo") String repo);} cs
/를 붙이지 않는다면 온전히 상대 경로가 되고 현재 경로에서 시작하는 경로에서부터 resolve 됩니다. 이 시작 URL을 지우면 v3
path를 포함한 온전한 URL을 얻을 수 있습니다.
이상으로 제가 이해하기 쉬웠던 레트로핏2의 특징을 정리해보았습니다.
추후에 수정이 필요한 내용은 추가하도록 하겠습니다.
공식 페이지에 들어가시면 더욱 많은 정보를 얻으실 수 있습니다!!
감사합니다.
'개발 > 안드로이드' 카테고리의 다른 글
[Android] 안드로이드 4대 구성 요소 (0) | 2017.11.20 |
---|---|
[Android] 안드로이드 이벤트리스너 onClickListener 구현 (0) | 2017.08.21 |
[Android] 안드로이드 레트로핏2 Retrofit2, 네이버 얼굴인식 API 만들기 2 (1) | 2017.08.03 |
[Android] 안드로이드 레트로핏2 Retrofit2, 네이버 얼굴인식 API 만들기 1 (0) | 2017.08.01 |