Ir a la documentación
Go

Configuración

Cada opción del cliente, lo que lee del entorno y lo que rechaza.

Opciones

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())
OpciónQué hace
WithAPIKeyLa 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.
WithAccessTokenUn token de acceso de OAuth, para una aplicación que una persona conectó. Pasa una clave o un token, no ambos.
WithAccessTokenFuncUna función que devuelve el token de acceso. Se ejecuta antes de cada petición, así que es el lugar donde renovar un token.
WithBaseURLEl origen de la API. A un host sin esquema, como localhost:2222, se le añade el esquema.
WithHTTPClientUn *http.Client, o cualquier cosa con el mismo método Do. Una prueba pasa aquí un cliente falso.
WithTimeoutCuánto puede durar un intento. El valor predeterminado es de 30 segundos, cero lo desactiva y las subidas esperan al menos diez minutos.
WithMaxRetriesCuántas veces se reintenta una petición fallida. El valor por defecto es 2, y 0 envía una sola vez.
WithUserAgentSustituye la cabecera User-Agent, que es openemail-go/ y la versión.
WithHeaderAñ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.

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"))

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.

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)

Lo que el cliente rechaza

  • Una clave que no empieza por oe_live_ o oe_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, en localhost, en una dirección 127.x.x.x o en ::1.
  • Una URL base en 0.0.0.0, que es una dirección en la que escucha un servidor. Usa 127.0.0.1 con 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.

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