2.6 KiB
JSON'da Bytes'i Base64 Olarak Kullanma
Uygulamanız JSON veri alıp gönderiyorsa ve bunun içine ikili (binary) veri eklemeniz gerekiyorsa, veriyi base64 olarak encode edebilirsiniz.
Base64 ve Dosyalar
İkili veriyi JSON içinde encode etmek yerine, yükleme için Request Files ve gönderim için Custom Response - FileResponse kullanıp kullanamayacağınıza önce bir bakın.
JSON sadece UTF-8 ile encode edilmiş string'ler içerebilir, dolayısıyla ham bytes içeremez.
Base64 ikili veriyi string olarak encode edebilir, ancak bunu yapmak için orijinal ikili veriden daha fazla karakter kullanır; bu yüzden genellikle normal dosyalardan daha verimsiz olur.
Base64'ü sadece gerçekten JSON içine ikili veri koymanız gerekiyorsa ve bunun için dosya kullanamıyorsanız tercih edin.
Pydantic bytes
bytes alanları olan bir Pydantic model tanımlayabilir, ardından model config'inde val_json_bytes kullanarak giriş JSON verisini base64 ile doğrulamasını (validate) söyleyebilirsiniz; bu doğrulamanın bir parçası olarak base64 string'i bytes'a decode eder.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
/docs'a bakarsanız, data alanının base64 ile encode edilmiş bytes beklediğini görürsünüz:
Şöyle bir request gönderebilirsiniz:
{
"description": "Some data",
"data": "aGVsbG8="
}
/// tip | İpucu
aGVsbG8= değeri, hello kelimesinin base64 encoding'idir.
///
Sonrasında Pydantic base64 string'ini decode eder ve modelin data alanında size orijinal bytes'ı verir.
Şöyle bir response alırsınız:
{
"description": "Some data",
"content": "hello"
}
Çıkış Verisi için Pydantic bytes
Çıkış verisi için de model config'inde ser_json_bytes ile bytes alanları kullanabilirsiniz; Pydantic JSON response üretirken bytes'ı base64 olarak serialize eder.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
Giriş ve Çıkış Verisi için Pydantic bytes
Elbette, aynı modeli base64 kullanacak şekilde yapılandırıp hem girişte (validate) val_json_bytes ile hem de çıkışta (serialize) ser_json_bytes ile JSON veri alıp gönderirken kullanabilirsiniz.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
