Skip to content

Guide

JSON API'de Dosya Yüklemede Base64 Kullanımı

JSON'ın ikili veri taşımak için doğal bir yolu yoktur. Base64 bunun çözümüdür — ve her çözümün bir bedeli vardır.

By Published

RFC 8259’da tanımlanan JSON veri modelinin yerleşik bir ikili tipi yoktur. Her değer ya string, sayı, boolean, null, nesne ya da dizidir ve string’ler geçerli Unicode metin olmak zorundadır. Ham bir dosyanın baytları geçerli metin sayılmayan dizilimler içerebilir, dolayısıyla bunları doğrudan bir JSON string’inin içine koymanın bir yolu yoktur. Base64, ikiliyi 64 yazdırılabilir ASCII karakterden oluşan kısıtlı bir alfabeyle yeniden kodlayarak bu sorunu çözer — bir JSON string’ine, bir XML belgesine veya bir URL’ye gömülmesi güvenlidir, bedeli ise orijinal dosyadan kabaca %33 daha fazla bayttır.

Yük gerçekte nasıl görünür

Tipik bir dosya yükleme JSON gövdesi, kodlanmış veriyi sunucunun dosyayı yeniden oluşturmak için ihtiyaç duyduğu meta verilerle birlikte bir alana sarar:

{ "filename": "fatura.pdf", "contentType": "application/pdf", "data": "JVBERi0xLjQK..." }

Sunucu, alındığında data alanını ham baytlara geri çözer — kodlama adımının tam tersi — ve bunu depolamaya yazar ya da doğrudan işler. Bu desen, yalnızca JSON konuşmak isteyen webhook yüklerinde ve API istemcilerinde yaygındır, çünkü multipart yüklemelerin gerektirdiği ek content-type müzakeresinden kaçınır.

Ödünleşim: boyut ve istek sınırları

YaklaşımBoyut fazlalığıEn uygun olduğu yer
JSON içinde Base64~%33 daha büyükKüçük dosyalar, yalnızca JSON konuşan istemciler, webhook'lar
multipart/form-dataYok (minimal sınır işareti fazlalığı)Büyük dosyalar, standart yükleme uç noktaları

Çoğu API gateway, yük dengeleyici ve sunucu çatısı azami bir istek gövdesi boyutu dayattığından, %33’lük fazlalık gerçekte yüklenebilecek dosya boyutunu doğrudan azaltır. 10 MB ile sınırlı bir gateway, Base64-içinde-JSON yüklemelerini fiilen yaklaşık 7,5 MB gerçek dosya içeriğiyle sınırlar — kodlandıktan sonra “sınırın altında” olan bir dosyanın gerçekten geçeceğini varsaymadan önce sağlayıcınızın belgelenmiş sınırlarıyla karşılaştırmakta fayda var.

Base64'ü tamamen atlamanız gereken durumlar

Birkaç megabaytın ötesindeki her şey için, ya da istek boyutunun veya yükleme hızının gerçekten önemli olduğu her uç nokta için multipart/form-datadaha iyi bir araçtır: dosyanın ham baytlarını yalnızca küçük bir sınır işareti fazlalığıyla gönderir, %33’lük vergi yoktur. Düz HTML <input type="file"> formlarının FormData API’si üzerinden doğal olarak kullandığı yöntem de budur. JSON içinde Base64’e özellikle istemci yalnızca JSON gönderebiliyorsa, dosya küçükse ya da yükün tek bir JSON nesnesi içinde kendi kendine yetmesi gerekiyorsa başvurun — her yükleme için varsayılan yöntem olarak değil.

Frequently asked questions

İkili veriyi doğrudan JSON'ın içine neden koyamıyorum?
JSON'ın grameri yalnızca string, sayı, boolean, null, nesne ve dizi tanımlar — string'ler geçerli Unicode metin olmak zorundadır. Ham ikili baytlar geçerli metin sayılmayan bayt dizileri içerebilir, bu yüzden önce metin-güvenli bir gösterime dönüştürülmeden bir JSON string'inin içine gömülemezler; Base64'ün yaptığı tam olarak budur.
Bir dosyayı JSON API için Base64 ile kodlamanın boyut maliyeti nedir?
Ham dosyadan yaklaşık %33 daha büyük, artı JSON string kaçış karakterlerinin eklediği (genelde ihmal edilebilir, çünkü Base64 alfabesi kaçış gerektiren karakterlerden kaçınır) küçük bir fazlalık. 3 MB'lık bir PDF, JSON gövdesi içinde yaklaşık 4 MB Base64 metnine dönüşür.
JSON içinde Base64 yerine ne zaman multipart form veri kullanmalıyım?
Büyük dosyalar için, ya da istek boyutunun önemli olduğu her yüklemede — multipart/form-data dosyayı kodlama fazlalığı olmadan ham bayt olarak iletir ve dosya yükleme uç noktaları için standart yaklaşımdır (düz HTML formları dahil). JSON içinde Base64 ise daha çok küçük dosyalarda, yalnızca JSON konuşabilen API istemcilerinde veya tek bir JSON nesnesi içinde kendi kendine yetmesi gereken webhook yüklerinde tercih edilir.
JSON içindeki Base64, istek boyutu sınırlarına dahil olur mu?
Evet, ve %33'lük fazlalık sınıra daha hızlı ulaşmanızı sağlar. Bir API gateway veya sunucu istek gövdesini örneğin 10 MB ile sınırlıyorsa, Base64 ile kodlanmış bir dosyanın sığması için ham hâlinin yaklaşık 7,5 MB'ın altında olması gerekir — kodlandıktan sonra gerçekten yüklenip yüklenmeyeceğini varsaymadan önce bunu kontrol etmekte fayda var.

Sources & references

Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.

Related

Published September 25, 2026