Вы можете либо кодировать его Base64, и отправлять в виде строки в сообщении JSON, либо можете POST или PUT двоичный файл как отдельный ресурс и ссылаться на него по идентификатору или URL-адресу в сообщении JSON. Последний подход является своего рода внеполосным каналом передачи данных, который довольно распространен в протоколах на основе XML (например, голосовой чат с использованием XMPP).
Вы могли бы даже довольно легко поддерживать гибридную модель, в результате чего:
- Маленькое изображение отправляется как
{"base64":"OGZmNjJmOWNhYzFlODE0NDBjYmYzNjhjYz..."}
;
- Большое изображение загружено в качестве ссылки,
{"ref":"http://myserver.com/bits/E4304205-29B7-48EE-A359-74250E19EFC4"}
.
Чтобы избежать двойного POST, необходимого для двоичных файлов с внешними ссылками, вы можете разработать некоторый протокол, позволяющий смешивать JSON и двоичные файлы за одну передачу. Но вряд ли прирост будет адекватно вознаграждать этот уровень усилий.
Наконец, с точки зрения дизайна, придерживайтесь простого решения, пока оно не станет проблемой.