서버 통신 라이브러리
OkHttp
- REST API, Http통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 Java 오픈소스 라이브러리
- Retrofit 라이브러리의 베이스
Retrofit2
- Rest API 통신을 위한 라이브러리
- AsyncTask가 없이 Background스레드를 실행 -> CallBack을 통하여 Main Thread에서 UI를 업데이트
- OkHttp를 기반으로 더 안전하고 직관적으로 사용할 수 있게 만들어진 라이브러리
<OkHttp와의 차이점>
- Annotation사용으로 코드의 가독성이 좋고, 직관적인 설계 가능
- 통신 결과값을 JSON으로 변환해 줄 필요없이 바로 객체 대입 가능
- 결과값을 메인 스레드에서 바로 사용 가능
✔️ okhttp의 경우 네트워크 Intercepter를 통해 API가 통신되는 모든 활동을 모니터링할 수 있으며 서버 통신 시간 조절이 가능하다는 장점이 존재한다. 따라서 최고의 성능을 위해서는 둘 다 사용하는 것이 보편적.
1. build.gradle파일에 관련 라이브러리 추가
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
//okHttp
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
2. manifest파일에 인터넷 허용 퍼미션 추가
<uses-permission android:name="android.permission.INTERNET"/>
3. 서버와 통신할 기능을 적은 RetrofitInterface작성
interface RetrofitInterface {
@GET("/posts")
fun getPosts(): Call<List<Post>>
@GET("/post/{pk}")
fun getPost(@Path("pk")pk:Int): Call<Post>
@POST("/post")
fun registerPost(@Body p:Post): Call<Response>
}
기본 Annotation
@GET
데이터 조회 요청
@POST
데이터 추가 요청
@DELETE
데이터 삭제 요청
@PUT
데이터 수정 요청
@PATCH
데이터 일부 수정 요청
(put의 경우, 자원 전체를 갱신을 의미하고 patch는 해당 자원의 일부를 교체하는 의미로 사용)
@Query
http://xxx.x.x?index=1&page=2 식의 요청 매개변수로 넣어주는 어노테이션
@Path
http://xxx.x.x/index/1 식의 요청 매개변수로 넣어주는 어노테이션
@SerialzedName
JSON으로 serialize 될 때 매칭되는 이름을 명시하는 목적으로 사용되는 마킹 어노테이션
@Expose
object 중 해당 값이 null일 경우, json으로 만들 필드를 자동 생략
4. 여러 곳에서 쓰일 레트로핏 객체를 반환해주는 모듈파일 작성
const val BASE_URL = "BASE URL주소"
var gson = GsonBuilder().setLenient().create()
//레트로핏 객체 반환
fun getRetrofit(): Retrofit {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
return retrofit
}
5. 필요한 곳에서 레트로핏 통신 코드 작성
//레트로핏 객체 생성
val service = getRetrofit().create(RetrofitInterface::class.java)
//요청
pk = 1
service.getPosts(pk)
.enqueue(object: Callback<Post>{
override fun onResponse(call: Call<Post>, response: Response<Post>) {
//레트로핏 성공
}
override fun onFailure(call: Call<Post>, t: Throwable) {
//네트워크 연결 실패
}
})
✔️ 레트로핏 통신 코드를 좀 더 빌드창을 통해 자세히 확인하고 싶을 때 OkHttpClient 객체 이용
레트로핏 객체 모듈 작성 파일에서 다음 내용 추가
fun getRetrofit(): Retrofit {
val okHttpClient: OkHttpClient by lazy{
OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply{
level = HttpLoggingInterceptor.Level.BODY
})
.build()
}
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build()
return retrofit
}
'Android > Android Studio' 카테고리의 다른 글
[안드로이드/Kotlin] Thread개념 및 예제 (0) | 2022.05.19 |
---|---|
[안드로이드/Kotlin] Splash화면 만들기 (0) | 2022.05.19 |
[안드로이드/Kotlin] ViewPager2 + TabLayout 사용 (0) | 2022.05.12 |
[안드로이드/Kotlin] BottomNavigationView 사용, Fragment 전환 (0) | 2022.05.12 |
[안드로이드/Kotlin] ViewBinding 사용 (0) | 2022.05.12 |