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

Bir doğrulama hatası
{
  "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" }
    ]
  }
}
AlanBulunduğu durumAnlamı
codeHer zamanAşağıdaki tablolardaki, makine tarafından okunabilir bir hata kodu. Programınızı bu alana göre dallandırın.
messageHer zamanİnsanlar için İngilizce bir açıklama. Ayrıştırmayın; programınızda code alanını kullanın.
fieldHata tek bir istek alanıyla ilgiliysename veya Idempotency-Key gibi o alanın adı.
detailsEk bağlam varsaKoda bağlı yapılandırılmış veriler; örneğin bir silme işlemini engelleyen kaynakların listesi.
retryableYalnızca değeri true olduğundaAynı 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ı

DurumKodAnlamıNe yapılmalı
400IDEMPOTENCY_KEY_REQUIREDBir 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.
401UNAUTHENTICATEDKimlik bilgisi eksik, yanlış, süresi dolmuş veya iptal edilmiş.Authorization başlığını kontrol edin. Bkz. API belirteçleriyle kimlik doğrulama.
403FORBIDDENBu işlemi yapma izniniz yok. Varsa details.reason nedenini belirtir.Bkz. Sorun giderme.
403MFA_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.
403MFA_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.
403INTERACTIVE_SESSION_REQUIREDİşlem bir API belirteci veya servis hesabı anahtarıyla yapılamaz.İşlemi konsolda yapın.
404NOT_FOUNDKaynak yok ya da ona erişemiyorsunuz. API bu iki durumu birbirinden ayırmaz.ID’yi ve projeyi kontrol edin.
405METHOD_NOT_ALLOWEDYol var, ancak bu yöntemle değil.Yöntemi API referansında kontrol edin.
409CONFLICTİ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.
409QUOTA_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.
409CAPACITY_UNAVAILABLEBölge isteği şu anda yerleştiremiyor.Daha sonra yeniden deneyin ya da başka bir boyut seçin. Bu hata yeniden denenebilir.
409DEPENDENCY_BLOCKEDBaş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.
409LOCKEDKaynak değiştirilemez; örneğin yerleşik bir rol.Yapılacak bir şey yok; kaynak olduğu gibi kalır.
409DELETION_PROTECTEDSilme koruması açık.Silme korumasını kapatın ve yeniden silin.
409ROOT_VOLUME_WOULD_BE_DELETED, ATTACHED_VOLUME_WOULD_BE_DELETEDSanal makineyi silmek, korunması gereken bir diski de sileceği için platform silme işlemini reddetti.Bkz. Sanal makine sorunlarını giderme.
412PRECONDITION_FAILEDIf-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.
422VALIDATION_FAILEDİstek geçerli değil. field ve details.errors sorunları belirtir.İsteği düzeltin. Bkz. Doğrulama hataları.
429RATE_LIMITEDÇok fazla istek gönderdiniz.Retry-After başlığındaki saniye sayısı kadar bekleyin. Bkz. Hız sınırlama.
500INTERNALBeklenmeyen bir hata oluştu.Daha sonra yeniden deneyin. Hata devam ederse X-Request-Id değeriyle bildirin.
502PROVIDER_ERRORBulut 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 INTERNALAPI ağ geçidi bir hizmete ulaşamadı.Artan bekleme süreleriyle yeniden deneyin.
503PROVIDER_UNAVAILABLEBir 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:

DurumKodAnlamı
409IMPORTED_PROJECT_ACK_REQUIREDProjeyi silmek, içe aktarmayla gelen kaynakları da siler. Bunu onaylamak için istekte acknowledgeImportedProjectDestruction değeri true olarak ayarlanmalıdır.
403IMPORTED_PROJECT_PROTECTEDİçe aktarmadan sonraki bir süre boyunca projeyi silemezsiniz. details.protectedUntil bu sürenin ne zamana kadar sürdüğünü belirtir.
409IMPORTED_PROJECT_IMPORT_INCOMPLETEİçe aktarma tamamlanmadığı için proje silinemez.
409IMPORTED_PROJECT_RELEASE_IN_PROGRESSOperatör projeyi serbest bırakıyor ya da bir serbest bırakma işlemi başarısız oldu.
409IMPORTED_BACKUP_PLAN_READ_ONLYYedekleme 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 ilgiliyse null.
  • code: sorunun türü; örneğin missing veya string_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ıkDeğer
X-RateLimit-LimitGeçerli zaman aralığının izin verdiği istek sayısı.
X-RateLimit-RemainingGeçerli zaman aralığında kalan istek sayısı.
X-RateLimit-ResetZaman 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": true olduğunda ve hata biçiminde olmayan bir 500, 502, 503 veya 504 yanıtından sonra yeniden deneyin. Aynı Idempotency-Key değerini yeniden gönderin. Bkz. Idempotent istekler.
  • Her yeniden denemeden önce daha uzun bekleyin; örneğin 1, 2, 4 ve ardından 8 saniye. 429 yanıtından sonra en az Retry-After süresi kadar bekleyin.
  • Diğer 4xx hatalarını değiştirmeden yeniden denemeyin. Önce isteği, kimlik bilgisini veya kaynağın durumunu düzeltin.

Bu sayfada