스팀 앱 개발기 #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 클래스가 잘 작동하는지 확인하기 위해 유닛 테스트 코드를 작성해볼 예정입니다.
지난 스팀 앱 개발기
- #23 - condenser_api.get_accounts API 연동에 필요한 데이터 클래스 정의
- #22 - API 연동에 필요한 라이브러리 추가
- #21 - 사용자 지갑 정보를 담을 SteemitWallet 클래스 정의
- #20 - 클린 아키텍처를 위한 모듈 구성 (2)
- #19 - 클린 아키텍처를 위한 모듈 구성 (1)
- #18 - VEST로부터 STEEM POWER를 계산하는 방법
- #17 - VEST를 STEEM POWER로 변환하기 위해 필요한 get_dynamic_global_properties API
- #16 - 지갑 내용을 읽기 위해 필요한 API
- #15 - 지갑 서브화면(WalletFragment) 레이아웃 구성해 보기
- #14 - 지갑 서브화면(WalletFragment)에서 계정 인식하기
- #13 - 프로파일 서브화면(ProfileFragment)에서 계정 인식하기
- #12 - 태그 서브화면에서 태그 인식하기
- #11 - 검색 레이아웃을 메인 화면에 적용
- #10 - 태그 및 계정 검색 레이아웃 만들기
- #9 - BaseActivity 클래스 정의 그리고 MainActivity 클래스에 적용
- #8 - BaseFragment 클래스 정의 그리고 기존 프래그먼트들에 적용
- #7 - ProfileFragment 그리고 WalletFragment에 데이터 바인딩 적용
- #6 - 태그별 검색 내용을 보여줄 TagsFragment에 데이터 바인딩 적용
- #5 - GitHub에 소스 올리기
- #4 - 하단 내비게이션의 탭 관련 클래스 이름 수정
- #3 - 하단 내비게이션 바의 아이콘, 텍스트 수정
- #2 - 프로젝트 생성
- #1 - 시작하며...
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.