Мы разрабатываем сервер с REST API, который принимает и отвечает с JSON. Проблема в том, что если вам нужно загружать изображения с клиента на сервер.
Заметим также, что я говорю о прецеденте, где сущность (пользователь) может иметь файлы (carPhoto, licensePhoto), а также иметь другие свойства (имя, адрес электронной почты...), но когда вы создаете нового пользователя, вы не отправьте эти изображения, они добавляются после процесса регистрации.
Решения, о которых я знаю, но каждый из них имеет некоторые недостатки
1. Используйте multipart/form-data вместо JSON
good: запросы POST и PUT как можно более RESTful, они могут содержать текстовые входы вместе с файлом.
минус: это не JSON больше, что намного легче тестировать, отлаживать и т.д. сравнить с multipart/form-datap >
2. Разрешить обновление отдельных файлов
Запрос POST для создания нового пользователя не позволяет добавлять изображения (что хорошо в нашем случае использования, как я сказал при начале), загрузка изображений выполняется с помощью запроса PUT как multipart/form-data, например, для пользователей/пользователей/4/carPhoto
good: все (кроме самого загружаемого файла) остается в JSON, его легко тестировать и отлаживать (вы можете записывать полные запросы JSON, не опасаясь их длины)
минусы: это не интуитивно понятно, вы не можете POST или PUT всех переменных сущности одновременно, а также этот адрес /users/4/carPhoto
можно рассматривать скорее как коллекцию (стандартный вариант использования для REST API выглядит так: /users/4/shipments
), Обычно вы не можете (и не хотите) GET/PUT каждую переменную объекта, например users/4/name. Вы можете получить имя с GET и изменить его с помощью PUT у пользователей /4. Если после идентификатора есть что-то, это обычно другая коллекция, например users/4/reviews
3. Использовать Base64
Отправьте его как JSON, но закодируйте файлы с Base64.
good: То же, что и в первом решении, это как сервис RESTful, насколько это возможно.
минус: еще раз, тестирование и отладка намного хуже (тело может иметь мегабайты данных), увеличивается размер и время обработки как на клиенте, так и на сервере
Я бы очень хотел использовать решение no. 2, но у него есть свои минусы... Любой может дать мне лучшее представление о том, "что лучше"?
Моя цель состоит в том, чтобы иметь услуги RESTful с максимально возможными стандартами, в то время как я хочу сохранить это как можно проще.