پرش به مستندات
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()شناسه‌ای که هنگام نوشتن به پشتیبانی باید ذکر کنید.
docUrl()صفحه‌ای از مستندات که کد را توضیح می‌دهد.
retryAfterSeconds()مدتی که API از شما خواسته صبر کنید.
fields()فیلدهایی که یک فرم ثبت‌نام رد کرده است، هر کدام با یک key و یک error.
body()بدنهٔ رمزگشایی‌شدهٔ پاسخ.

گونه‌های شکست

استثناچه زمانی پرتاب می‌شود
AuthenticationExceptionکلید یا توکن رد شد، با 401.
PermissionExceptionاین اعتبارنامه اجازهٔ این کار را ندارد، با 403.
NotFoundExceptionهیچ چیزی آن شناسه را ندارد، با 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 به‌جای فرستادن پیام دوم، پیام نخست را بازپخش می‌کند.