API. Предварительная загрузка файла
Создано api с использованием спецификации JSON:API. Но она не предусматривает загрузку файлов. И поэтому было принято решение создавать ресурсы в два этапа:
- Предварительная загрузка изображений во временную папку без привязки к ресурсу
- Сохранение ресурса с привязкой ранее загруженного изображения
Есть ли спецификация, описывающий данный метод сохранения? Как очищать временное хранилище от ненужных файлов?
Ответы (1 шт):
Для примера возьмем ресурс posts с полем image. Видится несколько вариантов:
1. Временное хранилище
Сначала загружаем файл во временную папку, а также заносим в бд. Например, в таблицу temporary_storage с полями id, type, path, created_at. Валидация файла проходит здесь же. Ссылка может быть такой /posts/upload. Возвращаем клиенту id и path.
Далее сохраняем сам ресурс. Перемещаем файл из временного хранилища в постоянное. И удаляем запись с таблицы temporary_storage.
При таком подходе можно удалять ненужные файлы, например, созданные более дня назад.
2. Сначала сохранение ресурса
Делаем поле image необязательным и добавляем поле status. Сохраняем ресурс без картинки и ставим статус черновика. Далее загружаем файл, валидируем его. Из-за статуса черновика мы не боимся ошибки загрузки файла.
3. Постоянное хранилище
Как предложил @Mike, можно создать отдельный ресурс для файлов, и связыать их с другими ресурсами. Но этот метод нам не совсем подходит из-за дополнительной сложности очистки ненужных файлов и валидации файлов.
Вывод: Первый метод кажется более универсальным и масштабируемым. Но второй способ определенно легче. На данном этапе мы склоняемся ко второму варианту.