Java
Trang này được dịch từ tiếng Anh. Nếu hai bản khác nhau, trang tiếng Anh là bản đúng. Đọc trang tiếng Anh
Thư viện Java là com.getlingara:lingara-java trên Maven Central. Thư viện cần Java 17 trở lên, dùng java.net.http.HttpClient có sẵn của JDK, và dùng Jackson cho JSON.
Cách sử dụng
- Các lệnh gọi là đồng bộ. Để chạy nhiều lệnh gọi cùng lúc, hãy chạy chúng trên luồng ảo hoặc một executor.
- Luồng sự kiện là một
EventStream, vừa làIterablevừa làAutoCloseable: hãy đọc nó bằng vòng lặpforbên trong try-with-resources. Các sự kiện là record thuộc một sealed interface, nên một câu lệnhswitchtrên chúng sẽ bao quát mọi trường hợp. - Để hủy, hãy ngắt luồng thực thi hoặc gọi
close()từ một luồng thực thi khác. Khi đó lệnh gọi ném raCancellationException, vốn không thuộc các lỗi của thư viện. - Các lỗi kế thừa
LingaraException, một ngoại lệ không kiểm tra.retryAfter()trả về mộtOptional<Duration>. - Tạo máy khách bằng
LingaraClient.builder(). Một lệnh gọi không phát trực tuyến sẽ không có thời gian chờ cho đến khi bạn đặtrequestTimeout.
Các mẫu dưới đây thêm phụ thuộc, tạo máy khách, phát trực tuyến một danh sách từ vựng và xử lý lỗi.
Java
<dependency>
<groupId>com.getlingara</groupId>
<artifactId>lingara-java</artifactId>
<version>0.1.0-alpha.6</version>
</dependency>Java
import com.getlingara.client.LingaraClient;
LingaraClient client =
LingaraClient.builder()
.clientCredentials(
System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
.build();Java
import com.getlingara.client.model.GenerateVocabularyEvent;
import com.getlingara.client.model.VocabRequest;
VocabRequest request = new VocabRequest().level(2).sourceLang("en").targetLang("zh").count(8);
try (EventStream<GenerateVocabularyEvent> stream = client.generateVocabulary(request)) {
for (GenerateVocabularyEvent event : stream) {
if (event instanceof GenerateVocabularyEvent.Item item) {
System.out.println(item.data().getWord() + " " + item.data().getTranslation());
}
}
}Java
try {
client.getUsage();
} catch (LingaraException e) {
if (e instanceof ApiException api) {
// A refusal from the API: status(), code() (stable) and getMessage() (localised).
System.out.println(api.status() + " " + api.code() + " " + api.getMessage());
api.retryAfter().ifPresent(wait -> System.out.println("retry after " + wait));
} else if (e instanceof OAuthException oauth) {
// The token endpoint refused the credentials or the scopes.
System.out.println(oauth.status() + " " + oauth.error() + " " + oauth.description());
} else if (e instanceof MaintenanceException maintenance) {
System.out.println("under maintenance");
maintenance.retryAfter().ifPresent(wait -> System.out.println("retry after " + wait));
} else if (e instanceof TransportException transport) {
// No usable answer: CONNECT, TLS, RESET, TIMEOUT, and so on.
System.out.println("transport: " + transport.kind());
}
}
// An interrupted call throws java.util.concurrent.CancellationException instead.