Abhängigkeiten in build.gradle hinzufügen

implementation 'com.squareup.moshi:moshi-kotlin:1.9.3'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'

Internet-Permission in AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

In einer eigenen Serviceklasse den Builder mit einem Moshi instantieren.

private val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

private val retrofit = Retrofit.Builder().addConverterFactory(MoshiConverterFactory.create(moshi)).baseUrl(BASE_URL)
        .build()

```    

Datenklasse erstellen
```kotlin
data class MarsPhoto(
    val id: String, @Json(name = "img_src") val img_src: String
)

In einem Service-Interface werden die Aufrufe zum Werbserver definiert

interface MarsApiService {
    @GET("photos")
    suspend fun getPhotos(): List<MarsPhoto>
}

Retrofit initialisieren mit dem definierten Service-Interface

val retrofitService: MarsApiService by lazy {
    retrofit.create(MarsApiService::class.java)
}

Im ViewModel die Daten abfragen:

viewModelScope.launch {
    try {
        val listResult = MarsApi.retrofitService.getPhotos()
        _status.value = "Success: ${listResult.size} Mars photos retrieved"
    } catch (e: Exception) {
        _status.value = "Failure: ${e.message}"
    }
}