Kotlin
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم تفاوت داشته باشند، صفحهٔ انگلیسی درست است. خواندن صفحهٔ انگلیسی
کتابخانه Kotlin همان com.getlingara:lingara-kotlin در Maven Central است. روی JVM اجرا میشود، به Java 17 و Kotlin 2.2 یا بالاتر نیاز دارد، و از kotlinx.coroutines و kotlinx.serialization استفاده میکند.
در عمل چگونه است
- هر فراخوانی یک تابع
suspendاست. برای لغو فراخوانی، کوروتین را لغو کنید، یا برای تعیین مهلت ازwithTimeoutاستفاده کنید؛ همانCancellationExceptionخودتان را میبینید، هرگز نسخهای بستهبندیشده از آن را. - جریان یک
EventStreamاست، یعنی یکFlowکه یک بار آن را جمعآوری میکنید. آن را درونuseجمعآوری کنید تا وقتی کارتان تمام شد بسته شود. رویدادها کلاسهای دادهای زیر یک رابط مهرومومشدهاند که باwhenتطبیق داده میشوند. - خطاها از کلاس مهرومومشده
LingaraExceptionارث میبرند، پس یکwhenروی آنها جامع است.retryAfterیکDurationاست، یا وقتی API مدت انتظاری اعلام نکرده باشدnull. - کلاینت را با سازنده
LingaraClient { }بسازید. ازHttpClientخود JDK استفاده میکند، که میتوانید آن را با کلاینت خودتان جایگزین کنید.
نمونههای زیر وابستگی را اضافه میکنند، یک کلاینت میسازند، فهرستی از واژگان را جریانی دریافت میکنند و یک خطا را مدیریت میکنند.
Kotlin
implementation("com.getlingara:lingara-kotlin:0.1.0-alpha.6")Kotlin
import com.getlingara.kotlin.LingaraClient
val client =
LingaraClient {
clientCredentials(System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
}Kotlin
import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest
val request = VocabRequest(level = 2, sourceLang = "en", targetLang = "zh", count = 8)
// The request is sent here; collect the stream once, inside use {}.
client.generateVocabulary(request).use { stream ->
stream.collect { event ->
when (event) {
is GenerateVocabularyEvent.Item -> println("${event.data.word} ${event.data.translation}")
is GenerateVocabularyEvent.Started -> Unit
}
}
}Kotlin
try {
client.getUsage()
} catch (e: LingaraException) {
when (e) {
// A refusal from the API: status, code (stable) and message (localised).
is ApiException -> println("${e.status} ${e.code} ${e.message}; retry after ${e.retryAfter}")
// The token endpoint refused the credentials or the scopes.
is OAuthException -> println("${e.status} ${e.error} ${e.description}")
is MaintenanceException -> println("under maintenance; retry after ${e.retryAfter}")
// No usable answer: CONNECT, TLS, RESET, TIMEOUT, and so on.
is TransportException -> println("transport: ${e.kind}")
}
}
// A cancelled call throws the caller's own CancellationException instead.