Hatalar
REST API hata biçimi, döndürdüğü durum kodları ve hata kodları, hız sınırlama ve güvenle yeniden denenebilecek hatalar için referans.
Bir istek başarısız olduğunda API, bir HTTP hata durumu ve hatayı açıklayan bir JSON gövdesi döndürür. Bu referans; biçimi, kodları ve bunların nasıl ele alınacağını listeler.
Hata biçimi
{
"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" }
]
}
}| Alan | Bulunduğu durum | Anlamı |
|---|---|---|
code | Her zaman | Aşağıdaki tablolardaki, makine tarafından okunabilir bir hata kodu. Programınızı bu alana göre dallandırın. |
message | Her zaman | İnsanlar için İngilizce bir açıklama. Ayrıştırmayın; programınızda code alanını kullanın. |
field | Hata tek bir istek alanıyla ilgiliyse | name veya Idempotency-Key gibi o alanın adı. |
details | Ek bağlam varsa | Koda bağlı yapılandırılmış veriler; örneğin bir silme işlemini engelleyen kaynakların listesi. |
retryable | Yalnızca değeri true olduğunda | Aynı isteği yeniden göndermek başarılı olabilir. Alan yoksa değeri false kabul edilir. |
API 400 Bad Request kullanmaz: işlemin şemasına uymayan bir istek 422 Unprocessable Entity döndürür.
Durum kodları ve hata kodları
| Durum | Kod | Anlamı | Ne yapılmalı |
|---|---|---|---|
400 | IDEMPOTENCY_KEY_REQUIRED | Bir API belirteci veya servis hesabı anahtarıyla gönderilen, kaynak oluşturan bir POST isteğinde Idempotency-Key başlığı yok. | Başlığı yeni bir UUID ile gönderin; yeniden denerken aynı UUID’yi kullanın. Bkz. Idempotent istekler. |
401 | UNAUTHENTICATED | Kimlik bilgisi eksik, yanlış, süresi dolmuş veya iptal edilmiş. | Authorization başlığını kontrol edin. Bkz. API belirteçleriyle kimlik doğrulama. |
403 | FORBIDDEN | Bu işlemi yapma izniniz yok. Varsa details.reason nedenini belirtir. | Bkz. Sorun giderme. |
403 | MFA_STEP_UP_REQUIRED | İşlem, konsol oturumunuzda yakın zamanda yapılmış bir iki adımlı doğrulama gerektirir. | Konsolda kimlik doğrulayıcı uygulamanızla doğrulayın ve yeniden deneyin. |
403 | MFA_SETUP_REQUIRED | İşlem iki adımlı doğrulama gerektirir ve hesabınızda iki adımlı doğrulama ayarlı değil. | İki adımlı doğrulamayı ayarlayın. |
403 | INTERACTIVE_SESSION_REQUIRED | İşlem bir API belirteci veya servis hesabı anahtarıyla yapılamaz. | İşlemi konsolda yapın. |
404 | NOT_FOUND | Kaynak yok ya da ona erişemiyorsunuz. API bu iki durumu birbirinden ayırmaz. | ID’yi ve projeyi kontrol edin. |
405 | METHOD_NOT_ALLOWED | Yol var, ancak bu yöntemle değil. | Yöntemi API referansında kontrol edin. |
409 | CONFLICT | İstek mevcut durumla çakışıyor; örneğin alınmış bir ad ya da zaten çalışan bir eylem. | Kaynağı okuyun ve çakışmayı çözün. retryable değeri true ise daha sonra yeniden deneyin. |
409 | QUOTA_EXCEEDED | İstek, aboneliğinizin bir kotasını ya da bir servis hesabının anahtar sayısı gibi bir ürün limitini aşar. Abonelik kotasında mesaj; kaynağı, limitini, kullanımını ve kota ID’sini belirtir. | Kaynakları serbest bırakın. Abonelik kotası için artış da isteyebilirsiniz. Bkz. Kotalar. |
409 | CAPACITY_UNAVAILABLE | Bölge isteği şu anda yerleştiremiyor. | Daha sonra yeniden deneyin ya da başka bir boyut seçin. Bu hata yeniden denenebilir. |
409 | DEPENDENCY_BLOCKED | Başka kaynaklar bu kaynağa bağlı. details bunları listeler; örneğin bir diskin bağlı olduğu sanal makine. | Önce bağımlılıkları kaldırın. |
409 | LOCKED | Kaynak değiştirilemez; örneğin yerleşik bir rol. | Yapılacak bir şey yok; kaynak olduğu gibi kalır. |
409 | DELETION_PROTECTED | Silme koruması açık. | Silme korumasını kapatın ve yeniden silin. |
409 | ROOT_VOLUME_WOULD_BE_DELETED, ATTACHED_VOLUME_WOULD_BE_DELETED | Sanal makineyi silmek, korunması gereken bir diski de sileceği için platform silme işlemini reddetti. | Bkz. Sanal makine sorunlarını giderme. |
412 | PRECONDITION_FAILED | If-Match değeri kaynağın güncel sürümüyle eşleşmiyor ya da gerekli If-Match başlığı eksik. | Kaynağı yeniden okuyun ve değişikliği yeni ETag değeriyle tekrarlayın. |
422 | VALIDATION_FAILED | İstek geçerli değil. field ve details.errors sorunları belirtir. | İsteği düzeltin. Bkz. Doğrulama hataları. |
429 | RATE_LIMITED | Çok fazla istek gönderdiniz. | Retry-After başlığındaki saniye sayısı kadar bekleyin. Bkz. Hız sınırlama. |
500 | INTERNAL | Beklenmeyen bir hata oluştu. | Daha sonra yeniden deneyin. Hata devam ederse X-Request-Id değeriyle bildirin. |
502 | PROVIDER_ERROR | Bulut işi kabul etti ve iş orada başarısız oldu; örneğin önyükleme yapamayan bir imaj. Hata yeniden denenebilir olarak işaretlenmez. | Mesajı okuyun ve isteği değiştirin. |
502 | "retryable": true ile INTERNAL | API ağ geçidi bir hizmete ulaşamadı. | Artan bekleme süreleriyle yeniden deneyin. |
503 | PROVIDER_UNAVAILABLE | Bir bulut hizmetine geçici olarak ulaşılamıyor. | Artan bekleme süreleriyle yeniden deneyin. Bu hata yeniden denenebilir. |
Bazı istekler, bölgenin sunmadığı bir özellik için de 404 Not Found döndürür; örneğin bölgenin sağlayamadığı bir yerde duraktaki veri şifrelemesi istediğinizde. Mesaj özelliği ve bölgeyi belirtir. Yeniden denemek bu yanıtı değiştiremez.
İçe aktarılan projeler
Bu kodlar yalnızca platform operatörünün, mevcut kaynaklarıyla birlikte sizin için içe aktardığı projelerde görünür:
| Durum | Kod | Anlamı |
|---|---|---|
409 | IMPORTED_PROJECT_ACK_REQUIRED | Projeyi silmek, içe aktarmayla gelen kaynakları da siler. Bunu onaylamak için istekte acknowledgeImportedProjectDestruction değeri true olarak ayarlanmalıdır. |
403 | IMPORTED_PROJECT_PROTECTED | İçe aktarmadan sonraki bir süre boyunca projeyi silemezsiniz. details.protectedUntil bu sürenin ne zamana kadar sürdüğünü belirtir. |
409 | IMPORTED_PROJECT_IMPORT_INCOMPLETE | İçe aktarma tamamlanmadığı için proje silinemez. |
409 | IMPORTED_PROJECT_RELEASE_IN_PROGRESS | Operatör projeyi serbest bırakıyor ya da bir serbest bırakma işlemi başarısız oldu. |
409 | IMPORTED_BACKUP_PLAN_READ_ONLY | Yedekleme planı, içe aktarmayla gelen yedekleri barındırır. Planı okuyabilir ve ondan geri yükleme yapabilirsiniz, ancak değiştiremezsiniz. |
Doğrulama hataları
Geçersiz bir istek için verilen 422 Unprocessable Entity yanıtı, tüm sorunları tek seferde details.errors içinde listeler. Her girdide şunlar bulunur:
field: alanın istekteki yolu (düzeyler arasında noktalarla) ya da sorun gövdenin tamamıyla ilgiliysenull.code: sorunun türü; örneğinmissingveyastring_too_short.message: İngilizce bir açıklama.
Üst düzeydeki field ilk girdiyi açıklar; message ise tüm alanları adlandırır. İsteği yeniden göndermeden önce listelenen tüm alanları düzeltin.
Hız sınırlama
API ağ geçidi, her kimlik bilgisinin ne kadar hızlı istek gönderebileceğini sınırlar. Her API belirtecinin, servis hesabı anahtarının ve konsol oturumunun kendi limiti vardır; kimlik bilgisi olmayan istekler ise kaynak IP adresine göre sınırlanır. Limit, sürekli hızın üzerinde kısa ani artışlara izin verir.
Bir API belirteci veya servis hesabı anahtarı için limit, kimlik bilgisi başına ve ayrıca kuruluş başına, kuruluşun tüm kimlik bilgileri için toplu olarak uygulanır. Bu tür bir isteğin her yanıtı şu başlıkları taşır:
| Başlık | Değer |
|---|---|
X-RateLimit-Limit | Geçerli zaman aralığının izin verdiği istek sayısı. |
X-RateLimit-Remaining | Geçerli zaman aralığında kalan istek sayısı. |
X-RateLimit-Reset | Zaman aralığının sıfırlanmasına kalan saniye sayısı; en az 1. |
Limiti aştığınızda ağ geçidi; RATE_LIMITED kodu, "retryable": true ve beklenecek saniye sayısını (en az 1) içeren bir Retry-After başlığıyla 429 Too Many Requests yanıtını verir. Bir sonraki isteği göndermeden önce en az bu süre kadar bekleyin.
Bu limit REST API’ye yapılan istekler için geçerlidir. Uygulama kimlik bilgilerinin limitleri için bkz. OpenStack API limitleri.
Eşzamansız işlemlerdeki hatalar
Bir 202 Accepted isteğinin işi başarısız olduğunda işlemin state değeri FAILED olur ve error alanı yukarıdaki biçimde bir hata içerir. Başarılı olan bir işlem, istediğiniz bir şey karşılanamadığında aynı biçimde bir warning taşıyabilir. Bkz. Eşzamanlı ve eşzamansız istekler.
API’nin önündeki ağdan gelen yanıtlar
Bir dağıtım sırasında API’nin önündeki bir ara sunucu (proxy), yukarıdaki hata biçiminde olmayan, örneğin düz metin bir gövdeyle 500, 502, 503 veya 504 yanıtı verebilir. Böyle bir yanıt, isteğinizin API’ye ulaşmadığı anlamına gelir. İsteği artan bekleme süreleriyle ve aynı Idempotency-Key ile yeniden deneyin.
Hataları yeniden deneme
- Yanıtta
"retryable": trueolduğunda ve hata biçiminde olmayan bir500,502,503veya504yanıtından sonra yeniden deneyin. AynıIdempotency-Keydeğerini yeniden gönderin. Bkz. Idempotent istekler. - Her yeniden denemeden önce daha uzun bekleyin; örneğin 1, 2, 4 ve ardından 8 saniye.
429yanıtından sonra en azRetry-Aftersüresi kadar bekleyin. - Diğer
4xxhatalarını değiştirmeden yeniden denemeyin. Önce isteği, kimlik bilgisini veya kaynağın durumunu düzeltin.