Как я могу использовать кодирование передачи chunked в Laravel?

Добрый день. Мне интересно, могу ли я использовать chunked Transfer Encoding (далее CTE) в ответе API? У меня есть большие данные в базе данных, и мне нужно передать их клиенту в одном запросе. Я много читал о механизме CTE, но, к сожалению, не смог найти, как это реализовать.

Одна важная вещь для упоминания: нет нумерации страниц. Предполагается, что это автономная система, которая возвращает данные обратно в конечную точку клиента, а не на веб-страницу.

Как я уже говорил, данные хранятся в базе данных. Единственная проблема состоит в том, как разделить данные на сегменты (порции) и отправить их в одном ответе API (один за другим).

Благодарю.

4

Решение

Я думаю, что вас может заинтересовать метод чанков в Query Builder.

Если вам нужно работать с тысячами записей базы данных, рассмотрите возможность использования
метод чанка. Этот метод извлекает небольшую часть результатов
за раз и подает каждый кусок в замыкание для обработки. это
Метод очень полезен для написания команд Artisan, которые обрабатывают
тысячи записей. Например, давайте работать со всеми пользователями
таблица по 100 записей за раз:

$response = new \Symfony\Component\HttpFoundation\StreamedResponse(function() {
$handle = fopen('php://output', 'w');

DB::table('users')->orderBy('id')->chunk(100, function ($users) use($handle) {
foreach ($users as $user) {
fputs($handle, json_encode($user));
}
});

fclose($handle);
});

return $response;

Дальнейшее чтение: https://laravel.com/docs/master/queries#chunking-results

Кодирование передачи по частям

Насколько я знаю, Laravel делает это по умолчанию если вы возвращаете ответ JSON.

ОБНОВИТЬ:

Мое решение было излишне запутанным и сложным. Я удалил StreamedResponse так как в этом действительно не было никакой необходимости. Смотрите обновленный пример ниже.

$json_response = collect();

DB::table('users')->orderBy('id')->chunk(100, function ($users) use($json_response) {
foreach ($users as $user) {
$json_response->push($user);
}
});

return $json_response->toJson();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]