Kalo te dokumentacioni
Go

Gabimet dhe riprovimet

Një tip i vetëm gabimi për çdo dështim, një vlerë sentinel për çdo lloj dhe riprovime që nuk mund të dërgojnë dy herë.

Trajtimi i një gabimi

errors.go
_, err := client.Emails.Send(ctx, openemail.Body{	"from":    "[email protected]",	"to":      "[email protected]",	"subject": "Your September invoice",	"text":    "Invoice attached.",}) var failure *openemail.Error switch {case err == nil:	fmt.Println("sent")case errors.Is(err, openemail.ErrValidation):	errors.As(err, &failure)	fmt.Println(failure.Code, failure.Param, failure.Message)case errors.Is(err, openemail.ErrRateLimited):	errors.As(err, &failure)	fmt.Println("try again in", failure.RetryAfter)case errors.Is(err, openemail.ErrTimeout):	fmt.Println("no answer in time")default:	return err}

Çdo dështim është një *openemail.Error. errors.Is tregon të cilit lloj është, dhe errors.As jep vetë gabimin, me atë që tha API-ja për të.

FushaÇfarë mban
StatusStatusi HTTP, ose 0 kur nuk mbërriti asnjë përgjigje.
Type, CodeTipi i gabimit dhe kodi i API-së, si validation_error dhe invalid_parameter.
ParamFusha që e ka fajin, kur ka një të tillë.
RequestIDId-ja që duhet të citoni kur i shkruani mbështetjes.
DocURLFaqja e dokumentimit që shpjegon kodin.
RetryAfterSa ju kërkoi API-ja të prisni.
FieldsFushat që refuzoi një formular regjistrimi, secila me një Key dhe një Error.
BodyTrupi i dekoduar i përgjigjes.

Llojet e dështimit

Vlera sentinelKur përputhet
ErrAuthenticationÇelësi ose tokeni u refuzua, me një 401.
ErrPermissionKredenciali nuk lejohet ta bëjë këtë, me një 403.
ErrScopeMissingKredencialit i mungon scope-i që i duhet thirrjes.
ErrStepUpRequiredNjë token aksesi duhet të verifikojë së pari një kod.
ErrNotFoundAsgjë nuk e ka atë id, me një 404.
ErrConflictNdryshimi bie ndesh me gjendjen aktuale, me një 409.
ErrValidationNjë fushë u refuzua, me një 422.
ErrRateLimitedShumë kërkesa, ose një kuotë është shpenzuar, me një 429.
ErrInvalidRequestÇdo refuzim tjetër i kërkesës.
ErrServerAPI-ja dështoi, me një status 500 ose më të lartë.
ErrRetryableStatusi është nga ata që klienti i riprovon.
ErrNetworkNuk mbërriti asnjë përgjigje.
ErrTimeoutNuk mbërriti asnjë përgjigje para afatit kohor.
ErrInvalidArgumentVetë thirrja ishte e gabuar, dhe asgjë nuk u dërgua.
ErrWebhookSignatureNjë dorëzim webhook-u nuk e kaloi kontrollin e vet.

Një kontekst i anuluar vazhdon të përputhet me context.Canceled, dhe një afat i kaluar përputhet me context.DeadlineExceeded.

Çfarë riprovohet

  • Leximet, dërgimet dhe çdo shkrim që është i sigurt për t'u përsëritur riprovohen, deri në WithMaxRetries herë. Çdo shkrim tjetër dërgohet një herë.
  • Statuset 408, 500, 502, 503 dhe 504 riprovohen me një pritje që nis nga gjysmë sekonde dhe dyfishohet deri në tetë sekonda.
  • Një 429 riprovohet vetëm kur mban një Retry-After prej një minute ose më pak, dhe klienti pret aq gjatë.
  • Një lidhje që dështon ose që e kalon afatin kohor riprovohet në të njëjtën mënyrë.

Një dërgim që riprovohet mban çdo herë të njëjtin çelës idempotence, kështu që API-ja e përsërit mesazhin e parë në vend që të dërgojë një të dytë.