본문 바로가기

개발/android

안드로이드 rest api ,CRUD 사용이 필요할 때 Retrofit

반응형

안드로이드에서 REST api를 사용 해야할 때, Retrofit 추천.

아직도 꽤 여러 라이브러리가 있고, 새로 나오고 하지만 편하긴 하다 확실히

 

장점으로는

많은 연동 라이브러리가 있다는 점. 필요한건 검색하면 거의 다 있다

 

한 예로

    implementation 'com.squareup.retrofit2:retrofit:2.6.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
    implementation 'com.squareup.retrofit2:converter-simplexml:2.6.2'
    implementation 'com.squareup.retrofit2:converter-jaxb:2.6.2'
    implementation 'com.squareup.okhttp3:okhttp:4.2.2'

gson 라이브러리를 쓰고 싶으면 converter-gson 

xml 값을 받아와야 한다면 converter-simplexml, converter-jaxb

header값을 고정적으로 써야 한다거나 token, oauth등을 써야 할 때는 okhttp3 라는 라이브러리가 있다

 

기본 사용법은 retrofit2 공식 사이트에서 보고 쉽게 사용하면 될 것 같고 

쓰고 있거나 검색해서 찾아오는 사람들을 위한 꿀팁 코드나 몇줄 써서 추천해보자면

 

- base url 을 설정 해야할 땐 builder에서 .baseUrl() 을 사용한다 

ex) 네이버.닷컴/xxxx 에서 ("네이버.닷컴") 은 baseUrl로 설정

this.retrofit = Retrofit.Builder()
            .baseUrl(baseUrl) 
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build()

 

- 1회용 token, auth가 필요할 때는 아래 처럼

@GET("v1/api/member/profile/")
fun profile(@Header("Authorization")authToken:String): Call<AuthData.UserData>

- 계속해서 적용해야 하는 auth token 이 있으면

OkHttpClient를 사용해서,인증 처리를 하면 된다.

(Auth 타입에 따라 Intercepter를 변경, 생성해서 쓰면 된다.)

var client = OkHttpClient.Builder()
        .addInterceptor(AuthInterceptor(uToken))
        .build()
        
var retrofit = Retrofit.Builder()
        .baseUrl(baseUrl)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

 

crud, Multipart 기타 설정을 적용하는것도 annotation을 이용해서 쉽게 처리 가능하다

@PUT("api/me/update_profile")
    fun updateMeProfile(@Body fields:Map<String, String>) : Call<ProfileData>

@Multipart
    @POST("api/me/user_videos")
    fun createUserVideoTesting(@Part file: MultipartBody.Part): Call<String>

@Multipart
    @POST("api/me/user_photos")
    fun createUserPhoto(@Part file: MultipartBody.Part): Call<PhotoData>
    
@FormUrlEncoded
    @POST("api/users/{path}/reviews")
    fun createReview(@Path("path") pathId: Int, @Field("room") room:Int, @Field("point") point:Int): Call<ReviewData>

더 상세하게 궁금하거나, 추가적인 retrofit 정보 필요하면 댓글 남겨주세요 

그럼 이만 뿅

반응형