Configuration
Chaque option du client, ce qu'il lit dans l'environnement et ce qu'il refuse.
Options
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())| Option | Ce qu'il fait |
|---|---|
| WithAPIKey | La clé d'API de l'espace de travail, qui commence par oe_live_ ou oe_test_. Passée sur un appel, elle fait agir cet appel seulement avec une autre clé. |
| WithAccessToken | Un jeton d'accès OAuth, pour une application qu'une personne a connectée. Passez une clé ou un jeton, pas les deux. |
| WithAccessTokenFunc | Une fonction qui renvoie le jeton d'accès. Elle s'exécute avant chaque requête : c'est donc l'endroit où renouveler un jeton. |
| WithBaseURL | L'origine de l'API. Un hôte nu comme localhost:2222 reçoit son schéma. |
| WithHTTPClient | Un *http.Client, ou tout ce qui a la même méthode Do. Un test passe ici un faux client. |
| WithTimeout | La durée maximale d'une tentative. La valeur par défaut est de 30 secondes, zéro la désactive, et les téléversements attendent au moins dix minutes. |
| WithMaxRetries | Le nombre de fois où une requête en échec est retentée. La valeur par défaut est 2, et 0 n'envoie qu'une fois. |
| WithUserAgent | Remplace l'en-tête User-Agent, qui vaut openemail-go/ suivi de la version. |
| WithHeader | Ajoute un en-tête à chaque requête. |
Tout ce que vous omettez est lu dans l'environnement : OPENEMAIL_API_KEY, puis OPENEMAIL_ACCESS_TOKEN, et OPENEMAIL_BASE_URL. client.Mode() indique si la clé est une clé live ou une clé test.
Contexte et délais
Chaque méthode prend d'abord un context.Context. L'annuler arrête l'appel aussitôt, et son échéance borne l'appel entier, nouvelles tentatives comprises, tandis que WithTimeout borne chaque tentative. WithTimeout fonctionne aussi sur un seul appel.
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"))Options d'un appel
Les paramètres de requête et les réglages d'un appel sont des fonctions passées après les arguments, comme openemail.WithLimit, openemail.WithCursor et openemail.WithIdempotencyKey. Chaque méthode accepte les options que son entrée de référence énumère, et une option qui ne s'applique pas est refusée avant tout envoi.
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)Ce que le client refuse
- Une clé qui ne commence pas par
oe_live_ouoe_test_, et une clé accompagnée d'un jeton d'accès. - L'envoi d'un identifiant en
http:simple, sauf si le serveur est sur cette machine, àlocalhost, à une adresse127.x.x.xou à::1. - Une URL de base sur
0.0.0.0, qui est une adresse sur laquelle un serveur écoute. Utilisez127.0.0.1avec le même port. - Un identifiant vide, ou fait uniquement de points, qu'un analyseur d'URL supprimerait.
- Suivre une redirection. Le client HTTP par défaut la renvoie comme une erreur : un identifiant ne part donc jamais vers un autre hôte.
Afficher un client, une option ou une erreur ne montre jamais un identifiant. La clé, le jeton et les valeurs des en-têtes personnalisés restent hors des sorties de fmt, log/slog et encoding/json.
Un point de terminaison sans méthode
client.Request appelle n'importe quel chemin avec l'identifiant, l'URL de base, le délai et la politique de nouvelles tentatives du client. Le chemin doit commencer par un seul /, et un chemin qui quitte l'origine de l'URL de base est refusé.
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil { return err} fmt.Println(label)