Belgelere geç
Java

Hatalar ve yeniden denemeler

Her ret türü için bir istisna sınıfı ve iki kez gönderemeyen yeniden denemeler.

Bir hatayı ele alma

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'den gelen bir ret, API'nin onun hakkında söyledikleriyle birlikte bir ApiException ya da türüne ait alt sınıfı fırlatır. İstemcinin fırlattığı her istisna denetlenmeyen bir OpenEmailException değeridir, bu yüzden tek bir catch hepsini kapsar.

MetotNe tutar
status()HTTP durumu ya da hiç yanıt gelmediğinde 0.
type(), code()API'nin hata türü ve kodu; örneğin validation_error ve invalid_parameter.
param()Varsa, soruna yol açan alan.
requestId()Desteğe yazarken belirteceğiniz kimlik.
docUrl()Kodu açıklayan belge sayfası.
retryAfterSeconds()API'nin ne kadar beklemenizi istediği.
fields()Bir kayıt formunun reddettiği alanlar; her birinin bir key ve bir error değeri vardır.
body()Çözülmüş yanıt gövdesi.

Başarısızlık türleri

İstisnaNe zaman fırlatılır
AuthenticationExceptionAnahtar ya da belirteç reddedildi, 401 ile.
PermissionExceptionKimlik bilgisinin bunu yapmaya izni yok, 403 ile.
NotFoundExceptionBu kimliğe sahip hiçbir şey yok, 404 ile.
ConflictExceptionDeğişiklik mevcut durumla çakışıyor, 409 ile.
ValidationExceptionBir alan reddedildi, 422 ile.
RateLimitExceptionÇok fazla istek var ya da bir kota tükendi, 429 ile.
InvalidRequestExceptionİsteğin diğer tüm retleri.
ApiExceptionAPI başarısız oldu, 500 ya da üzeri bir durumla.
NetworkExceptionHiç yanıt gelmedi.
IllegalArgumentExceptionÇağrının kendisi yanlıştı ve hiçbir şey gönderilmedi.
WebhookSignatureExceptionBir webhook teslimatı denetimini geçemedi.

Bir ApiException kendisi hakkındaki soruları da yanıtlar: isValidation(), isNotFound(), isRateLimited(), isServerError() ve isRetryable(); ayrıca kimlik bilgisinde çağrının gerektirdiği kapsam eksikse isScopeMissing(), bir erişim belirtecinin önce bir kodu doğrulaması gerekiyorsa isStepUpRequired(). NetworkException.isTimeout() ise sürenin dolduğunu söyler.

Neler yeniden denenir

  • Okumalar, gönderimler ve yinelenmesi güvenli olan her yazma, en çok maxRetries kez yeniden denenir. Diğer her yazma bir kez gönderilir.
  • 408, 500, 502, 503 ve 504 durumları, yarım saniyeden başlayıp sekiz saniyeye kadar ikiye katlanan bir beklemeyle yeniden denenir.
  • Bir 429 yalnızca bir dakika ya da daha kısa bir Retry-After taşıdığında yeniden denenir ve istemci o kadar bekler.
  • Başarısız olan ya da zaman aşımına uğrayan bir bağlantı aynı şekilde yeniden denenir.

Yeniden denenen bir gönderim her seferinde aynı idempotency anahtarını taşır, böylece API ikinci bir ileti göndermek yerine ilk iletiyi yineler.