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