Xətalar
REST API-nin xəta formatı, qaytardığı status və xəta kodları, sorğu limiti və təhlükəsiz təkrar cəhd edilə bilən xətalar üzrə istinad.
Sorğu uğursuz olduqda API HTTP xəta statusu və xətanı təsvir edən JSON gövdəsi qaytarır. Bu istinad formatı, kodları və onlarla necə davranmağı sadalayır.
Xəta formatı
{
"code": "VALIDATION_FAILED",
"message": "2 fields failed validation: name, sizeGb",
"field": "name",
"details": {
"errors": [
{ "field": "name", "code": "string_too_short", "message": "String should have at least 1 character" },
{ "field": "sizeGb", "code": "missing", "message": "Field required" }
]
}
}| Sahə | Nə vaxt olur | Mənası |
|---|---|---|
code | Həmişə | Aşağıdakı cədvəllərdən maşın tərəfindən oxunan xəta kodu. Proqram məntiqini bu sahəyə əsaslandırın. |
message | Həmişə | İnsanlar üçün ingilis dilində təsvir. Onu təhlil etməyin; proqramınızda code sahəsindən istifadə edin. |
field | Xəta sorğunun bir sahəsinə aid olduqda | Həmin sahənin adı, məsələn, name və ya Idempotency-Key. |
details | Əlavə kontekst olduqda | Koddan asılı olan strukturlaşdırılmış məlumat, məsələn, silməyə mane olan resursların siyahısı. |
retryable | Yalnız dəyəri true olduqda | Eyni sorğunun yenidən göndərilməsi uğurlu ola bilər. Sahə olmadıqda onun dəyəri false sayılır. |
API 400 Bad Request statusundan istifadə etmir: əməliyyatın sxeminə uyğun gəlməyən sorğu 422 Unprocessable Entity qaytarır.
Status kodları və xəta kodları
| Status | Kod | Mənası | Nə etməli |
|---|---|---|---|
400 | IDEMPOTENCY_KEY_REQUIRED | API tokeni və ya xidmət hesabı açarı ilə göndərilən, resurs yaradan POST sorğusunda Idempotency-Key başlığı yoxdur. | Başlığı yeni UUID ilə göndərin, təkrar cəhddə isə eyni UUID-dən istifadə edin. İdempotent sorğular səhifəsinə baxın. |
401 | UNAUTHENTICATED | Giriş məlumatı yoxdur, yanlışdır, müddəti bitib və ya ləğv edilib. | Authorization başlığını yoxlayın. API tokenləri ilə autentifikasiyadan keçin səhifəsinə baxın. |
403 | FORBIDDEN | Bunu etməyə icazəniz yoxdur. details.reason olduqda səbəbi bildirir. | Nasazlığın həlli bölməsinə baxın. |
403 | MFA_STEP_UP_REQUIRED | Əməliyyat konsol seansınızda son iki faktorlu təsdiqləmə tələb edir. | Konsolda autentifikator tətbiqinizlə (authenticator app) təsdiqləyin və yenidən cəhd edin. |
403 | MFA_SETUP_REQUIRED | Əməliyyat iki faktorlu autentifikasiya (two-factor authentication) tələb edir, hesabınızda isə o qurulmayıb. | İki faktorlu autentifikasiyanı qurun. |
403 | INTERACTIVE_SESSION_REQUIRED | Əməliyyatı API tokeni (API token) və ya xidmət hesabının (service account) açarı ilə yerinə yetirmək mümkün deyil. | Onu konsolda yerinə yetirin. |
404 | NOT_FOUND | Resurs mövcud deyil və ya ona girişiniz yoxdur. API bu iki halı bir-birindən ayırmır. | ID-ni və layihəni (project) yoxlayın. |
405 | METHOD_NOT_ALLOWED | Yol mövcuddur, lakin bu metodla deyil. | Metodu API istinadında yoxlayın. |
409 | CONFLICT | Sorğu cari vəziyyətlə ziddiyyət təşkil edir, məsələn, artıq istifadə olunan ad və ya artıq icra olunan əməliyyat. | Resursu oxuyun və ziddiyyəti aradan qaldırın. retryable dəyəri true olarsa, sonra yenidən cəhd edin. |
409 | QUOTA_EXCEEDED | Sorğu abunəliyinizin (subscription) kvotasını və ya xidmət hesabının açarlarının sayı kimi məhsul limitini aşardı. Abunəlik kvotası üçün mesaj resursu, onun limitini və istifadəsini, həmçinin kvota ID-sini göstərir. | Resursları azad edin. Abunəlik kvotası üçün artırma da tələb edə bilərsiniz. Kvotalar səhifəsinə baxın. |
409 | CAPACITY_UNAVAILABLE | Region sorğunu hazırda yerləşdirə bilmir. | Sonra yenidən cəhd edin və ya başqa ölçü (size) seçin. Bu xəta təkrar cəhd edilə biləndir. |
409 | DEPENDENCY_BLOCKED | Digər resurslar bundan asılıdır. details onları sadalayır, məsələn, diskin (volume) qoşulduğu virtual maşın (instance). | Əvvəlcə asılılıqları aradan qaldırın. |
409 | LOCKED | Resursu dəyişmək mümkün deyil, məsələn, daxildə qurulmuş rolu (built-in role). | Heç nə; resurs olduğu kimi qalır. |
409 | DELETION_PROTECTED | Silinmədən qoruma (deletion protection) aktivdir. | Silinmədən qorumanı qeyri-aktiv edin və yenidən silin. |
409 | ROOT_VOLUME_WOULD_BE_DELETED, ATTACHED_VOLUME_WOULD_BE_DELETED | Virtual maşının silinməsi saxlanmalı olan diski də silərdi, ona görə platforma silməni rədd edib. | Virtual maşınlarda nasazlıqları həll edin səhifəsinə baxın. |
412 | PRECONDITION_FAILED | If-Match dəyəri resursun cari versiyasına uyğun gəlmir və ya tələb olunan If-Match başlığı yoxdur. | Resursu yenidən oxuyun və dəyişikliyi onun yeni ETag dəyəri ilə təkrarlayın. |
422 | VALIDATION_FAILED | Sorğu etibarsızdır. field və details.errors problemləri göstərir. | Sorğunu düzəldin. Yoxlama xətaları bölməsinə baxın. |
429 | RATE_LIMITED | Çox sayda sorğu göndərmisiniz. | Retry-After başlığındakı saniyə sayı qədər gözləyin. Sorğu limiti bölməsinə baxın. |
500 | INTERNAL | Gözlənilməz xəta baş verib. | Sonra yenidən cəhd edin. Xəta təkrarlanarsa, onu X-Request-Id ilə bildirin. |
502 | PROVIDER_ERROR | Bulud işi qəbul edib və iş orada uğursuz olub, məsələn, yüklənə bilməyən obraz (image). Xəta təkrar cəhd edilə bilən kimi işarələnmir. | Mesajı oxuyun və sorğunu dəyişin. |
502 | "retryable": true ilə INTERNAL | API şlüzü xidmətə çata bilməyib. | Artan fasilələrlə yenidən cəhd edin. |
503 | PROVIDER_UNAVAILABLE | Bulud xidməti müvəqqəti olaraq əlçatan deyil. | Artan fasilələrlə yenidən cəhd edin. Bu xəta təkrar cəhd edilə biləndir. |
Bəzi sorğular regionun təklif etmədiyi imkan üçün də 404 Not Found qaytarır, məsələn, regionun təmin edə bilmədiyi saxlanma zamanı şifrləməni tələb etdikdə. Mesaj imkanı və regionu göstərir. Təkrar cəhd bu cavabı dəyişə bilməz.
İdxal edilmiş layihələr
Bu kodlar yalnız platforma operatorunun sizin üçün mövcud resursları ilə birlikdə idxal etdiyi layihələrdə görünür:
| Status | Kod | Mənası |
|---|---|---|
409 | IMPORTED_PROJECT_ACK_REQUIRED | Layihənin silinməsi idxalla gələn resursları da silir. Bunu təsdiqləmək üçün sorğu acknowledgeImportedProjectDestruction sahəsini true təyin etməlidir. |
403 | IMPORTED_PROJECT_PROTECTED | İdxaldan sonra müəyyən müddət ərzində layihəni silə bilməzsiniz. details.protectedUntil bunun hansı vaxta qədər olduğunu bildirir. |
409 | IMPORTED_PROJECT_IMPORT_INCOMPLETE | İdxal başa çatmayıb, ona görə layihəni silmək mümkün deyil. |
409 | IMPORTED_PROJECT_RELEASE_IN_PROGRESS | Operator layihəni azad edir və ya azad etmə uğursuz olub. |
409 | IMPORTED_BACKUP_PLAN_READ_ONLY | Ehtiyat nüsxə planı (backup plan) idxalla gələn ehtiyat nüsxələri (backup) saxlayır. Onu oxuya və ondan bərpa edə bilərsiniz, lakin onu dəyişə bilməzsiniz. |
Yoxlama xətaları
Etibarsız sorğu üçün 422 Unprocessable Entity cavabı bütün problemləri bir dəfəyə details.errors daxilində sadalayır. Hər elementdə bunlar var:
field: sahənin sorğudakı yolu, səviyyələr arasında nöqtələrlə, problem bütövlükdə gövdəyə aid olduqda isənull.code: problemin növü, məsələn,missingvə yastring_too_short.message: ingilis dilində təsvir.
Yuxarı səviyyədəki field birinci elementi təsvir edir, message isə bütün sahələri sadalayır. Sorğunu yenidən göndərməzdən əvvəl sadalanan bütün sahələri düzəldin.
Sorğu limiti
API şlüzü hər giriş məlumatının sorğu göndərmə sürətini məhdudlaşdırır. Hər API tokeninin, xidmət hesabı açarının və konsol seansının öz limiti var, giriş məlumatı olmayan sorğular isə mənbə IP ünvanı üzrə məhdudlaşdırılır. Limit davamlı sürətdən yuxarı qısa sıçrayışlara imkan verir.
API tokeni və ya xidmət hesabı açarı üçün limit hər giriş məlumatına və əlavə olaraq hər tenant-a, tenant-ın bütün giriş məlumatları üzrə birlikdə tətbiq olunur. Belə sorğunun hər cavabı bu başlıqları daşıyır:
| Başlıq | Dəyər |
|---|---|
X-RateLimit-Limit | Cari zaman pəncərəsinin icazə verdiyi sorğuların sayı. |
X-RateLimit-Remaining | Cari zaman pəncərəsində qalan sorğuların sayı. |
X-RateLimit-Reset | Zaman pəncərəsinin sıfırlanmasına qalan saniyələrin sayı, ən azı 1. |
Limiti aşdıqda şlüz RATE_LIMITED kodu, "retryable": true və gözləmə saniyələrinin sayını (ən azı 1) göstərən Retry-After başlığı ilə 429 Too Many Requests cavabını qaytarır. Növbəti sorğunu göndərməzdən əvvəl ən azı bu qədər gözləyin.
Bu limit REST API-yə göndərilən sorğulara aiddir. Tətbiq giriş məlumatlarının (application credential) limitləri üçün OpenStack API limitləri səhifəsinə baxın.
Asinxron əməliyyatlarda xətalar
202 Accepted sorğusunun işi uğursuz olduqda əməliyyatın state sahəsi FAILED olur, error sahəsində isə yuxarıdakı formatda xəta olur. Uğurlu əməliyyat tələb etdiyiniz nəyisə təmin etmək mümkün olmadıqda eyni formatda warning daşıya bilər. Sinxron və asinxron sorğular bölməsinə baxın.
API-nin qarşısındakı şəbəkədən gələn cavablar
Yerləşdirmə zamanı API-nin qarşısındakı proksi yuxarıdakı xəta formatında olmayan, məsələn, adi mətn gövdəsi ilə 500, 502, 503 və ya 504 cavabı qaytara bilər. Belə cavab sorğunuzun API-yə çatmadığını bildirir. Onu artan fasilələrlə və eyni Idempotency-Key ilə yenidən göndərin.
Xətalarda təkrar cəhd
- Cavabda
"retryable": trueolduqda, həmçinin xəta formatında olmayan500,502,503və ya504cavabından sonra yenidən cəhd edin. EyniIdempotency-Keydəyərini yenidən göndərin. İdempotent sorğular səhifəsinə baxın. - Hər təkrar cəhddən əvvəl daha uzun gözləyin, məsələn, 1, 2, 4, sonra isə 8 saniyə.
429cavabından sonra ən azıRetry-Aftervaxtı qədər gözləyin. - Digər
4xxxətalarını dəyişiklik etmədən təkrarlamayın. Əvvəlcə sorğunu, giriş məlumatını və ya resursun vəziyyətini düzəldin.