스팀 앱 개발기 #24 - API 실행을 담당할 SteemService 인터페이스 정의

시작하며...

지금은 추석 연휴가 공부하기가 쉬울 때는 아니죠. 그렇다고 마냥 멈출 수는 없지 않겠습니까? 짧게라도 개발 스토리를 이어가고자 키보드를 두드려 봅니다.


API 실행을 담당할 SteemService 인터페이스 정의

SteemClient 클래스를 이전 포스트에서 보여 드렸지요. 그런데 이 클래스가 API를 직접 실행하는 것은 아니구요. API 실행을 담당할 인터페이스를 정의해 주어야 합니다. 이것은 Retrofit에서 정한 규칙으로 파악이 되구요. 규칙에 따라 인터페이스를 만들어 보겠습니다.

interface SteemService {

    // Runs condenser_api.get_accounts API.
    @POST(".")
    fun getAccounts(
        @Body followingParams: GetAccountsParams
    ): Flowable<GetAccountsResponseEntity>

}
  • @Post(".")
    • condenser_api.get_accounts API의 메소드가 POST이므로 @POST 애노테이션 사용
    • URL: 베이스 URL https://api.steemit.com을 그대로 사용하므로 "." 사용
  • @Body
    • API 메소드가 POST이고, 그것의 규칙에 따라 파라메터에 해당하는 GetAccountsParams 객체를 body로 지정
  • Single<GetAccountsResponseEntity>
    • RxJava의 Flowable 타입을 Observable로 선택

SteemClient 클래스에 SteemService 구현 객체 추가

SteemService 인터페이스를 개발자가 직접 구현하지 않구요. 그 대신 아래와 같이 Retrofit 클래스의 create 메소드를 이용하여 이를 생성할 수 있습니다. 이 객체를 SteemClient 클래스의 필드로 추가하였습니다.

object SteemClient {

    const val BASE_URL = "https://api.steemit.com"

    private val retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()

    val apiService = retrofit.create(SteemService::class.java)

}

GitHub Commit

(곧 추가 예정)


마치며...

다음 포스트에서는 SteemService 인터페이스, SteemClient 클래스가 잘 작동하는지 확인하기 위해 유닛 테스트 코드를 작성해볼 예정입니다.


지난 스팀 앱 개발기

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57839.82
ETH 3132.70
USDT 1.00
SBD 2.43