REST ウェブサービス
ウェブサービスは、インターネット経由で提供されるソフトウェアベースの機能です。アプリはウェブサービスにリクエストを送信することにより、データを取得できます。
REST アーキテクチャ
一般的なウェブサービスは REST アーキテクチャ を使用します。REST アーキテクチャを提供するウェブサービスを RESTful サービス と呼びます。RESTful ウェブサービスは、標準のウェブ コンポーネントとプロトコルを使用して構築されます。REST ウェブサービスへのリクエストは、URI を介する標準的な方法で行います。
アプリでウェブサービスを使用するには、ネットワーク接続を確立してサービスと通信する必要があります。アプリは、レスポンス データを受信して解析し、アプリが使用できる形式に変換する必要があります。
Retrofit ライブラリ
Retrofit
ライブラリは、アプリが REST ウェブサービスにリクエストを送信することを可能にするクライアント ライブラリです。コンバータを使用して、ウェブサービスに送信するデータとウェブサービスから返されたデータをどのように処理するかを Retrofit に伝えます。たとえば、ScalarsConverter
は、ウェブサービスのデータを String またはその他のプリミティブとして扱います。
アプリがインターネットに接続できるようにするには、Android マニフェストに "android.permission.INTERNET"
権限を追加します。
JSON 解析
多くの場合、ウェブサービスからのレスポンスは、構造化データを表す一般的な形式である JSON で書式設定されます。JSON オブジェクトは Key-Value ペアのコレクションです。JSON オブジェクトのコレクションは JSON 配列です。ウェブサービスからのレスポンスは JSON 配列として取得されます。
kotlinx.serialization
Kotlin では、kotlinx.serialization
でデータのシリアル化ツールを使用できます。kotlinx.serialization
は、JSON 文字列を Kotlin オブジェクトに変換するライブラリのセットを備えています。コミュニティで開発された Retrofit 用の Kotlin Serialization Converter ライブラリとして、retrofit2-kotlinx-serialization-converter
があります。
異なるプロパティ名をキーで使用するには、そのプロパティに @SerialName
アノテーションを付けて JSON キー value を指定します。
サンプルコード
######## ステップ 1: 依存関係の追加
まず、Android プロジェクトの build.gradle ファイルに Retrofit と kotlinx.serialization ライブラリの依存関係を追加します。
dependencies {
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
// Kotlin Serialization
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0'
implementation 'com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0'
}
######## ステップ 2: Android マニフェストの更新
AndroidManifest.xml ファイルにインターネットアクセス権限を追加します。
<manifest>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
######## ステップ 3: モデルクラスの定義
Kotlin でデータモデルを定義し、kotlinx.serialization を使用してシリアル化します。
import kotlinx.serialization.Serializable
@Serializable
data class User(
val id: Int,
val name: String,
val email: String
)
######## ステップ 4: Retrofit インターフェースの定義
Retrofit インターフェースを定義して、ウェブ API とのコミュニケーションを設定します。
import retrofit2.http.GET
import retrofit2.Call
interface ApiService {
@GET("users")
fun getUsers(): Call<List<User>>
}
######## ステップ 5: Retrofit インスタンスの作成
Retrofit インスタンスを作成し、シリアル化コンバータを設定します。
import retrofit2.Retrofit
import retrofit2.converter.scalars.ScalarsConverterFactory
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import kotlinx.serialization.json.Json
val retrofit = Retrofit.Builder()
.baseUrl("https://your.api.url/")
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.build()
val apiService = retrofit.create(ApiService::class.java)
######## ステップ 6: API の呼び出しとデータ処理
API を呼び出し、受け取ったデータを処理します。
apiService.getUsers().enqueue(object : Callback<List<User>> {
override fun onResponse(call: Call<List<User>>, response: Response<List<User>>) {
if (response.isSuccessful) {
val users = response.body() ?: emptyList()
// ユーザーデータの処理
}
}
override fun onFailure(call: Call<List<User>>, t: Throwable) {
// エラー処理
}
})