Configuração
Cada opção do cliente, o que ele lê do ambiente e o que recusa.
Opções
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())| Opção | O que faz |
|---|---|
| WithAPIKey | A chave de API do espaço de trabalho, que começa por oe_live_ ou oe_test_. Numa chamada, atua com outra chave apenas nessa chamada. |
| WithAccessToken | Um token de acesso OAuth, para uma aplicação que uma pessoa ligou. Passe uma chave ou um token, não ambos. |
| WithAccessTokenFunc | Uma função que devolve o token de acesso. É executada antes de cada pedido, por isso é o sítio para renovar um token. |
| WithBaseURL | A origem da API. A um host sem esquema, como localhost:2222, é acrescentado o esquema. |
| WithHTTPClient | Um *http.Client, ou qualquer coisa com o mesmo método Do. Um teste passa aqui um cliente falso. |
| WithTimeout | Quanto tempo pode demorar uma tentativa. A predefinição é de 30 segundos, zero desliga-o, e os carregamentos esperam pelo menos dez minutos. |
| WithMaxRetries | Quantas vezes um pedido falhado é tentado de novo. O valor predefinido é 2, e 0 envia uma só vez. |
| WithUserAgent | Substitui o cabeçalho User-Agent, que é openemail-go/ seguido da versão. |
| WithHeader | Acrescenta um cabeçalho a todos os pedidos. |
Tudo o que omitir é lido do ambiente: OPENEMAIL_API_KEY, depois OPENEMAIL_ACCESS_TOKEN, e OPENEMAIL_BASE_URL. client.Mode() indica se a chave é uma chave live ou test.
Contexto e tempos limite
Cada método recebe primeiro um context.Context. Cancelá-lo interrompe a chamada de imediato, e o seu prazo limita a chamada inteira, novas tentativas incluídas, enquanto WithTimeout limita cada tentativa. WithTimeout também funciona numa única chamada.
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"))Opções de uma chamada
Os parâmetros de consulta e as definições de uma chamada são funções passadas depois dos argumentos, como openemail.WithLimit, openemail.WithCursor e openemail.WithIdempotencyKey. Cada método aceita as opções que a sua entrada na referência enumera, e uma opção que não se aplica é recusada antes de se enviar seja o que for.
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)O que o cliente recusa
- Uma chave que não começa por
oe_live_ouoe_test_, e uma chave juntamente com um token de acesso. - Enviar uma credencial por
http:simples, a menos que o servidor esteja nesta máquina, emlocalhost, num endereço127.x.x.xou em::1. - Um URL base em
0.0.0.0, que é um endereço em que um servidor escuta. Use127.0.0.1com a mesma porta. - Um id vazio, ou feito apenas de pontos, que um analisador de URL removeria.
- Seguir um redirecionamento. O cliente HTTP predefinido devolve-o como um erro, por isso uma credencial nunca viaja para outro host.
Imprimir um cliente, uma opção ou um erro nunca mostra uma credencial. A chave, o token e os valores dos cabeçalhos personalizados ficam fora da saída de fmt, log/slog e encoding/json.
Um endpoint sem método
client.Request chama qualquer caminho com a credencial, o URL base, o tempo limite e a política de novas tentativas do cliente. O caminho tem de começar por uma única /, e um caminho que sai da origem do URL base é recusado.
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil { return err} fmt.Println(label)