Создание сущности и загрузка файлов на сервер
Работаю рест эндпоинтом для создания сущности контракта с помощью spring-экосистемы. Сущность предполагает возможность прикрепить сканы документов. Возник вопрос как лучше выполнить запрос на создание:
- одним запросом, т.е. сразу прикрепить файлы к данным сущности
- или поэтапно сначала создать сущность, а потом отправить файлы отдельным запросом
Какой подход выбрать? Какие ньюансы есть у каждого из способов?
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Наиболее универсальный (использую много лет в ECMS) такой вариант:
- Сначала клиент просит сервер сгенерировать ему URI для загрузки содержимого файла в хранилище типа (AWS S3 или Azure Blob Storage). У этого URI есть срок жизни, т.е. он дает право, скажем, в течении 10 минут загрузить файл. Так же вместе с этим URI может передаваться идентификатор содержимого сгенерированного сервером (назовем его
blob_id). - Клиент загружает содержимое по этому URI в хранилище.
- Клиент создает контракт через API сервера, при этом он указывает ссылку на содержимое (
blob_id). - Регулярно запускается процедура, которая удаляет загруженные файлы, для которых так и не были созданы контракты.
Эта схема позволяет:
- создавать контракты атомарно, т.е. не будет контрактов без файлов, которые по сути не должны существовать по бизнес правилам.
- разгружает сервер, т.к. загрузка файлов идет напрямую в хранилище. Не нужно временное хранилище на сервере и т.д.
Плата - это усложнение логики и необходимость поддерживать еще процедуру очистки.