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.