FOS Rest Bundle: можно ли получить ответ? - PullRequest
0 голосов
/ 28 сентября 2018

Я прочитал документацию Bundle (rest-bundle FOS) и не могу найти ничего при сжатии ответа, и я не могу настроить сжатие на уровне веб-сервера.

Есть ли способ заставить пакет вернуть сжатый ответ gzip (или deflate)?

В настоящее время я думаю, что нужно реализовать прослушиватель ответа, перехватить его и сжать, но я чувствую, что, вероятно, существует выходтам.

Редактировать

Мне не удалось найти в FOS Rest Bundle ничего, что позволило бы - скорее всего, они ожидают, что это будет сделано на уровне сервера.Решением было создать подписчика на событие:

public function getSubscribedEvents() {
    return [KernelEvents::RESPONSE => ['compressResponse', -256]];
}

В своем методе ответа сжатия я использую deflate для содержимого тела и добавляю правильный заголовок кодирования содержимого:

public function compressResponse(FilterResponseEvent $event)
{
    $response = $event->getResponse();

    if ($response->headers->get('content-type') !== 'application/json') {
        return;
    }

    $response->setContent(gzdeflate($response->getContent()));
    $response->headers->set('Content-encoding', 'deflate');
}

Это хорошо подходит нашим целям.

1 Ответ

0 голосов
/ 01 октября 2018

Мы осуществляем это на уровне Apache для того, чтобы включить сжатие веб-сервера для вывода application / json, а также с помощью следующего conf.

Скопировано из стандартного deflate conf в PHP buildpack иперезаписав его с помощью:

<IfModule filter_module>
   <IfModule deflate_module>
   AddOutputFilterByType DEFLATE application/json text/html text/plain text/xml text/css text/javascript application/javascript
   </IfModule>
</IfModule>

Добавление application / json к этому конфу помогло нам.

...