RetrofitとREST API
RetrofitでHTTPリクエストを実行します。APIインターフェースを定義し、Gson/MoshiでJSONを解析し、レスポンスとエラーを処理して、コルーチンと統合します。
「RetrofitとREST API」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン1/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全6レッスンが含まれています。
Retrofitとは
Retrofitは、Squareが開発したAndroid向けの最も人気のあるHTTPクライアントです。KotlinのインターフェースとしてREST APIを定義できるため、HTTP処理の定型コードを書く必要がありません。
- メソッドに
@GETや@POSTなどのアノテーションを付けます - JSONレスポンスをKotlinのデータクラスに自動変換します
- コルーチン(
suspend fun)をネイティブでサポートします
依存関係を追加する
app/build.gradleにRetrofitとGsonコンバーターを追加します。
// app/build.gradle
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.11.0'
implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}
// AndroidManifest.xml — add internet permission:
// <uses-permission android:name="android.permission.INTERNET" />APIインターフェースを定義する
APIのエンドポイントを記述するKotlinインターフェースを作成します。
import retrofit2.http.*
data class Post(val id: Int, val title: String, val body: String, val userId: Int)
interface ApiService {
@GET("posts")
suspend fun getPosts(): List<Post>
@GET("posts/{id}")
suspend fun getPost(@Path("id") id: Int): Post
@POST("posts")
suspend fun createPost(@Body post: Post): Post
@GET("posts")
suspend fun getPostsByUser(@Query("userId") userId: Int): List<Post>
}Retrofitインスタンスを構築する
通常はobjectまたはHiltを使って、Retrofitのシングルトンインスタンスを作成します。
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
val api: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}GETリクエストを送信する
Kotlinのコルーチンを使って、RepositoryからAPIを呼び出します。
class PostRepository {
private val api = RetrofitClient.api
suspend fun getPosts(): List<Post> {
return api.getPosts() // Retrofit handles threading for you
}
suspend fun getPost(id: Int): Post {
return api.getPost(id)
}
}
// In ViewModel:
fun loadPosts() {
viewModelScope.launch {
try {
val posts = withContext(Dispatchers.IO) {
repository.getPosts()
}
_posts.value = posts
} catch (e: Exception) {
_error.value = "Network error: ${e.message}"
}
}
}GsonによるJSONマッピング
GsonはJSONをKotlinのデータクラスに自動変換します。フィールド名はJSONのキーと一致している必要があります。一致しない場合は@SerializedNameを使用します。
import com.google.gson.annotations.SerializedName
data class User(
val id: Int,
val name: String,
val email: String,
@SerializedName("phone_number") // JSON key is 'phone_number'
val phoneNumber: String,
@SerializedName("created_at")
val createdAt: String
)ボディ付きPOSTリクエスト
@POSTと@Bodyを使ってサーバーにデータを送信します。
// API interface:
@POST("users")
suspend fun createUser(@Body user: User): User
// In Repository:
suspend fun createUser(name: String, email: String): User {
val newUser = User(id = 0, name = name, email = email, phoneNumber = "", createdAt = "")
return api.createUser(newUser)
}
// In ViewModel:
fun registerUser(name: String, email: String) {
viewModelScope.launch {
val user = withContext(Dispatchers.IO) {
repo.createUser(name, email)
}
_registeredUser.value = user
}
}ヘッダーと認証
OkHttpのインターセプターを使って、すべてのリクエストにヘッダーを追加します。
import okhttp3.OkHttpClient
import okhttp3.Interceptor
val authClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer $token")
.addHeader("Accept", "application/json")
.build()
chain.proceed(request)
}
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(authClient) // use our authenticated client
.addConverterFactory(GsonConverterFactory.create())
.build()HTTPエラーを処理する
成功したHTTPレスポンス(200~299)では値が返されます。エラーレスポンス(4xx、5xx)ではHttpExceptionがスローされます。必ず両方を処理してください。
HttpException— サーバーがエラーステータスコードを返した場合IOException— ネットワーク接続がない場合
理解度チェック
/posts/{id}のようなURLパスのセグメントにメソッドパラメータを対応付けるRetrofitのアノテーションはどれですか?
まとめ:RetrofitとAPI
これで、任意のREST APIからデータを取得できるようになりました。
- Kotlinインターフェースとアノテーション(@GET、@POST、@Path、@Query)でAPIを定義します
- ベースURLとGsonコンバーターを指定してRetrofitインスタンスを構築します
- ViewModelのコルーチンからsuspend関数を呼び出します
- JSONをKotlinのデータクラスに自動的にマッピングします
HttpExceptionとIOExceptionを処理します
次は、Coilを使ってネットワーク上の画像を表示します。
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 36
- レッスン
- 152
よくある質問
「RetrofitとREST API」レッスンは無料ですか?
はい。「RetrofitとREST API」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全6レッスンが含まれています。
「RetrofitとREST API」で何を学びますか?
RetrofitでHTTPリクエストを実行します。APIインターフェースを定義し、Gson/MoshiでJSONを解析し、レスポンスとエラーを処理して、コルーチンと統合します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/6です。
「RetrofitとREST API」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- RetrofitとREST API
- Coilによる画像読み込み
- エラー処理とUX
- プッシュ通知
- WorkManagerとバックグラウンドタスク
- Play Storeへの公開