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 ने उसके बारे में कहा।
| फ़ील्ड | इसमें क्या है |
|---|---|
| Status | HTTP स्थिति, या 0 जब कोई जवाब नहीं आया। |
| Type, Code | API का एरर टाइप और कोड, जैसे validation_error और invalid_parameter। |
| Param | वह फ़ील्ड जो ज़िम्मेदार है, जब ऐसा कोई फ़ील्ड हो। |
| RequestID | वह id जो सहायता टीम को लिखते समय बतानी चाहिए। |
| DocURL | दस्तावेज़ का वह पेज जो कोड को समझाता है। |
| RetryAfter | API ने आपको कितनी देर प्रतीक्षा करने को कहा। |
| Fields | वे फ़ील्ड जिन्हें साइन-अप फ़ॉर्म ने अस्वीकार किया, हर एक के साथ एक Key और एक Error। |
| Body | डिकोड की हुई जवाब बॉडी। |
विफलता के प्रकार
| सेंटिनल | यह कब मेल खाता है |
|---|---|
| ErrAuthentication | कुंजी या टोकन अस्वीकार हुआ, 401 के साथ। |
| ErrPermission | इस क्रेडेंशियल को यह करने की अनुमति नहीं है, 403 के साथ। |
| ErrScopeMissing | क्रेडेंशियल में वह स्कोप नहीं है जो कॉल को चाहिए। |
| ErrStepUpRequired | एक्सेस टोकन को पहले एक कोड सत्यापित करना होगा। |
| ErrNotFound | उस id वाली कोई चीज़ नहीं है, 404 के साथ। |
| ErrConflict | बदलाव मौजूदा स्थिति से टकराता है, 409 के साथ। |
| ErrValidation | एक फ़ील्ड अस्वीकार हुआ, 422 के साथ। |
| ErrRateLimited | बहुत ज़्यादा अनुरोध, या कोई कोटा खत्म हो गया, 429 के साथ। |
| ErrInvalidRequest | अनुरोध का कोई भी अन्य इनकार। |
| ErrServer | API विफल हुआ, 500 या उससे ऊपर के स्टेटस के साथ। |
| ErrRetryable | स्टेटस उनमें से है जिन्हें क्लाइंट दोबारा आज़माता है। |
| ErrNetwork | कोई जवाब नहीं आया। |
| ErrTimeout | टाइमआउट से पहले कोई जवाब नहीं आया। |
| ErrInvalidArgument | कॉल ही गलत थी, और कुछ नहीं भेजा गया। |
| ErrWebhookSignature | एक वेबहुक डिलीवरी अपनी जाँच में विफल रही। |
रद्द किया गया कॉन्टेक्स्ट अब भी context.Canceled से मेल खाता है, और बीत चुकी समय-सीमा context.DeadlineExceeded से मेल खाती है।
क्या दोबारा आज़माया जाता है
- पढ़ने वाली कॉल, भेजने वाली कॉल और हर वह लिखने वाली कॉल जिसे दोहराना सुरक्षित है,
WithMaxRetriesबार तक दोबारा आज़माई जाती है। कोई भी अन्य लिखने वाली कॉल एक बार भेजी जाती है। - स्टेटस 408, 500, 502, 503 और 504 को ऐसे इंतज़ार के साथ दोबारा आज़माया जाता है जो आधे सेकंड से शुरू होता है और आठ सेकंड तक दोगुना होता जाता है।
- 429 को तभी दोबारा आज़माया जाता है जब उसके साथ एक मिनट या उससे कम का
Retry-Afterहो, और क्लाइंट उतनी देर प्रतीक्षा करता है। - जो कनेक्शन विफल होता है या जिसका टाइमआउट हो जाता है उसे भी इसी तरह दोबारा आज़माया जाता है।
दोबारा आज़माई गई भेजने वाली कॉल हर बार वही आइडेम्पोटेंसी कुंजी रखती है, इसलिए API दूसरा संदेश भेजने के बजाय पहला संदेश दोहराता है।