Hatalar
Tek bir biçim, iki düzey ve her şeyin üzerinde bir istek id'si.
Zarf
type, üzerinde dallanabileceğiniz ve asla büyümeyecek olan donmuş bir kümedir. code ise özeldir ve eklemelidir; tanımadığınız bir kodu kendi type değeri gibi ele alın. requestId başarılar dahil her yanıtta bulunur ve bir bildirimi bir günlük satırına bağlayan şeydir.
{ "error": { "type": "validation_error", "code": "invalid_email_address", "message": "Not a valid email address: ada@", "param": "to.0", "docUrl": "https://openemail.uk/docs/api/errors#invalid_email_address", "requestId": "req_e103790543af4…" }}param noktalı ve indeksli yazılır; böylece onu içeren alanı değil tam olarak ilgili öğeyi (to.0, attachments.2.filename) gösterir.
Durum kodları
| Durum | type | Sık görülen kodlar |
|---|---|---|
| 400 | invalid_request_error | malformed_json, invalid_idempotency_key |
| 401 | authentication_error | missing_api_key, invalid_api_key, revoked_api_key, invalid_credential_type |
| 403 | permission_error | insufficient_scope, from_address_forbidden |
| 404 | not_found_error | resource_not_found |
| 409 | conflict_error | email_not_cancellable, translation_not_configured |
| 422 | validation_error | invalid_email_address, reserved_header, too_many_recipients, unknown_parameter, idempotency_key_reuse, label_not_directly_settable, unknown_language, translation_too_long |
| 429 | rate_limit_error | send_quota_exceeded, too_many_inboxes |
| 500 | api_error | internal_error |
| 503 | api_error | translation_failed |
Bir 404, "yok" ile "başka bir çalışma alanına ait" arasında asla ayrım yapmaz. Bu bilinçlidir: farkın kendisi bir bilgidir.
Bir 429 asla Retry-After taşımaz; bu yüzden bekleme süresini kendiniz seçin. send_quota_exceeded aylık gönderim hakkınızdır ve ayın birinde sıfırlanır; bu yüzden geri çekilmek yerine onu bir insana gösterin. too_many_inboxes ise tek kullanımlık gelen kutusu oluşturma tavanıdır ve zaten elinizde olan bir gelen kutusunun süresini uzatmak bu tavana hiçbir şey yazmaz.
500 ile 503 aynı type değerini paylaşır ama bir çağıran için farklı şeyler ifade eder. 503, yanıt vermeyen bir bağımlılıktır (bugün bu, çevirmendir) ve isteği olduğu gibi yeniden denemeye değer; 500 ise bize aittir ve requestId ile bildirmeye değer.
Bunları ele alma
Davranış için type üzerinden dallanın, bir insana göstereceğiniz mesaj için code değerini okuyun. Tanınmayan bir code, istemcinizdeki bir hata değildir. Bir başarısızlığı eskisinden daha kesin adlandırdığımız anlamına gelir.
const res = await fetch(`${BASE}/emails`, { method: 'POST', headers, body }); if (!res.ok) { const { error } = await res.json(); switch (error.type) { case 'rate_limit_error': throw new RateLimited(error.code); case 'validation_error': // error.param points at the offending field throw new BadRequest(`${error.param}: ${error.message}`); case 'authentication_error': // revoked_api_key and expired_api_key are worth telling an operator apart throw new AuthFailed(error.code); default: // quote requestId when you report it throw new Unexpected(error.message, error.requestId); }}