| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- Android 12
- 알고리즘 자바
- 안드로이드 갤러리 접근
- Android Jetpack
- Java
- Android ViewPager2
- OkHttp Interceptor
- 코틀린 코루틴
- 프로그래머스 알고리즘
- Android Navigation
- android recyclerview
- 66챌린지
- DataBinding
- 안드로이드 카카오 로그인
- Android WebView
- WebView
- 영어독립365
- Kotlin FCM
- 영어공부
- scope function
- 카카오 알고리즘
- MVP Architecture
- Android
- Android 12 대응
- Android ProgressBar
- coroutine
- 안드로이드
- 습관만들기
- Android Interceptor
- Kotlin
- Today
- Total
나미래 Android 개발자
Retrofit2 in Java 본문
Retrofit2
개요
- 모바일에서 HTTP API 통신을 할 때 사용하는 라이브러리이다.
- REST 기반의 웹서비스를 통해 JSON 구조를 쉽게 가져오고 업로드할 수 있다.
HTTP API를 Interface로 구현할 수 있다.
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit class는 위에서 정의한 GitHubService Interface의 구현체를 생성한다.
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
각각의 GitHubService에서 만들어진 Call은 동기적 또는 비동기적으로 HTTP request를 해당 웹 서버에 요청할 수 있다.
Call<List<Repo>> repos = service.listRepos("octocat");
HTTP request 를 명시적으로 사용하기 위해서
annotation을 사용한다.
- URL parameter replacement and query parameter support
- Object conversion to request body (e.g., JSON, protocol buffers)
- Multipart request body and file upload
API 정의
함수 위에 있는 Anotation 그리고 Parameter는 HTTP request가 어떤 방식으로 요청 처리 되는지를 잘 명시한다.
REQUEST METHOD
- 모든 함수는 ``HTTP annotation``과 ``상대적인 URL`` 정보를 가지고 있어야한다.
- Retrofit에서는 8가지의 ``annotation``을 제공한다.
<li>{``HTTP``, ``GET``, ``POST``, ``PUT``, ``PATCH``, ``DELETE``, ``OPTIONS``, ``HEAD``}</li>
``` java
@GET("users/list")
```
- ``query parameter``들을 URL에 추가할 수 있다.
``` java
@GET("users/list?sort=desc")
```
URL MANIPULATION
Request URL은 함수의 파라미터를 통해 동적으로 바뀌는 값을 사용하기도 한다. URL에 표기할 때에는 { } 중괄호를 사용한다. 그리고 함수의 파라미터에서는 @Path("") annotation을 사용한다.
Path Param
@GET("group/{id}/users")
Call<List<User>> groupList(
@Path("id") int groupId
);
Query Param
Query Parameters도 Request에 추가할 수 있다. @Query("") annotation을 사용한다.
@GET("group/{id}/users")
Call<List<User>> groupList(
@Path("id") int groupId,
@Query("sort") String sort
);
Complex Query Param - Map
@GET("group/{id}/users")
Call<List<User>> groupList(
@Path("id") int groupId,
@QueryMap Map<String, String> options
);
REQUEST BODY
객체를 HTTP request body로 사용되기 위해 @Body annotation을 이용하여 body를 추가할 수 있다.
@POST("users/new")
CALL<User> craeteUser(
@Body User user
);
User user 객체는 Retrofit 객체로 변환되다.
FORM ENCODED AND MULTIPART
Form-encoded 데이터는 FormUrlEncoded annotation을 이용해서 함수에 추가할 수 있다.
각 각의 key-value는 @Field를 사용하면 된다.
@FormUrlIncoded
@POST("user/edit")
Call<User> updateUser(
@Field("first_name") String first,
@Field("last_name") String last
);
Multipart request은 @Multipart를 명시한 후, @Part annotation을 이용하여 파라미터를 정의해주면 된다.
@Multipart
@PUT("user/photo")
Call<User> updateUser(
@Part("photo") RequestBody photo,
@Part("description) RequestBody description)
);
Multipart를 사용할 때는 Retrofit 자체 converter를 이용하거나 자체적으로 구현한 RequestBody를 이용해 Serialization을 다룬다.
'안드로이드 > Network' 카테고리의 다른 글
| Retrofit + Interceptor 예제 in Kotlin (0) | 2022.06.09 |
|---|---|
| OkHttp Interceptor in Android Kotlin (2) | 2022.06.08 |
| Android Retrofit Singleton Example in Kotlin (0) | 2022.06.02 |
| Retrofit2 in Kotlin (0) | 2022.05.30 |
| 안드로이드 인터넷 접근 권한 허용 (0) | 2022.05.05 |