Retrofit: Coroutineを使うときの、Response<T>と生のTの使い分け

psideさんの、Retrofit2でRxJavaを使う時の Result, Response, そのままT の使い分け所感のCoroutineバージョンの記事となります。

上記の記事に書いてある、Rxとは違い、Result型は用意されていないので、Response型で包むか、生で値w受け取るかのどちらかが基本となります。

interface HogeService {
    suspend fun getHoge(): Hoge
    or
    suspend fun getHoge(): Response<Hoge>
}

Retrofitの2.6.0で、挙動の違いを確認しました。

Response
200 成功 成功
404 例外 成功
ネットワークに繋がっていない 例外 例外
シリアライズが出来ない(型がおかしい) 例外 例外

っていう感じの挙動になります。

どっちを使えばいいの?

サーバがエラーコードを返してきた時に、特別な振る舞いをしたいエンドポイントってあると思うので、そういうときはResponseで包んであげて、それ以外は生でいいんじゃない?って思ってます(小並感

Written by
あんどろいどでぃべろっぱぁー🍎