दस्तावेज़ पर जाएँ
Go

एरर और रीट्राई

हर विफलता के लिए एक एरर टाइप, हर प्रकार के लिए एक सेंटिनल, और ऐसे रीट्राई जो दो बार नहीं भेज सकते।

एरर को संभालना

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}

हर विफलता एक *openemail.Error है। errors.Is बताता है कि वह किस प्रकार की है, और errors.As खुद एरर देता है, साथ में वह जो API ने उसके बारे में कहा।

फ़ील्डइसमें क्या है
StatusHTTP स्थिति, या 0 जब कोई जवाब नहीं आया।
Type, CodeAPI का एरर टाइप और कोड, जैसे validation_error और invalid_parameter।
Paramवह फ़ील्ड जो ज़िम्मेदार है, जब ऐसा कोई फ़ील्ड हो।
RequestIDवह id जो सहायता टीम को लिखते समय बतानी चाहिए।
DocURLदस्तावेज़ का वह पेज जो कोड को समझाता है।
RetryAfterAPI ने आपको कितनी देर प्रतीक्षा करने को कहा।
Fieldsवे फ़ील्ड जिन्हें साइन-अप फ़ॉर्म ने अस्वीकार किया, हर एक के साथ एक Key और एक Error।
Bodyडिकोड की हुई जवाब बॉडी।

विफलता के प्रकार

सेंटिनलयह कब मेल खाता है
ErrAuthenticationकुंजी या टोकन अस्वीकार हुआ, 401 के साथ।
ErrPermissionइस क्रेडेंशियल को यह करने की अनुमति नहीं है, 403 के साथ।
ErrScopeMissingक्रेडेंशियल में वह स्कोप नहीं है जो कॉल को चाहिए।
ErrStepUpRequiredएक्सेस टोकन को पहले एक कोड सत्यापित करना होगा।
ErrNotFoundउस id वाली कोई चीज़ नहीं है, 404 के साथ।
ErrConflictबदलाव मौजूदा स्थिति से टकराता है, 409 के साथ।
ErrValidationएक फ़ील्ड अस्वीकार हुआ, 422 के साथ।
ErrRateLimitedबहुत ज़्यादा अनुरोध, या कोई कोटा खत्म हो गया, 429 के साथ।
ErrInvalidRequestअनुरोध का कोई भी अन्य इनकार।
ErrServerAPI विफल हुआ, 500 या उससे ऊपर के स्टेटस के साथ।
ErrRetryableस्टेटस उनमें से है जिन्हें क्लाइंट दोबारा आज़माता है।
ErrNetworkकोई जवाब नहीं आया।
ErrTimeoutटाइमआउट से पहले कोई जवाब नहीं आया।
ErrInvalidArgumentकॉल ही गलत थी, और कुछ नहीं भेजा गया।
ErrWebhookSignatureएक वेबहुक डिलीवरी अपनी जाँच में विफल रही।

रद्द किया गया कॉन्टेक्स्ट अब भी context.Canceled से मेल खाता है, और बीत चुकी समय-सीमा context.DeadlineExceeded से मेल खाती है।

क्या दोबारा आज़माया जाता है

  • पढ़ने वाली कॉल, भेजने वाली कॉल और हर वह लिखने वाली कॉल जिसे दोहराना सुरक्षित है, WithMaxRetries बार तक दोबारा आज़माई जाती है। कोई भी अन्य लिखने वाली कॉल एक बार भेजी जाती है।
  • स्टेटस 408, 500, 502, 503 और 504 को ऐसे इंतज़ार के साथ दोबारा आज़माया जाता है जो आधे सेकंड से शुरू होता है और आठ सेकंड तक दोगुना होता जाता है।
  • 429 को तभी दोबारा आज़माया जाता है जब उसके साथ एक मिनट या उससे कम का Retry-After हो, और क्लाइंट उतनी देर प्रतीक्षा करता है।
  • जो कनेक्शन विफल होता है या जिसका टाइमआउट हो जाता है उसे भी इसी तरह दोबारा आज़माया जाता है।

दोबारा आज़माई गई भेजने वाली कॉल हर बार वही आइडेम्पोटेंसी कुंजी रखती है, इसलिए API दूसरा संदेश भेजने के बजाय पहला संदेश दोहराता है।