Как я могу делать неблокирующие запросы API в Laravel - PullRequest
0 голосов
/ 28 апреля 2019

Я создал простой API в Laravel, где пользователь может загрузить изображение с помощью POST.

В моем контроллере я сохраняю изображение, а затем хочу отправить его во внешний API для его классификации.

Этот вызов API занимает несколько секунд, и я не хочу, чтобы мое приложение Laravel тем временем блокировалось.

Можно ли каким-то образом запустить его асинхронно?Есть ли эквивалент PHP-обещаниям узла в PHP?

Редактировать: Я читал очереди, но рабочий процесс не будет также заблокирован во время ожидания ответа внешнего API?

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Вы можете использовать Laravel Queues , чтобы отложить трудоемкую часть (например, вызовы API) для фоновых заданий.

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

0 голосов
/ 22 июля 2019

Вы могли бы рассмотреть возможность использования Обещаний Guzzle и отправлять запросы в параллельном режиме.

Библиотека находится здесь: https://github.com/guzzle/promises.

Клиент Guzzle упаковывает обещания с помощью магических методов, таких как ...

$promise = $client->getAsync('http://httpbin.org/get');
$promise = $client->deleteAsync('http://httpbin.org/delete');
$promise = $client->headAsync('http://httpbin.org/get');
$promise = $client->optionsAsync('http://httpbin.org/get');
$promise = $client->patchAsync('http://httpbin.org/patch');
$promise = $client->postAsync('http://httpbin.org/post');
$promise = $client->putAsync('http://httpbin.org/put');

... документация для этого можетможно найти здесь:

Асинхронные запросы Guzzle: http://docs.guzzlephp.org/en/stable/quickstart.html#async-requests

Он имеет несколько понятий, таких как wait, then, queue и resolve.Они помогают вам делать асинхронные запросы, имея полный контроль над тем, что разрешать синхронно.

При этом также можно будет получать агрегированные результаты, что означает, например, что вы можете запрашивать ваши user-api и вашиprojects-api и дождитесь возвращения некоторых результатов, чтобы можно было создать один единственный ответ json, содержащий объединенные данные из двух источников.

Это очень удобно для проектов, в которых реализован API-шлюз.

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