Размещать двоичные данные в приложении RESTful

Я работаю над веб-приложением RESTful (Django+Piston). Запрос POST отправляет данные, закодированные с помощью Json, в веб-приложение. Это прекрасно работает для всех моих текстовых таблиц базы данных, но у меня также есть таблица, в которой хранятся текстовые и двоичные файлы. Как лучше всего разместить текстовые и двоичные данные в приложении RESTful?

1 ответ

Решение

Вы можете либо кодировать его Base64, и отправить его в виде строки в сообщении JSON, либо вы можете POST или PUT двоичный файл как отдельный ресурс и ссылаться на него по ID или URL в сообщении JSON. Последний подход является своего рода внеполосным каналом передачи данных, который довольно распространен в протоколах на основе XML (например, голосовой чат с использованием XMPP).

Вы могли бы даже довольно легко поддержать гибридную модель, посредством чего:

  1. Маленькое изображение отправляется как {"base64":"OGZmNjJmOWNhYzFlODE0NDBjYmYzNjhjYz..."};
  2. Большое изображение загружается в качестве ссылки, {"ref":"http://myserver.com/bits/E4304205-29B7-48EE-A359-74250E19EFC4"},

Чтобы избежать двойного POST, необходимого для двоичных файлов с внешними ссылками, вы можете разработать некоторый протокол, позволяющий смешивать JSON и двоичные файлы за одну передачу. Но прирост прибыли вряд ли будет адекватно вознаграждать этот уровень усилий.

Наконец, с точки зрения дизайна, придерживайтесь простого решения, пока оно не станет проблемой.

Другие вопросы по тегам