Kotlin で HTTP リクエストを作成する
- Kotlin プロジェクトを作成して依存関係を追加する
-
Retrofit
を使用して Kotlin で HTTP リクエストを作成する - Java 標準ライブラリの API を使用して Kotlin で HTTP リクエストを作成する
-
Fuel
API を使用して Kotlin で HTTP リクエストを作成する -
OkHttp
API を使用して Kotlin で HTTP リクエストを作成する - まとめ
HTTP は Web 用の通信プロトコルであり、Web サーバーから Web ブラウザーに Web コンテンツを提供する役割を果たします。
Web コンテンツは、静的データまたは動的データの場合があります。 静的データとは、ページに表示される情報が変化しないことを意味しますが、Web ページに表示される動的データは常に変化しています。
サーバーから取得したデータには、構造化データ、画像、動画ファイルが含まれます。 ほとんどのアプリケーションは通常、データベースによって管理される構造化データを操作します。
データベースから Web クライアントにデータを取得する際の一般的なアプローチは、安静な API を使用することです。 RESTful API は、HTTP プロトコルを介してさまざまなライブラリを使用してアプリケーションによって消費され、Web クライアントにロードされます。
このチュートリアルでは、Restful API を使用する HTTP リクエストを作成するために使用できるさまざまな方法を学習します。 Restful API は、Heroku
でホストされているアプリケーションから国のリストを返します。
Kotlin プロジェクトを作成して依存関係を追加する
IntelliJ 開発環境を開き、File
> New
> Project
を選択します。 開いたウィンドウで、プロジェクトの name
を kotlin-http-request
として入力し、Language
セクションで Kotlin
を選択し、Build system
セクションで Gradle
を選択します。
最後に、Create
ボタンを押してプロジェクトを生成します。
build.gradle.kts
ファイルを開き、次のコードに示すすべての依存関係があることを確認します。 これらの依存関係は、HTTP リクエストの作成に使用できるライブラリを追加するのに役立ちます。
dependencies{
implementation ("com.squareup.retrofit2:retrofit:2.9.0")
implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
implementation ("com.github.kittinunf.fuel:fuel:2.3.1")
implementation ("com.squareup.okhttp3:okhttp:4.10.0")
testImplementation(kotlin("test"))
}
Retrofit
を使用して Kotlin で HTTP リクエストを作成する
Retrofit
は、Kotlin または Java でアプリケーションを開発する際に最もよく使用されるライブラリです。
kotlin
フォルダーの下に、model
という名前のフォルダーを作成します。 Country.kt
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
package model
data class Country(var id: Number,
var countryName: String);
このコードでは、サーバーから取得した 国
オブジェクトを格納するために使用する データ クラス
を作成しました。 このクラスにはフィールド id
と countryName
があり、サーバーから取得したオブジェクトのフィールドにマップされます。
kotlin
フォルダーの下に、service
という名前のフォルダーを作成します。 CountryService.kt
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
package service
import model.Country
import retrofit2.Call
import retrofit2.http.GET
interface CountryService {
@GET("/country/all")
fun getAllCountries(): Call<List<Country>>;
}
このコードでは、サーバーからすべての国 List<Country>
を取得するために、相対パス /country/all
にマップする GET
リクエストを作成しました。 サーバーからデータを取得する場合は、常に @GET
アノテーションを使用します。
getAllCountries()
メソッドは Call
を返すことに注意してください。これは、メソッドがサーバーにリクエストを送信し、レスポンスを返すことを意味します。
CountryServiceImpl.kt
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
package service
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class CountryServiceImpl {
fun getCountryServiceFactory(): CountryService{
val retrofit = Retrofit.Builder()
.baseUrl("https://countryapp254.herokuapp.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(CountryService::class.java);
}
}
このクラスは、getAllCountries()
メソッドで提供された相対 URL を、ビルダーに提供された baseUrl()
にマッピングすることによって、サーバーからデータを取得するという主な作業を行います。
addConverterFactory()
は、Retrofit
によって提供される Gson
ライブラリを使用して Kotlin オブジェクトを逆シリアル化するのに役立ちます。
kotlin
フォルダーの下に Main.kt
ファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
import model.Country
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import service.CountryService
import service.CountryServiceImpl
fun getAllCountriesUsingRetrofit(){
val countryService: CountryService =
CountryServiceImpl().getCountryServiceFactory();
val call: Call<List<Country>> = countryService.getAllCountries();
call.enqueue(object : Callback<List<Country>> {
override fun onResponse(call: Call<List<Country>>,
response: Response<List<Country>>
) {
response.body()?.forEach(::println)
}
override fun onFailure(call: Call<List<Country>>, t: Throwable) {
t.printStackTrace();
}
})
}
fun main(){
getAllCountriesUsingRetrofit();
}
上記のコードは、Retrofit コードが機能しているかどうかを検証します。 CountryService
を返す getCountryServiceFactory()
を呼び出します。
CountryService
インスタンスは、getAllCountries()
メソッドを呼び出すのに役立ちます。 このメソッドは、データへの応答を含む Call
を返します。
サーバーから国を取得するには、enqueue()
メソッドを呼び出し、CallBack
の onResponse()
および onFailure()
メソッドを実装します。
enqueue()
メソッドは非同期で実行されます。コンソール アプリケーションを作成しているので、応答 body()
をコンソールに記録するだけで済みます。 このコードを実行して、出力が次のようになっていることを確認します。
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
Java 標準ライブラリの API を使用して Kotlin で HTTP リクエストを作成する
Main.kt
ファイルの前の例についてコメントし、次のコードをコピーしてファイルに貼り付けます。
import java.net.HttpURLConnection
import java.net.URL
fun getCountriesUsingHttpURLConnection(){
var url = URL("https://countryapp254.herokuapp.com/country/all");
with(url.openConnection() as HttpURLConnection){
inputStream.bufferedReader().use {
it.lines().forEach(::println)
}
}
}
fun main(){
getCountriesUsingHttpURLConnection();
}
URLConnection
は、java.net
パッケージの Java 標準ライブラリの API であり、Kotlin で HTTP リクエストを作成するために使用できます。
HttpURLConnection
は URLConnection
のインスタンスであり、これを使用してサーバーへの HTTP 接続を作成します。 with()
関数は、確立された接続を使用してサーバーに単一のリクエストを作成し、関数内のコードを実行して、結果を返します。
関数内の inputStream
は bufferedReader()
を使用して確立された接続からデータを読み取り、use()
拡張関数はサーバーから読み取ったデータをコンソールに記録するのに役立ちます。 このコードを実行して、出力が次のようになっていることを確認します。
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
Fuel
API を使用して Kotlin で HTTP リクエストを作成する
Main.kt
ファイルの前の例についてコメントし、次のコードをコピーしてファイルに貼り付けます。
import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.result.Result
fun getCountriesUsingFuel(){
val request = "https://countryapp254.herokuapp.com/country/all"
.httpGet()
.responseString{ request, response, result ->
when(result){
is Result.Failure -> {
println(result.getException());
}
is Result.Success -> {
println(result.get())
}
}
}
request.join();
}
fun main(){
getCountriesUsingFuel();
}
Fuel
API は、アプリケーションで HTTP リクエストを作成するために使用できる別のアプローチです。 この例では、GET
リクエストを行っていることを示すために、String
クラスの拡張関数である httpGet()
を呼び出しています。
文字列は、サーバーからデータをフェッチするために使用される RESTful API を提供します。
httpGet()
メソッドは Request
を返します。これにより、responseString()
メソッドを呼び出して、ハンドラーを引数として渡すことで Charset.UTF-8
にリクエストを非同期的に実行できます。
ハンドラーは、型 Request
、Response
、および Result
の 3つのパラメーターを受け取り、値を返さないことを意味する Unit
を返すラムダ関数です。 Result
に関心があるので、Failure
と Success
を呼び出します。どちらも、アプリケーションがそれぞれ失敗または成功したときに結果を提供します。
when()
メソッドは、Java の switch
と同じであり、リクエストが成功したか失敗したかを判断するのに役立ちます。 このコードを実行して、出力が次のようになっていることを確認します。
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
OkHttp
API を使用して Kotlin で HTTP リクエストを作成する
Main.kt
ファイルの前の例についてコメントし、次のコードをコピーしてファイルに貼り付けます。
import okhttp3.OkHttpClient
import okhttp3.Request
private val httpClient = OkHttpClient()
fun getCountriesUsingOkHttp() {
val countriesRequest = Request.Builder()
.url("https://countryapp254.herokuapp.com/country/all")
.build();
httpClient.newCall(countriesRequest).execute().use { countryResponse ->
if (!countryResponse.isSuccessful) throw RuntimeException("status code $countryResponse");
println(countryResponse.body!!.string())
}
}
fun main(){
getCountriesUsingOkHttp();
}
OkHttpClient()
は、サーバーへの HTTP リクエストを作成するために使用できる共有 API インスタンスを作成します。
各クライアントにはスレッド プールと接続プールがあるため、共有インスタンスが作成されます。メモリを節約し、待機時間を短縮するには、それらを再利用することが重要です。
Builder()
は、提供された URL
を使用して Request
を作成し、サーバーへのリクエストを準備するために、OkHttpClient()
インスタンスから newCall()
メソッドを呼び出し、Request
を渡します。 このメソッドの引数として。
newCall()
メソッドは Call
を返し、execute()
メソッドを呼び出して Response.body()
からリクエストのレスポンスを取得します。 use()
拡張関数は、応答のデータにアクセスしてコンソールに記録するのに役立ちます。
use()
関数は、例外がスローされたかどうかに関係なく、結果を閉じることに注意してください。 このコードを実行して、出力が次のようになっていることを確認します。
[{"id":18,"countryName":"Kenya"},
{"id":20,"countryName":"Tanzania"},
{"id":21,"countryName":"Ethiopia"},
{"id":22,"countryName":"Malawi"},
{"id":23,"countryName":"Country"},
{"id":24,"countryName":"Country"},
{"id":25,"countryName":"Kenya"},
{"id":26,"countryName":"Country"},
{"id":27,"countryName":"USA"},
{"id":28,"countryName":"USA"},
{"id":29,"countryName":"Kenya"},
{"id":30,"countryName":"Kenya"}]
まとめ
このチュートリアルでは、Kotlin で HTTP リクエストを作成するために活用できるさまざまな方法を学びました。 私たちがカバーしたアプローチには、Retrofit
の使用、Java 標準ライブラリの API の使用、Fuel
API の使用、そして最後に OkHttp
API の使用が含まれます。
これらが使用できる唯一のアプローチではないことに注意してください。 Volley
API など、使用できる他のアプローチがあります。 ユースケースに適した方法を自由に使用してください。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub