Configuración
Cada opción del cliente, lo que lee del entorno y lo que rechaza.
Opciones
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())| Opción | Qué hace |
|---|---|
| WithAPIKey | La clave de API del espacio de trabajo, que empieza por oe_live_ o oe_test_. En una llamada, actúa con otra clave solo para esa llamada. |
| WithAccessToken | Un token de acceso de OAuth, para una aplicación que una persona conectó. Pasa una clave o un token, no ambos. |
| WithAccessTokenFunc | Una función que devuelve el token de acceso. Se ejecuta antes de cada petición, así que es el lugar donde renovar un token. |
| WithBaseURL | El origen de la API. A un host sin esquema, como localhost:2222, se le añade el esquema. |
| WithHTTPClient | Un *http.Client, o cualquier cosa con el mismo método Do. Una prueba pasa aquí un cliente falso. |
| WithTimeout | Cuánto puede durar un intento. El valor predeterminado es de 30 segundos, cero lo desactiva y las subidas esperan al menos diez minutos. |
| WithMaxRetries | Cuántas veces se reintenta una petición fallida. El valor por defecto es 2, y 0 envía una sola vez. |
| WithUserAgent | Sustituye la cabecera User-Agent, que es openemail-go/ y la versión. |
| WithHeader | Añade una cabecera a todas las peticiones. |
Todo lo que omitas se lee del entorno: OPENEMAIL_API_KEY, después OPENEMAIL_ACCESS_TOKEN, y OPENEMAIL_BASE_URL. client.Mode() indica si la clave es una clave live o test.
Contexto y tiempos de espera
Cada método recibe primero un context.Context. Cancelarlo detiene la llamada al instante, y su plazo limita la llamada entera, reintentos incluidos, mientras que WithTimeout limita cada intento. WithTimeout también funciona en una sola llamada.
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"))Opciones de una llamada
Los parámetros de consulta y los ajustes de una llamada son funciones que se pasan después de los argumentos, como openemail.WithLimit, openemail.WithCursor y openemail.WithIdempotencyKey. Cada método acepta las opciones que enumera su entrada de la referencia, y una opción que no corresponde se rechaza antes de enviar nada.
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)Lo que el cliente rechaza
- Una clave que no empieza por
oe_live_ooe_test_, y una clave junto con un token de acceso. - Enviar una credencial por
http:sin cifrar, salvo que el servidor esté en esta máquina, enlocalhost, en una dirección127.x.x.xo en::1. - Una URL base en
0.0.0.0, que es una dirección en la que escucha un servidor. Usa127.0.0.1con el mismo puerto. - Un id vacío, o uno formado solo por puntos, que un analizador de URL eliminaría.
- Seguir una redirección. El cliente HTTP por defecto la devuelve como un error, así que una credencial nunca viaja a otro host.
Imprimir un cliente, una opción o un error nunca muestra una credencial. La clave, el token y los valores de las cabeceras personalizadas quedan fuera de la salida de fmt, log/slog y encoding/json.
Un endpoint sin método
client.Request llama a cualquier ruta con la credencial, la URL base, el tiempo de espera y la política de reintentos del cliente. La ruta debe empezar por una sola /, y una ruta que sale del origen de la URL base se rechaza.
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil { return err} fmt.Println(label)