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

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

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

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

Errors.java
try {    client.templates().send("order-shipped", Body.of(        "from", "[email protected]",        "to", "[email protected]",        "props", Body.of("orderId", "AC-4192")    ));} catch (ValidationException error) {    System.err.println(error.param() + " " + error.getMessage());} catch (RateLimitException error) {    System.err.println("Wait " + error.retryAfterSeconds() + " seconds");} catch (ApiException error) {    System.err.println(error.status() + " " + error.code() + " " + error.requestId());} catch (NetworkException error) {    System.err.println(error.isTimeout() ? "Timed out" : "No response");}

API का इनकार एक ApiException या उसके प्रकार की सबक्लास थ्रो करता है, साथ में वह जो API ने उसके बारे में कहा। क्लाइंट जो भी एक्सेप्शन थ्रो करता है वह एक अनचेक्ड OpenEmailException है, इसलिए एक catch उन सबको सँभाल लेता है।

मेथडइसमें क्या है
status()HTTP स्थिति, या 0 जब कोई जवाब नहीं आया।
type(), code()API का एरर टाइप और कोड, जैसे validation_error और invalid_parameter।
param()वह फ़ील्ड जो ज़िम्मेदार है, जब ऐसा कोई फ़ील्ड हो।
requestId()वह id जो सहायता टीम को लिखते समय बतानी चाहिए।
docUrl()दस्तावेज़ का वह पेज जो कोड को समझाता है।
retryAfterSeconds()API ने आपको कितनी देर प्रतीक्षा करने को कहा।
fields()वे फ़ील्ड जिन्हें साइन-अप फ़ॉर्म ने अस्वीकार किया, हर एक के साथ एक key और एक error।
body()डिकोड की हुई जवाब बॉडी।

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

एक्सेप्शनयह कब थ्रो होता है
AuthenticationExceptionकुंजी या टोकन अस्वीकार हुआ, 401 के साथ।
PermissionExceptionइस क्रेडेंशियल को यह करने की अनुमति नहीं है, 403 के साथ।
NotFoundExceptionउस id वाली कोई चीज़ नहीं है, 404 के साथ।
ConflictExceptionबदलाव मौजूदा स्थिति से टकराता है, 409 के साथ।
ValidationExceptionएक फ़ील्ड अस्वीकार हुआ, 422 के साथ।
RateLimitExceptionबहुत ज़्यादा अनुरोध, या कोई कोटा खत्म हो गया, 429 के साथ।
InvalidRequestExceptionअनुरोध का कोई भी अन्य इनकार।
ApiExceptionAPI विफल हुआ, 500 या उससे ऊपर के स्टेटस के साथ।
NetworkExceptionकोई जवाब नहीं आया।
IllegalArgumentExceptionकॉल ही गलत थी, और कुछ नहीं भेजा गया।
WebhookSignatureExceptionएक वेबहुक डिलीवरी अपनी जाँच में विफल रही।

एक ApiException अपने बारे में सवालों के जवाब भी देता है: isValidation(), isNotFound(), isRateLimited(), isServerError() और isRetryable(), साथ में isScopeMissing() जब क्रेडेंशियल के पास वह स्कोप न हो जो कॉल को चाहिए और isStepUpRequired() जब किसी एक्सेस टोकन को पहले एक कोड सत्यापित करना हो। NetworkException.isTimeout() बताता है कि समय सीमा निकल गई।

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

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

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