Эффективный способ загрузки защищенных файлов в Symfony

У меня есть проект Symfony, который дает возможность мобильному приложению получать статьи с изображениями через API. API защищен и возвращает список статей. Одна из деталей статьи - фотография, хранящаяся вне Document Root, поэтому она недоступна из веб-браузера. Photo uri - это ссылка на контроллер Symfony, который проверяет, может ли вошедший в систему пользователь загрузить файл. Если да, используйте заголовки, чтобы вернуть изображение.

API выглядит так:

[
    {
        "id": 7,
        "title": "Test",
        "photo": "https://mypage.com/user/files/ewr23r23",
        "version: 2,
        "status": "n"
    },  
    {
        "id": 9,
        "title": "Foo",
        "photo": "https://mypage.com/user/files/h24t54ef",
        "version: 4,
        "status": "m"
    }
]

Таким образом, мобильное приложение запрашивает артикулы через API (1 запрос). Затем загружает фотографии. Итак, если у нас есть 10 статей, у нас есть 11 запросов. 10 для фотографий и 1 для API. Вы знаете какое-нибудь решение, которое бы это оптимизировало? Чтобы было меньше запросов? Мы используем управление версиями, поэтому при загрузке мобильного приложения через API изменяется не весь список статей, а только его.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
48
1

Ответы 1

Поскольку ваш API доступен для мобильного приложения, вы можете использовать расширение PHP ZIP (документация здесь), чтобы объединить все свои изображения в один Zip-файл, который вы затем загрузите и распакуйте с помощью клиентского приложения.

На мой взгляд, лучший способ сделать это - реализовать Контроллер, который будет принимать в качестве аргумента список изображений и возвращать zip-файл. Мы, вероятно, сможем кэшировать эти файлы (как на стороне клиента, так и на стороне сервера), чтобы сэкономить немного вычислительной мощности.

Это был бы хороший вариант, если бы у нас был статический список статей. Но мы обновляем его, поэтому не загружаем все статьи каждый раз. Я обновил вопросы по этому поводу.

Tom 27.04.2018 10:39

Вы могли бы объединить файлы «на лету» с контроллером, который принимает в качестве параметра список файлов, но вам нужно будет решить, какой вариант вы предпочитаете, чтобы оптимизировать количество запросов или нагрузку на сервер, потому что такая операция может быстро стать дорогим

SeekDaSky 27.04.2018 13:22

Точно. Не знаю, что дороже за весь комплект ЛАМПЫ. 5 запросов для API (загрузить Symfony, проверить учетные данные с помощью запроса Doctrine) и 4 изображения или 1 запрос и заархивировать 5 файлов. А что насчет 100 изображений. Даже не знаю, как это проверить.

Tom 28.04.2018 13:44

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

SeekDaSky 28.04.2018 18:18

Другие вопросы по теме