РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
555 of 1392 menu

Метод pool

Метод pool класса Http позволяет выполнять несколько HTTP-запросов конкурентно (параллельно). Он принимает массив или коллекцию с описаниями запросов и возвращает массив объектов Response. Это особенно полезно, когда нужно отправить запросы к нескольким внешним сервисам одновременно, чтобы сократить общее время выполнения.

Синтаксис

<?php $responses = Http::pool(function ($pool) { return [ $pool->get('https://api.example.com/users'), $pool->get('https://api.example.com/posts'), $pool->get('https://api.example.com/comments'), ]; }); ?>

Пример

Давайте выполним три параллельных запроса к разным эндпоинтам API:

<?php use Illuminate\Support\Facades\Http; $res = Http::pool(function ($pool) { return [ $pool->get('https://jsonplaceholder.typicode.com/users/1'), $pool->get('https://jsonplaceholder.typicode.com/posts/1'), $pool->get('https://jsonplaceholder.typicode.com/comments/1'), ]; }); echo $res[0]->status(); echo $res[1]->status(); echo $res[2]->status(); ?>

Результат выполнения кода:

"200" "200" "200"

Пример

Выполним параллельные запросы с различными методами и передачей данных:

<?php use Illuminate\Support\Facades\Http; $res = Http::pool(function ($pool) { return [ $pool->get('https://api.example.com/users'), $pool->post('https://api.example.com/posts', [ 'title' => 'New Post', 'body' => 'Content', ]), $pool->put('https://api.example.com/users/1', [ 'name' => 'Updated User', ]), ]; }); echo $res[0]->body(); echo $res[1]->status(); echo $res[2]->status(); ?>

Результат выполнения кода:

"[ { 'id': 1, 'name': 'User 1' } ]" "201" "200"

Пример

Использование пула с общими параметрами для всех запросов:

<?php use Illuminate\Support\Facades\Http; $res = Http::withHeaders([ 'Authorization' => 'Bearer token123', 'Accept' => 'application/json', ])->pool(function ($pool) { return [ $pool->get('https://api.example.com/users'), $pool->get('https://api.example.com/posts'), $pool->get('https://api.example.com/comments'), ]; }); echo count($res); ?>

Результат выполнения кода:

"3"

Пример

Выполним пул запросов и обработаем полученные данные:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Http; class ApiController extends Controller { public function index() { $res = Http::pool(function ($pool) { return [ 'users' => $pool->get('https://api.example.com/users'), 'posts' => $pool->get('https://api.example.com/posts'), 'comments' => $pool->get('https://api.example.com/comments'), ]; }); $users = $res['users']->json(); $posts = $res['posts']->json(); $comments = $res['comments']->json(); return view('dashboard', [ 'users' => $users, 'posts' => $posts, 'comments' => $comments, ]); } } ?>

Смотрите также

  • метод get,
    который выполняет GET-запрос
  • метод post,
    который отправляет POST-запрос
  • метод withHeaders,
    который добавляет заголовки к запросу
  • метод json,
    который преобразует ответ в массив
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить