Lingara Lingara Dokumentation Ratgeber API Bibliotheken Apps Erstellen Web-App
Sprache: Deutsch

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 sowohl Iterable als auch AutoCloseable ist: Lesen Sie ihn mit einer for-Schleife innerhalb von try-with-resources. Events sind Records unter einem Sealed Interface, sodass ein switch über sie vollständig ist.
  • Zum Abbrechen unterbrechen Sie den Thread oder rufen close() von einem anderen Thread aus auf. Der Aufruf wirft dann CancellationException, die nicht zu den Fehlern der Bibliothek gehört.
  • Fehler erweitern LingaraException, eine ungeprüfte Exception. retryAfter() gibt ein Optional<Duration> zurück.
  • Bauen Sie einen Client mit LingaraClient.builder(). Ein Aufruf, der nicht streamt, hat kein Timeout, bis Sie requestTimeout setzen.

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.

Was diese Seite kapselt