Gabimet dhe riprovimet
Një klasë përjashtimi për çdo lloj refuzimi dhe riprovime që nuk mund të dërgojnë dy herë.
Trajtimi i një gabimi
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");}Një refuzim nga API-ja hedh një ApiException, ose nënklasën për tipin e tij, me atë që API-ja tha për të. Çdo përjashtim që hedh klienti është një OpenEmailException i pakontrolluar, kështu që një catch i vetëm i mbulon të gjitha.
| Metoda | Çfarë mban |
|---|---|
| status() | Statusi HTTP, ose 0 kur nuk mbërriti asnjë përgjigje. |
| type(), code() | Tipi i gabimit dhe kodi i API-së, si validation_error dhe invalid_parameter. |
| param() | Fusha që e ka fajin, kur ka një të tillë. |
| requestId() | Id-ja që duhet të citoni kur i shkruani mbështetjes. |
| docUrl() | Faqja e dokumentimit që shpjegon kodin. |
| retryAfterSeconds() | Sa ju kërkoi API-ja të prisni. |
| fields() | Fushat që refuzoi një formular regjistrimi, secila me një key dhe një error. |
| body() | Trupi i dekoduar i përgjigjes. |
Llojet e dështimit
| Përjashtimi | Kur hidhet |
|---|---|
| AuthenticationException | Çelësi ose tokeni u refuzua, me një 401. |
| PermissionException | Kredenciali nuk lejohet ta bëjë këtë, me një 403. |
| NotFoundException | Asgjë nuk e ka atë id, me një 404. |
| ConflictException | Ndryshimi bie ndesh me gjendjen aktuale, me një 409. |
| ValidationException | Një fushë u refuzua, me një 422. |
| RateLimitException | Shumë kërkesa, ose një kuotë është shpenzuar, me një 429. |
| InvalidRequestException | Çdo refuzim tjetër i kërkesës. |
| ApiException | API-ja dështoi, me një status 500 ose më të lartë. |
| NetworkException | Nuk mbërriti asnjë përgjigje. |
| IllegalArgumentException | Vetë thirrja ishte e gabuar, dhe asgjë nuk u dërgua. |
| WebhookSignatureException | Një dorëzim webhook-u nuk e kaloi kontrollin e vet. |
Një ApiException u përgjigjet edhe pyetjeve për veten: isValidation(), isNotFound(), isRateLimited(), isServerError() dhe isRetryable(), me isScopeMissing() kur kredencialit i mungon scope-i që i duhet thirrjes dhe isStepUpRequired() kur një token aksesi duhet të verifikojë më parë një kod. NetworkException.isTimeout() tregon se afati kaloi.
Çfarë riprovohet
- Leximet, dërgimet dhe çdo shkrim që është i sigurt për t'u përsëritur riprovohen, deri në
maxRetriesherë. Çdo shkrim tjetër dërgohet një herë. - Statuset 408, 500, 502, 503 dhe 504 riprovohen me një pritje që nis nga gjysmë sekonde dhe dyfishohet deri në tetë sekonda.
- Një 429 riprovohet vetëm kur mban një
Retry-Afterprej një minute ose më pak, dhe klienti pret aq gjatë. - Një lidhje që dështon ose që e kalon afatin kohor riprovohet në të njëjtën mënyrë.
Një dërgim që riprovohet mban çdo herë të njëjtin çelës idempotence, kështu që API-ja e përsërit mesazhin e parë në vend që të dërgojë një të dytë.