Zur Dokumentation springen
Go

Konfiguration

Jede Option des Clients, was er aus der Umgebung liest und was er ablehnt.

Optionen

client.go
client := openemail.New(	openemail.WithAPIKey(os.Getenv("OPENEMAIL_API_KEY")),	openemail.WithBaseURL("https://api.openemail.uk"),	openemail.WithTimeout(30*time.Second),	openemail.WithMaxRetries(2),	openemail.WithHeader("X-Team", "billing"),) if err := client.Err(); err != nil {	return err} fmt.Println(client.Mode(), client.BaseURL())
OptionWas es tut
WithAPIKeyDer Workspace-API-Schlüssel, der mit oe_live_ oder oe_test_ beginnt. Bei einem Aufruf angegeben, gilt ein anderer Schlüssel nur für diesen Aufruf.
WithAccessTokenEin OAuth-Zugriffstoken für eine App, die eine Person verbunden hat. Übergeben Sie einen Schlüssel oder ein Token, nicht beides.
WithAccessTokenFuncEine Funktion, die das Zugriffstoken zurückgibt. Sie läuft vor jeder Anfrage und ist damit der Ort, ein Token zu erneuern.
WithBaseURLDer Ursprung der API. Ein bloßer Host wie localhost:2222 bekommt sein Schema ergänzt.
WithHTTPClientEin *http.Client oder alles mit derselben Methode Do. Ein Test übergibt hier eine Attrappe.
WithTimeoutWie lange ein Versuch dauern darf. Der Standard sind 30 Sekunden, null schaltet es ab, und Uploads warten mindestens zehn Minuten.
WithMaxRetriesWie oft eine fehlgeschlagene Anfrage erneut versucht wird. Der Standard ist 2, und 0 sendet einmal.
WithUserAgentErsetzt den Header User-Agent, der aus openemail-go/ und der Version besteht.
WithHeaderFügt jeder Anfrage einen Header hinzu.

Alles, was Sie weglassen, wird aus der Umgebung gelesen: OPENEMAIL_API_KEY, dann OPENEMAIL_ACCESS_TOKEN und OPENEMAIL_BASE_URL. client.Mode() sagt, ob der Schlüssel ein live- oder ein test-Schlüssel ist.

Kontext und Zeitlimits

Jede Methode nimmt zuerst einen context.Context. Ihn abzubrechen beendet den Aufruf sofort, und seine Frist begrenzt den gesamten Aufruf samt Wiederholungen, während WithTimeout jeden einzelnen Versuch begrenzt. WithTimeout funktioniert auch bei einem einzelnen Aufruf.

deadline.go
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)defer cancel() thread, err := client.Threads.Get(ctx, "CAHk7pQ2x9LmZ4-mail.example.com", openemail.WithTimeout(5*time.Second))if err != nil {	return err} fmt.Println(thread.Int("messageCount"))

Optionen bei einem Aufruf

Abfrageparameter und Einstellungen eines Aufrufs sind Funktionen, die nach den Argumenten übergeben werden, etwa openemail.WithLimit, openemail.WithCursor und openemail.WithIdempotencyKey. Jede Methode nimmt die Optionen an, die ihr Referenzeintrag aufführt, und eine Option, die nicht passt, wird abgelehnt, bevor etwas gesendet wird.

another_workspace.go
page, err := client.Emails.List(ctx,	openemail.WithStatus("failed", "bounced"),	openemail.WithLimit(50),	openemail.WithAPIKey(os.Getenv("OTHER_WORKSPACE_KEY")),)if err != nil {	return err} fmt.Println(len(page.Items), page.HasMore)

Was der Client ablehnt

  • Einen Schlüssel, der nicht mit oe_live_ oder oe_test_ beginnt, und einen Schlüssel zusammen mit einem Zugriffstoken.
  • Das Senden von Zugangsdaten über einfaches http:, außer der Server läuft auf diesem Rechner unter localhost, einer 127.x.x.x-Adresse oder ::1.
  • Eine Basis-URL auf 0.0.0.0, einer Adresse, auf der ein Server lauscht. Verwenden Sie 127.0.0.1 mit demselben Port.
  • Eine leere ID oder eine, die nur aus Punkten besteht und die ein URL-Parser entfernen würde.
  • Einer Weiterleitung zu folgen. Der Standard-HTTP-Client gibt sie als Fehler zurück, sodass Zugangsdaten nie zu einem anderen Host gelangen.

Die Ausgabe eines Clients, einer Option oder eines Fehlers zeigt nie Zugangsdaten. Der Schlüssel, das Token und die Werte eigener Header bleiben aus der Ausgabe von fmt, log/slog und encoding/json heraus.

Ein Endpunkt ohne Methode

client.Request ruft jeden Pfad mit den Zugangsdaten, der Basis-URL, dem Zeitlimit und den Wiederholungsregeln des Clients auf. Der Pfad muss mit einem einzelnen / beginnen, und ein Pfad, der den Ursprung der Basis-URL verlässt, wird abgelehnt.

request.go
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil {	return err} fmt.Println(label)