스팀 앱 개발기 #103 - 포스트 내용을 읽기 위한 bridge.get_discussion API 연동 코드 작성steemCreated with Sketch.

포스트 내용을 읽기 위한 bridge.get_discussion API 연동 코드 작성

No. 103
23.06.15 (목) | Written by @dorian-mobileapp

시작하며...

포스트 내용을 보여줄 화면에서 필요한 API는 bridge.get_discussion입니다. 지난 포스트에서는 이 API를 분석했구요. 이번에는 그것을 연동하는 코드를 만들고 이를 테스트해 보았습니다.


작업 개요

  • API 입력 파라메터로 사용할 데이터 클래스
  • API 응답 자료로 사용할 데이터 클래스
  • SteemService 인터페이스에 메소드 추가
  • 테스트 코드 작성

API 입력 파라메터로 사용할 데이터 클래스

data class GetDiscussionParamsDTO(
    val jsonrpc: String = "2.0",
    val method: String = "bridge.get_discussion",
    val params: InnerParams,
    val id: Int
) {

    data class InnerParams(
        val author: String,
        val permlink: String
    )

}

API 응답 자료로 사용할 데이터 클래스

포스트의 포맷은 bridge.get_ranked_post API의 그것과 동일합니다. 그래서 새로운 데이터 클래스를 만들지 않고 기존 PostItemDTO를 재활용하였습니다.

data class GetDiscussionResponseDTO(
    val jsonrpc: String? = "2.0",
    val result: Map<String, PostItemDTO>? = mapOf()
)

SteemService 인터페이스에 메소드 추가

@POST(".")
suspend fun getDiscussion(
    @Body params: GetDiscussionParamsDTO
): Response<GetDiscussionResponseDTO>

테스트 코드 작성

dorian-lee 계정의 포스트들 중 permlink가 1000인 그것의 내용을 구하는 코드를 테스트로 간단히 작성해 보았습니다. 응답 데이터의 바디(body) 그리고 그것의 result로부터 포스트가 정상적으로 로딩됨을 확인했습니다.

@Test
fun getDiscussion() = runTest {
    val account = "dorian-lee"
    val permlink = "1000"
    val params = GetDiscussionParamsDTO(
        params = GetDiscussionParamsDTO.InnerParams(account, permlink),
        id = 1
    )

    val response = SteemClient.apiService.getDiscussion(params)
    assertNotNull(response.body())

    val postResult = response.body()?.result ?: mapOf()
    assertTrue(postResult.isNotEmpty())

    val rootPost = postResult["${account}/${permlink}"]
    assertNotNull(rootPost)
}

GitHub Commit


마치며...

Postman으로 해당 API 실행 결과, 응답 자료에는 포스트 그리고 하위 댓글들(이들도 포스트)이 JSON 객체에 모여있는 것을 파악했습니다. 이를 코틀린 언어로 어떻게 가져올까가 고민이었는데요. Map 객체로 받아올 수 있지 않을까 예상했습니다. 직접 해보는 건 처음이라 잘 될지가 걱정이었죠. 다행히 잘 실행됨을 확인했습니다. 이제 포스트 화면을 구현하기 위한 다음 단계로 넘어갈 수 있게 되었어요.


지난 스팀 앱 개발기


Layout provided by Steemit Enhancer hommage by ayogom
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 61153.73
ETH 3403.85
USDT 1.00
SBD 2.51