ANDROID/Android 앱 프로그래밍
[Android] Retrofit2를 사용한 API 통신
주 녕
2021. 7. 4. 23:45
반응형
OkHttp3를 사용해 본 경험만 있었는데, 요즘엔 Retrofit2 라이브러리를 사용한다고 해서 공부해보았다.
네트워킹을 공부하기도 했고, 예전에 진행했던 프로젝트에서 사용했던 라이브러리를 복습을 위해 정리한다!
Retrofit2 라이브러리
Square에서 제공하고 있는 Type-safe HTTP 통신을 위한 라이브러리
- Rest API : 서버와 클라이언트 간 HTTP 통신을 위한 라이브러리
- Type safe : 어떤 연산을 통해서도 예측 불가능한 결과가 나오지 않는 것
- AsyncTask 없이 Background Thread에서 실행되며 콜백을 통해 Main Thread에서의 UI 업데이터를 간단하게 할 수 있도록 제공함
- OkHttp와 함께 사용됨
Retrofit을 사용하는 이유?
- AsyncTask로 구현된 통신 방식이나 Volley에 비해 응답 속도가 매우 빠름
- 동기/비동기 방식을 선택할 수 있음
- Call의 요청을 취소할 수 있음
→ 성능과 간단한 구현 방법
Retrofit의 구성
- POJO(Plain Old Java Object) 형태의 Java Model 파일
- JSON으로 이루어진 API 결과 값을 어노테이션이나 getter/setter를 이용하여 자동으로 담기는 객체를 생성함
- API를 호출할 때 변수 값을 객체 형태로 생성하여 전달할 때도 사용
- Interface 형태의 Service 파일
- 기본 API 주소 + [상세 경로 / 파라미터] 형태의 API의 구성
- [상세 경로]와 [파라미터] 부분을 어노테이션 형태로 기술하여 API를 호출
- Interceptor
- OkHttp 라이브러리에 의존성이 있는 만큼 OkHttp의 Interceptor를 이용하여 어플리케이션과 네트워크 종류의 중간 상태 값을 알 수 있음
- 어플리케이션은 처음 한 번만 감지하여 정보를 확인할 수 있음
- 네트워크는 통신이 있을 때마다 감지하여 정보를 확인할 수 있음
Retrofit의 실행
- JSON 형태의 모델 클래스
- HTTP 작업을 정의(onSuccess/onFail)하는 인터페이스
- Retrofit.Builder를 선언한 클래스(baseUrl, Converter 등을 선언)
1. build.gradle에 추가
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
현재 버전은 github.com/square/retrofit 의 README.md의 Download를 확인!
2. JSON 형태의 모델 클래스를 생성
3. HTTP 요청을 수행하는 Call 메소드가 있는 API 인터페이스(API Service)를 생성
ex) @GET("/posts/{userId}")
- @GET : 리소스 조회 및 획득
- @POST : 리소스 생성
- @PUT : 리소스 수정
- @DELETE : 리소스 삭제
- @PATH, @HEAD
ex) Call<Data> getData(@Path("userId") String userId);
== String 타입의 userId가 1이라고 하면 "/posts/1"이라는 경로를 나타내어 API를 호출
@Path |
|
@Query, @QueryMap |
|
@Field, @FieldMap |
|
@Part, @PartMap |
|
@Body |
|
@Header |
|
4. Retrofit.Builder 클래스를 생성
final Retrofit.Builder retrofitBuilder = new Retrofit.Builder()
.baseUrl(MyConstant.Url.BASE_URL + "/") // 뒤에 / 를 꼭 붙여야 한다.
.addConverterFactory(ScalarsConverterFactory.create());
5. APIService의 Call 메소드 객체를 선언하고 동기/비동기로 실행
Retrofit retrofit = retrofitBuilder.build();
APIService apiService = retrofit.create(ApiService.class);
Call<User> call1 = apiService.getInfo("주녕리").enqueue();
참고
반응형