문서로 건너뛰기
Go

구성

클라이언트의 모든 옵션, 환경에서 읽는 것, 거부하는 것.

옵션

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())
옵션하는 일
WithAPIKeyoe_live_ 또는 oe_test_로 시작하는 워크스페이스 API 키입니다. 호출에 전달하면 그 호출에서만 다른 키로 동작합니다.
WithAccessToken사용자가 연결한 앱을 위한 OAuth 액세스 토큰입니다. 키와 토큰 중 하나만 전달하세요.
WithAccessTokenFunc액세스 토큰을 반환하는 함수입니다. 요청마다 먼저 실행되므로 토큰을 갱신하기에 알맞은 곳입니다.
WithBaseURLAPI의 오리진입니다. localhost:2222처럼 호스트만 있는 값에는 스킴이 붙습니다.
WithHTTPClient*http.Client 또는 같은 Do 메서드를 가진 것입니다. 테스트에서는 여기에 가짜 클라이언트를 전달합니다.
WithTimeout한 번의 시도에 걸릴 수 있는 시간입니다. 기본값은 30초이고, 0이면 끄며, 업로드는 최소 10분을 기다립니다.
WithMaxRetries실패한 요청을 다시 시도하는 횟수입니다. 기본값은 2이고, 0이면 한 번만 보냅니다.
WithUserAgentopenemail-go/와 버전으로 이루어진 User-Agent 헤더를 바꿉니다.
WithHeader모든 요청에 헤더를 추가합니다.

생략한 것은 환경에서 읽습니다. OPENEMAIL_API_KEY, 그다음 OPENEMAIL_ACCESS_TOKEN, 그리고 OPENEMAIL_BASE_URL입니다. client.Mode()는 키가 live 키인지 test 키인지 알려 줍니다.

컨텍스트와 타임아웃

모든 메서드는 먼저 context.Context를 받습니다. 이를 취소하면 호출이 즉시 멈추고, 그 기한은 재시도를 포함한 호출 전체를 제한하며, WithTimeout은 각 시도를 제한합니다. WithTimeout은 개별 호출에도 쓸 수 있습니다.

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

호출별 옵션

쿼리 매개변수와 호출 설정은 인수 뒤에 전달하는 함수입니다. 예를 들어 openemail.WithLimit, openemail.WithCursor, openemail.WithIdempotencyKey가 있습니다. 각 메서드는 참조 항목에 나열된 옵션을 받고, 해당하지 않는 옵션은 아무것도 보내기 전에 거부됩니다.

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)

클라이언트가 거부하는 것

  • oe_live_ 또는 oe_test_로 시작하지 않는 키, 그리고 액세스 토큰과 함께 전달된 키.
  • 일반 http:로 자격 증명을 보내는 것. 단, 서버가 이 컴퓨터의 localhost, 127.x.x.x 주소 또는 ::1에 있으면 예외입니다.
  • 0.0.0.0의 기본 URL. 이는 서버가 수신 대기하는 주소입니다. 같은 포트로 127.0.0.1을 사용하세요.
  • 빈 id 또는 점으로만 이루어진 id. URL 파서가 제거해 버립니다.
  • 리디렉션을 따라가는 것. 기본 HTTP 클라이언트는 이를 오류로 반환하므로 자격 증명이 다른 호스트로 넘어가지 않습니다.

클라이언트, 옵션, 오류를 출력해도 자격 증명은 표시되지 않습니다. 키, 토큰, 사용자 지정 헤더의 값은 fmt, log/slog, encoding/json 출력에 포함되지 않습니다.

메서드가 없는 엔드포인트

client.Request는 클라이언트의 자격 증명, 기본 URL, 타임아웃, 재시도 정책으로 어떤 경로든 호출합니다. 경로는 하나의 /로 시작해야 하며, 기본 URL의 오리진을 벗어나는 경로는 거부됩니다.

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