Bu kılavuzda, Merchant API tarafından döndürülen hataların nasıl ele alınacağı açıklanmaktadır. Hata yanıtı yapısını ve kararlılığını anlamak, hatalardan otomatik olarak kurtulabilen veya kullanıcılara anlamlı geri bildirimler sağlayabilen sağlam entegrasyonlar oluşturmak için çok önemlidir.
Genel Bakış
Merchant API isteği başarısız olduğunda API, standart bir HTTP durum kodu (4xx veya 5xx) ve hatayla ilgili ayrıntıları içeren bir JSON yanıt gövdesi döndürür.
Merchant API, hata ayrıntıları için AIP-193 standardını izler ve uygulamanızın belirli hata senaryolarını programatik olarak işlemesine olanak tanıyan, makine tarafından okunabilir bilgiler sağlar.
Hata yanıtı yapısı
Hata yanıtı; code, message ve status gibi standart alanları içeren bir JSON nesnesidir. Ayrıca, details dizisi de içerir. Hataları programatik olarak işlemek için details içinde @type değerinin type.googleapis.com/google.rpc.ErrorInfo olduğu bir nesne aramanız gerekir.
Bu ErrorInfo nesnesi, hatayla ilgili kararlı ve yapılandırılmış veriler sağlar:
- domain: Hatanın mantıksal gruplandırması, genellikle
merchantapi.googleapis.com. - metadata: Hatayla ilgili dinamik değerlerin bir haritası. Bu kanallar aşağıdakileri kapsar:
- REASON: Tam hatanın belirli ve sabit bir tanımlayıcısı (ör.
INVALID_NAME_PART_NOT_NUMBER,PERMISSION_DENIED_ACCOUNTS). Bu alan her zaman mevcuttur. Uygulama mantığınızda ayrıntılı hata işleme için bu alanı kullanın. - HELP_CENTER_LINK: Sorunu düzeltmek için ek bağlam ve talimatlar sağlar. Bu alan tüm hatalar için mevcut değildir ancak daha fazla bağlamın gerekebileceği hatalar için kapsamını zaman içinde genişletmeyi planlıyoruz.
- Diğer dinamik alanlar: Bağlam sağlayan diğer anahtarlar. Örneğin, geçersiz alanın adı (
FIELD_LOCATION) veya hataya neden olan değer (FIELD_VALUE).
- REASON: Tam hatanın belirli ve sabit bir tanımlayıcısı (ör.
Örnek hata yanıtları
Aşağıdaki JSON, kaynak adının hatalı biçimlendirildiği bir Merchant API hatasının yapısını göstermektedir.
{
"error": {
"code": 400,
"message": "[name] The part `account` of the resource name in field `name` must be a number, but has value: `abcd`.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"VARIABLE_NAME": "account",
"FIELD_LOCATION": "name",
"FIELD_VALUE": "abcd",
"REASON": "INVALID_NAME_PART_NOT_NUMBER"
}
}
]
}
}
Aşağıda, kimlik doğrulama hatası örneği verilmiştir:
{
"error": {
"code": 401,
"message": "The caller does not have access to the accounts: [1234567]",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "unauthorized",
"domain": "merchantapi.googleapis.com",
"metadata": {
"ACCOUNT_IDS": "[1234567]",
"REASON": "PERMISSION_DENIED_ACCOUNTS"
}
}
]
}
}
Hata alanlarının kararlılığı
Hata işleme mantığı yazarken hangi alanların güvenilir olduğunu ve hangilerinin değişebileceğini bilmek önemlidir.
- Kararlı alanlar:
details.metadata.REASON: Belirli hata tanımlayıcısı. Uygulamanızın kontrol akışı mantığı için bu alandan yararlanmanız gerekir.details.metadataanahtarları: Meta veri eşlemesindeki anahtarlar (ör.FIELD_LOCATION,ACCOUNT_IDS) sabittir.code: Üst düzey HTTP durum kodu (ör.400,401,503) kararlıdır.
Kararsız alanlar:
message: İnsan tarafından okunabilen hata mesajı kararlı değildir. Yalnızca geliştiricilerin hata ayıklama işlemleri için tasarlanmıştır.messagealanının metin içeriğini ayrıştıran veya bu içeriğe dayalı kod yazmayın. Bu içerik, netliği artırmak veya bağlam eklemek için önceden haber verilmeksizin değiştirilebilir.details.metadatadeğerleri: Anahtarlar sabit olsa da bilgilendirme anahtarlarının değerleri değişebilir. Örneğin, birHELP_CENTER_LINKanahtarı sağlanırsa işaret ettiği URL, önceden bildirimde bulunulmadan daha yeni bir doküman sayfasına güncellenebilir. Ancak daha önce de belirtildiği gibidetails.metadata.REASONdeğeri sabittir.
En iyi uygulamalar
Entegrasyonunuzun hataları sorunsuz bir şekilde işlemesini sağlamak için aşağıdaki en iyi uygulamaları izleyin.
Mantık için details.metadata.REASON kullanın
Bir hatanın nedenini belirlemek için her zaman metadata haritasındaki belirli REASON değerini kullanın. Birden fazla hata aynı durum kodunu paylaşabileceğinden yalnızca HTTP durum koduna güvenmeyin.
Hata mesajını ayrıştırmayın.
Kararlılık bölümünde belirtildiği gibi, message alanı insanlar tarafından kullanılmak üzere tasarlanmıştır.
Dinamik bilgilere (ör. hangi alanın geçersiz olduğu) ihtiyacınız varsa FIELD_LOCATION, VARIABLE_NAME gibi kararlı anahtarları kullanarak bu bilgileri metadata haritasından ayıklayın.
Eksponansiyel geri yüklemeyi uygulama
Geçici olarak kullanılamama veya sıklık sınırlaması olduğunu belirten hatalar için eksponansiyel geri yükleme stratejisi uygulayın. Yani yeniden denemeden önce kısa bir süre bekler ve her başarısız denemeden sonra bekleme süresini artırır.
quota/request_rate_too_high: Bu hata, belirli bir kota grubu için dakika kotanızı aştığınızı gösterir. İstek oranınızı azaltın.internal_error: Bunlar genellikle geçicidir. Eksponansiyel geri yüklemeyle yeniden deneme yapılıyor.
Merchant API Destek Ekibi ile iletişime geçme
Belirli bir hata hakkında Merchant API Destek Ekibi ile iletişime geçmeniz gerekiyorsa isteğinizde aşağıdaki bilgileri sağlayın:
- Alınan hata yanıtının tam metni
- API yönteminin adı
- İstek yükü
- Yöntemin çağrıldığı ve hataların alındığı zaman damgaları veya zaman aralığı