Saltar para a documentação
Go

Configuração

Cada opção do cliente, o que ele lê do ambiente e o que recusa.

Opções

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())
OpçãoO que faz
WithAPIKeyA 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.
WithAccessTokenUm token de acesso OAuth, para uma aplicação que uma pessoa ligou. Passe uma chave ou um token, não ambos.
WithAccessTokenFuncUma função que devolve o token de acesso. É executada antes de cada pedido, por isso é o sítio para renovar um token.
WithBaseURLA origem da API. A um host sem esquema, como localhost:2222, é acrescentado o esquema.
WithHTTPClientUm *http.Client, ou qualquer coisa com o mesmo método Do. Um teste passa aqui um cliente falso.
WithTimeoutQuanto tempo pode demorar uma tentativa. A predefinição é de 30 segundos, zero desliga-o, e os carregamentos esperam pelo menos dez minutos.
WithMaxRetriesQuantas vezes um pedido falhado é tentado de novo. O valor predefinido é 2, e 0 envia uma só vez.
WithUserAgentSubstitui o cabeçalho User-Agent, que é openemail-go/ seguido da versão.
WithHeaderAcrescenta 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.

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

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.

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)

O que o cliente recusa

  • Uma chave que não começa por oe_live_ ou oe_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, em localhost, num endereço 127.x.x.x ou em ::1.
  • Um URL base em 0.0.0.0, que é um endereço em que um servidor escuta. Use 127.0.0.1 com 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.

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