Лучший подход для загрузки файла через API REST из API-шлюза - PullRequest
0 голосов
/ 29 апреля 2020

Случай пользователя: Клиент может загрузить файл из publi c REST api в наше хранилище S3, а затем мы можем обработать файл с помощью последующих служб.

После проведения некоторых исследований Я могу найти 3 способа сделать это:

  1. Загрузка с использованием типа файла OCTET-STREAM
  2. Загрузить файл с помощью запроса данных формы
  3. Загрузить файл используя предварительно подписанный URL-адрес

В первых двух случаях пользователь отправит двоичный файл, и мы загрузим файл на S3 после проверки файла.

В третьем способе пользователь должен нажать 3 apis. Первый API для получения предварительно подписанного URL-адреса S3, который предоставит пользователю доступ для загрузки файла на S3. При втором попадании пользователь загрузит файл на предварительно подписанный URL-адрес s3. После того как пользователь завершит загрузку, он отправит запрос на обработку файла.

У нас есть какие-либо проблемы с безопасностью на шаге 3? Так как пользователь может неправильно использовать предварительно подписанный URL с вредоносным файлом.

Какой из этих методов лучше всего подходит в соответствии с отраслевой практикой?


Детали каждого подхода:

1. Загрузка с использованием типа файла OCTET-STREAM

Плюсы:

  • Этот метод удобен для загрузки типов файлов, которые можно открыть в некоторых приложениях, таких как xlsx.
  • 1 Хит API. Прямая загрузка файлов

Минусы:

  • Этот параметр не подходит для загрузки нескольких файлов. Если в будущем нам потребуется поддержка загрузки нескольких файлов, это следует изменить на multipart / form-data (A2).
  • Метаданные не могут быть отправлены в качестве параметра тела. Метаданные можно отправлять в заголовках.

2. Загрузите файл с помощью запроса данных формы

Пользователь загрузит файл с запросом API, прикрепив его в виде составной формы.

Плюсы

  • Мы можем отправлять несколько файлов одновременно.
  • Мы можем отправлять дополнительные параметры в теле.

3. Загрузите файл, используя предварительно подписанный URL-адрес

Минусы

  • Для загрузки файла клиенту нужно нажать 3 API. (2 попадания API для загрузки и затем еще одно попадание API для проверки процесса файла)
...