Выбор ответа Middle Мобильный system design обновлено

Загрузка файлов напрямую в хранилище

Вопрос

Зачем мобильный клиент загружает медиа по presigned URL напрямую в объектное хранилище, а не через API-сервер?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы не гонять гигабайты через API: сервер выдаёт временную ссылку и узнаёт о загрузке. API выдаёт ссылку с ограниченным сроком и правами на запись конкретного объекта, клиент загружает в S3-совместимое хранилище, а затем сообщает API (или хранилище вызывает обработчик), что файл готов к обработке.

Варианты ответа

  1. Так безопаснее: ключи хранилища лежат в приложении, и API-сервер не может их перехватить
  2. Чтобы не гонять гигабайты через API: сервер выдаёт временную ссылку и узнаёт о загрузкеправильный ответ
  3. Presigned URL работают без интернета: файл ставится в очередь хранилища прямо на устройстве
  4. API-серверы на REST не умеют принимать файлы больше нескольких мегабайт в теле запроса

Разбор

API выдаёт ссылку с ограниченным сроком и правами на запись конкретного объекта, клиент загружает в S3-совместимое хранилище, а затем сообщает API (или хранилище вызывает обработчик), что файл готов к обработке. Ключи хранилища остаются на сервере. API-серверы принимать файлы умеют, но это неэффективно и дорого.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.