일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- OkHttp Interceptor
- Kotlin
- Android 12
- 안드로이드 갤러리 접근
- 알고리즘 자바
- Android
- Android Jetpack
- android recyclerview
- Java
- 안드로이드
- scope function
- 안드로이드 카카오 로그인
- Android 12 대응
- Android DataBinding
- 프로그래머스 알고리즘
- 영어독립365
- 안드로이드 fcm
- Android WebView
- WebView
- MVP Architecture
- 영어공부
- Android Interceptor
- Kotlin FCM
- Android ProgressBar
- 습관만들기
- DataBinding
- Android Navigation
- Android ViewPager2
- 카카오 알고리즘
- 66챌린지
- Today
- Total
Developer Geek
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 |