json_encode() veya json_decode() başarısız olduğunda hata kontrol edilmezse uygulama boş yanıt, null veya eksik veriyle çalışmaya devam edebilir. JSON_THROW_ON_ERROR, JSON hatalarını JsonException olarak yakalanabilir hâle getirir.
Decode işleminde null belirsizliğini kaldırın
try {
$data = json_decode($payload, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
error_log('JSON decode failed: ' . $e->getMessage());
http_response_code(400);
exit('Geçersiz JSON');
}
JSON içindeki geçerli null değeriyle hata sonucu dönen null böylece birbirine karışmaz.
Encode hatasını da aynı yöntemle yönetin
try {
$json = json_encode(
$response,
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE
);
} catch (JsonException $e) {
error_log('JSON encode failed: ' . $e->getMessage());
http_response_code(500);
exit('Yanıt üretilemedi');
}
JSON_UNESCAPED_UNICODE Türkçe karakterleri okunabilir biçimde bırakır; tek başına hata yönetimi sağlamaz.
Geçersiz UTF-8 kaynağını düzeltin
Veritabanı bağlantısı, dosya veya dış servis farklı karakter kodlaması döndürüyorsa JSON üretimi başarısız olabilir. Hatalı baytları sessizce yok eden bayraklara geçmeden önce veri kaynağının UTF-8 ayarını düzeltin.
JSON_PARTIAL_OUTPUT_ON_ERROR kullanımına dikkat edin
PHP kılavuzunda JSON_PARTIAL_OUTPUT_ON_ERROR seçeneğinin JSON_THROW_ON_ERROR üzerinde önceliği olduğu belirtilir. Kısmi veri kabul edilmeyecek API yanıtlarında bu iki bayrağı birlikte kullanmayın.
İstemciye iç hata ayrıntısı göstermeyin
Exception mesajı loga yazılabilir; dosya yolu, SQL veya kişisel veri içerebilecek ayrıntıları son kullanıcıya döndürmeyin. İstemciye sabit hata kodu, sunucu loguna bağlama kimliği eklemek daha güvenlidir.
Başvuru: PHP JSON sabitleri ve JSON_THROW_ON_ERROR RFC'si.