Отправка сжатого JSON в конечную точку API Laravel - PullRequest
0 голосов
/ 08 января 2019

Я провел несколько базовых тестов с использованием Apache Benchmark, и похоже, что публикация 500 записей из C # с использованием класса DeflateStream в PHP приводит к примерно 3-кратному увеличению скорости обработки и уменьшению полосы пропускания со 140 до 10 КБ только с дополнительными 2 % Увеличения ЦП на пост.

Сейчас я пытаюсь обновить мои существующие конечные точки API, чтобы, если старые соединители по-прежнему отправляли несжатые данные, они не ломались, но обновленные соединители, отправляющие сжатые данные, автоматически распаковывались. Хотя у меня есть доказательство концепции на простом PHP, с Laravel, но я не уверен, как объединить его с классом Request. Вот как начинается мой API:

public function BasicApi(Request $request)
{
    $messages = [
    ];

    $validator = Validator::make($request->all(), [
        'data' => 'required|array',
    ], $messages);
    if ($validator->fails()) {
        throw new UpdateResourceFailedException('Could not sync.', $validator->errors());
    }

    $reference_id = collect($request->input('data'))->pluck('reference_id');
    ........  more stuff  ........

}

С прямым PHP я смог найти способ фильтрации, был ли входящий код сжат или нет:

$incomingData = gzinflate(file_get_contents('php://input')); 
if (file_get_contents('php://input') != $incomingData && $incomingData !== FALSE) {
     $incomingData = gzinflate(file_get_contents('php://input'));
}
echo $source;

Что я должен сделать, чтобы иметь возможность отправлять сжатые данные Laravel API? Если я позволю Apache распаковать его автоматически, тогда все запросы будут экранированы следующим образом:

"{\"data\":[{\"reference_id\":\"75080\"...

Если я не позволю ему сделать это автоматически, то я не уверен, как внедрить входящее в Request объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...