Spring Boot Rest API - входной файл + конечные точки - PullRequest
0 голосов
/ 18 января 2020

У меня общий вопрос об архитектуре, который я должен использовать для своей конкретной проблемы c.

У меня есть файл .TSV с некоторой информацией, и моя задача - создать приложение REST API, которое будет использовать этот файл .TSV, и будет 3 конечных точки API REST. Каждая конечная точка будет возвращать JSON данные, которые я обработал из файла .TSV.

Мой вопрос: я должен написать какой-нибудь метод POST, который загрузит файл TSV, и я сохраню его, например, в сеансе и выполню логи c с использованием конечных точек API?

Или я должен размещать содержимое файла TFS как JSON в каждом запросе к указанной конечной точке c?

Я не знаю, как все это склеить.

Нет никаких требований к БД. Программа будет протестирована только с многочисленными запросами через API, и я не знаю, как обрабатывать или хранить содержимое .TSV в моем приложении, чтобы один пользователь мог вызывать все три конечные точки последовательно над одними и теми же данными без повторной загрузки файла TSV.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Я считаю, что решение будет зависеть от размера файла. Хранение файла в памяти не может быть хорошим подходом, если файл очень большой. Кроме того, сохранение файла в сеансе может быть плохим, потому что, если вам потребуется масштабировать службу в будущем, вы не сможете это сделать. Даже хранение файла в каталоге / tmp также может быть плохим подходом, поскольку решение по-прежнему не масштабируется.

Хорошей идеей будет использование службы хранения, такой как AWS S3 или Google Firebase или любые другие связанные. Когда вы вызываете один из трех ваших REST, ваше приложение проверяет, не был ли этот файл еще не обработан, читает этот файл, обрабатывает все, что вы хотите, и сохраняет результат в своем S3 Bucket (если вы не хотите сохранять обработанные файлы , вы можете использовать политику хранения на S3 для удаления файла после X периода времени). И только после этого вы вернете результат. Как видите, это синхронное решение.

Если для обработки файлов требуется много ресурсов процессора и это занимает много времени, вам понадобится асинхронное решение. Таким образом, вместо обработки файлов непосредственно при вызове REST API, вам придется создать другое приложение, которое будет считывать этот файл из S3, обрабатывать его и сохранять. Все асинхронно. А ваш REST API только получит файл из S3 и вернет его.

0 голосов
/ 18 января 2020

Лучше загрузить файл, а затем выполнить обработку на сервере. Файл будет загружен в одном запросе, и лучше, чем отправлять несколько запросов.

...