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