일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin FCM
- 안드로이드 갤러리 접근
- 안드로이드 카카오 로그인
- Android Interceptor
- 66챌린지
- OkHttp Interceptor
- 프로그래머스 알고리즘
- 영어공부
- 영어독립365
- Android Navigation
- Android ViewPager2
- DataBinding
- Kotlin
- Java
- Android ProgressBar
- Android
- android recyclerview
- Android Jetpack
- Android 12
- 카카오 알고리즘
- 습관만들기
- MVP Architecture
- scope function
- 알고리즘 자바
- 안드로이드 fcm
- Android 12 대응
- WebView
- Android DataBinding
- Android WebView
- 안드로이드
- Today
- Total
Developer Geek
Retrofit2 in Kotlin 본문
개요
- 모바일에서 HTTP API 통신을 할 때 사용하는 라이브러리이다.
- REST 기반의 웹서비스를 통해 JSON 구조를 쉽게 가져오고 업로드할 수 있다.
HTTP API를 Interface로 구현할 수 있다.
interface GitHubService {
@GET("users/{user}/repos")
fun listRepos(
@Path("user") user: String
)
}
Retrofit
class는 위에서 정의한 GitHubService
Interface의 구현체를 생성한다.
val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build()
val service = retrofit.create(GitHubService::class.java)
각각의 GitHubService
에서 만들어진 Call
은 동기적 또는 비동기적으로 HTTP request
를 해당 웹 서버에 요청할 수 있다.
val 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
을 제공한다.- {
HTTP
,GET
,POST
,PUT
,PATCH
,DELETE
,OPTIONS
,HEAD
}@GET("users/list")
- {
query parameter
들을 URL에 추가할 수 있다.@GET("users/list?sort=desc")
URL MANIPULATION
Request URL은 함수의 파라미터를 통해 동적으로 바뀌는 값을 사용하기도 한다. URL에 표기할 때에는 { }
중괄호를 사용한다. 그리고 함수의 파라미터에서는 @Path("")
annotation
을 사용한다.
Path Param
@GET("group/{id}/users")
fun groupList(
@Path("id") groupId: Int
): Call<List<User>>
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")
fun groupList(
@Path("id") groupId: Int,
@QueryMap option: Map<String, String>
): Call<List<User>>
REQUEST BODY
객체를 HTTP request body로 사용되기 위해 @Body
annotation
을 이용하여 body를 추가할 수 있다.
@POST("users/new")
fun createUser(
@Body user: User
): Call<User>
User user
객체는 Retrofit
객체로 변환되다.
FORM ENCODED AND MULTIPART
Form-encoded
데이터는 FormUrlEncoded
annotation
을 이용해서 함수에 추가할 수 있다.
각 각의 key-value
는 @Field
를 사용하면 된다.
@FormUrlEncoded
@POST("user/edit")
fun updateUser(
@Field("first_name") first: String,
@Field("last_name") last: String
): Call<User>
Multipart request은 @Multipart
를 명시한 후, @Part
annotation
을 이용하여 파라미터를 정의해주면 된다.
@Multipart
@PUT("user/photo")
fun updateUser(
@Part("photo") photo: RequestBody,
@Part("description") description: RequestBody
): Call<User>
Multipart를 사용할 때는 Retrofit
자체 converter를 이용하거나 자체적으로 구현한 RequestBody
를 이용해 Serialization
을 다룬다.
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
'안드로이드 > 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 Java (0) | 2022.05.29 |
안드로이드 인터넷 접근 권한 허용 (0) | 2022.05.05 |