Может ли использование multipart / form-data лучше, чем JSON + Base64?

У меня есть сервер, и мне нужно загрузить файлы вместе с некоторыми полями с клиента на сервер. В настоящее время я использую стандартные данные multipart / form.

Однако я обнаружил, что использование multipart / form-data не идеально. Объекты на моем сервере могут иметь другие объекты, вложенные в них, и, таким образом, представлены как объект JSON с другими объектами JSON, встроенными в них.

Я хотел бы, чтобы клиент начал выполнять запросы POST / PUT с использованием представления JSON точно так же, как он ожидал бы в запросе GET к серверу, в режиме REST. Таким образом, мне не нужно сглаживать поля, которые могут быть вложены в пару слоев в объекте JSON, чтобы использовать multipart / form-data.

Проблема в том, что JSON не представляет двоичные данные. Multipart / form-data, похоже, не имеет способа представить поля, вложенные в значения других полей. Но он намного лучше справляется с загрузкой файлов.

Я не понимаю, как это спроектировать. Должен ли я просто попросить клиента загрузить JSON с полями, закодированными в base64, и получить 25% -ный результат? Или я должен иметь объект JSON, представленный как своего рода переменную "json" в запросе Multipart / form-data, и иметь двоичные файлы для загрузки в качестве другой переменной?


person genixpro    schedule 14.08.2013    source источник


Ответы (1)


Должен ли я просто попросить клиента загрузить JSON с полями, закодированными в base64, и получить 25% -ный результат?

Хит будет 33%, так как 4/3 = 1,33.

Или я должен представить объект JSON как своего рода переменную "json" в запросе Multipart / form-data, а двоичные файлы должны быть загружены как другая переменная?

Это должно сработать.

Вы также можете рассмотреть этот подход: отправьте все файлы с помощью multipart, а затем получите некоторые идентификаторы файлов в качестве ответа. Поместите эти идентификаторы в свой json и отправьте его как хотите. Этот подход может быть полезным, если у вас есть много сценариев, в которых вы отправляете файлы: вы всегда можете отправить их на сервер с одним и тем же запросом, а затем получить их идентификаторы; после этого делайте с ними то, что вам нравится.

person Anton Ryabyh    schedule 23.08.2013
comment
Интересен последний подход, защищающий отдельные вызовы (один для изображения Multipart, а другой для данных JSON). Единственная проблема - 2 вызова API вместо одного. Конечно, этот компромисс зависит от приложения. - person Satya Kalluri; 20.10.2014
comment
немного поздно говорить об этом, но если вы пойдете по маршруту вызова 2 API, вам также потребуется обработать очистку потерянного файла, когда вызов файла был успешным, но последующий вызов json не произошел. - person Surya Pratap; 29.05.2021