Java
Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen
Die Java-Bibliothek ist com.getlingara:lingara-java auf Maven Central. Sie benötigt Java 17 oder neuer und verwendet den JDK-eigenen java.net.http.HttpClient, mit Jackson für JSON.
Wie sie sich liest
- Aufrufe sind synchron. Für viele gleichzeitig führen Sie sie auf virtuellen Threads oder einem Executor aus.
- Ein Stream ist ein
EventStream, das sowohlIterableals auchAutoCloseableist: Lesen Sie ihn mit einerfor-Schleife innerhalb von try-with-resources. Events sind Records unter einem Sealed Interface, sodass einswitchüber sie vollständig ist. - Zum Abbrechen unterbrechen Sie den Thread oder rufen
close()von einem anderen Thread aus auf. Der Aufruf wirft dannCancellationException, die nicht zu den Fehlern der Bibliothek gehört. - Fehler erweitern
LingaraException, eine ungeprüfte Exception.retryAfter()gibt einOptional<Duration>zurück. - Bauen Sie einen Client mit
LingaraClient.builder(). Ein Aufruf, der nicht streamt, hat kein Timeout, bis SierequestTimeoutsetzen.
Die folgenden Beispiele fügen die Abhängigkeit hinzu, erstellen einen Client, streamen eine Vokabelliste und behandeln einen Fehler.
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.