Retrofit2 + Okhttp란 ?

1 minute read

1. okhttp

  • 최신 http통신에 대해 간편히 하고 데이터와 미디어를 교환 하는 방법이며 구성에 도움을 주는 라이브러리이다.

2. retorfit2

  • Retrofit2는 Square사에서 만든 http통신을 간편하게 만들어주는 라이브러리 입니다.
  • 구글 샘플에서도 네트워크 통신에 대한 예제를 보여줄 때는 retrofit2를 이용하는 것을 보면 비공식적으로 인정했다고 생각합니다.

빌더 패턴을 적용하여 특정 값에 대해 설정하기 편하게 라이브러리가 구성되어 있습니다.

//로그 설정
val interceptor = HttpLoggingInterceptor().apply {
            level = HttpLoggingInterceptor.Level.BODY
        }
//okhttp 생성
val client = OkHttpClient.Builder().addInterceptor(interceptor as HttpLoggingInterceptor).build()

//retorift2 생성
Retrofit.Builder()
        .baseUrl("url")
        .client(client)
        .addConverterFactory(GsonConverterFactory.create()
        .build()
        .create(GithubAPI::class.java)

3. Interface

http통신에 요청하는 어노테이션을 이용하여 작성하고, 해당 메소드에 매개변수에 값을 넣어 작성한다.

interface GithubAPI {

    @GET("/search/users")
    fun getSearchUsers(@Query("q") q : String, @Query("sort") sort: String,
    		@Query("order") order: String): Call<RepoSearchResponse>
    }

4. dataClass

data class RepoSearchResponse(
    val incomplete_results: Boolean,
    val items: List<User>,
    val total_count: Int
)

5. 사용

아래와 같이 enqueue하여 response와 failure를 override하여 코드를 작성해준다. 응답이 정상적으로 넘어 왔는지에 대한 isSuccessful을 확인하여 해당 데이터를 넘겨준다.(return 형태로도 사용 가능)

private val githubAPI: GithubAPI by inject()

githubAPI.getSearchUsers(query, page, perPage).enqueue(
            object : Callback<RepoSearchResponse> {
                override fun onResponse(
                    call: Call<RepoSearchResponse>,
                    response: Response<RepoSearchResponse>
                ) {
                    if (response.isSuccessful) {
                        val users = response.body()?.items ?: emptyList()
                        onSuccess(users)
                    }
                }

                override fun onFailure(call: Call<RepoSearchResponse>, t: Throwable) {
                    Logger.d("fail to get Data")
                    onError(t.message ?: "unknown error")
                }
            }
        )

샘플 코드: 깃허브 SearchAPI 샘플

Updated:

Leave a comment