«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как отслеживать клиент Guzzle Http – быстрые советы по PHP

Как отслеживать клиент Guzzle Http – быстрые советы по PHP

Опубликовано 8 ноября 2024 г.
Просматривать:892

Guzzle — это популярный HTTP-клиент PHP, который позволяет легко отправлять HTTP-запросы и создавать библиотеки веб-сервисов. Самые популярные PHP-фреймворки предоставляют внутреннюю службу Http-клиента и представляют собой просто настроенную реализацию Http-клиента Guzzle:

  • Http-клиент Laravel
  • Http-клиент Symfony
  • Http-клиент Laminas (ранее Zend Framework)

Guzzle широко используется по двум основным причинам:

1) Кастомизация и гибкость

Для любителей шаблонов проектирования Guzzle открыт для расширений. Означает, что вы можете легко реализовать новые функции в Guzzle, расширив его основные компоненты (Http-клиент, запрос, ответ, Milddeware и т. д.).

2) Поддержка промежуточного программного обеспечения

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

Введение в HTTP-клиент Guzzle

В этом уроке я проведу вас через процесс создания собственного Http-клиента Guzzle, чтобы упростить мониторинг каждого запроса, сделанного из вашего приложения, к внешним сервисам.

Я также покажу вам, как внедрить эту реализацию в контейнер IoC (или контейнер служб), чтобы сделать эту реализацию доступной во всем вашем приложении.

Мы рассмотрим основы, варианты настройки и предоставим реальные примеры кода.

Установить Жралу

Убедитесь, что у вас установлен Guzzle. Если нет, установите его с помощью Composer:

composer require guzzlehttp/guzzle

Базовая настройка

Давайте начнем с создания базового пользовательского Http-клиента Guzzle:

namespace App\Extensions\Guzzle;

use GuzzleHttp\Client;

class CustomGuzzleClient extends Client 
{
    public function __construct(array $config = []) 
    {
        $config['headers']['Custom-Header'] = 'Custom-Value';
        parent::__construct($config);
    }
}

В этом примере мы расширяем класс Http-клиента Guzzle и настраиваем конструктор так, чтобы он добавлял собственный заголовок ко всем запросам, сделанным этим клиентом.

Мониторинг HTTP-запросов Guzzle

Guzzle предоставляет ярлыки для запуска HTTP-запросов:

$client->get('/endpoint');
$client->post('/endpoint');
$client->put('/endpoint');

Все эти методы используют внутри общий метод запроса. Снимок экрана ниже был взят из кода клиента Guzzle:

How to monitor Guzzle Http Client – PHP Fast tips

Вы можете переопределить метод запроса, чтобы настроить управление HTTP-вызовами, выполняемыми вашим приложением к внешним службам.

namespace App\Extensions\Guzzle;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;


class CustomGuzzleClient extends Client 
{
    public function request($method, $uri, array $options = []) 
    {
        return inspector()->addSegment(function () use ($method, $uri, $options) {

            return parent::request($method, $uri, $options);

        }, "http", "{$method} {$uri}");
    }
}

В этом примере я просто добавляю новый элемент на временную шкалу транзакции для каждого запроса. Теперь вы можете видеть вызовы API, сделанные Guzzle, в представлении мониторинга:

How to monitor Guzzle Http Client – PHP Fast tips

Если вы новичок в Inspector, вы можете воспользоваться этим руководством, чтобы узнать, как начать работу:

https://inspector.dev/laravel-real-time- Performance-monitoring-using-inspector-part-1/

Вы также можете внедрить параметр Segment в обратный вызов, чтобы взаимодействовать с элементом или добавить дополнительную информацию:

namespace App\Extensions\Guzzle;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Inspector\Models\Segment;

class CustomGuzzleClient extends Client 
{
    public function request($method, $uri, array $options = []) 
    {
        return inspector()->addSegment(function (Segment $segment) use ($method, $uri, $options) {

            $response = parent::request($method, $uri, $options);
            $segment->label = "{$response->getStatusCode()} {$method} {$uri}";
            return $response;

        }, "http");
    }
}

Используйте собственный HTTP-клиент

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

// Create an instance of the custom client
$client = new CustomGuzzleClient(['base_uri' => 'https://api.example.com']);

// Make an API request. It will be automatically monitored by Inspector.
$response = $client->get('/endpoint');

Привяжите Http-клиент Guzzle к контейнеру.

В этом примере я собираюсь использовать Laravel, но основная концепция одинакова для самых популярных PHP-фреймворков, упомянутых в начале статьи. Все они работают с сервисным контейнером.

Мы создаем одноэлементную привязку в контейнере для класса Guzzle Http Client. Таким образом, каждая служба, запрашивающая этот класс, получит экземпляр нашего специального клиента, поддерживающего мониторинг в реальном времени.

use GuzzleHttp\Client;
use App\Extensions\Guzzle\CustomGuzzleClient;
use Illuminate\Contracts\Foundation\Application;

$this->app->singleton(Client::class, function (Application $app) {
    return new CustomGuzzleClient();
});

Теперь вы можете попробовать внедрить класс Http-клиента Guzzle в команду Artisan и запустить Http-вызов только для тестирования:

namespace App\Console\Commands;


use Illuminate\Console\Command;
use GuzzleHttp\Client;

class TryCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'try';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Test Guzzle Http Client monitoring.';

    /**
     * Inject the Guzzle Http Client class into the constructor.
     * The CustomGuzzleClient will be the concrete class.
     */
    public function __construct(protected Client $client)
    {
        parent::__construct();
    }

    /**
     * Handle the command execution.
     */
    public function handle()
    {
        $this->line($this->description);

        $this->line("Concrete class: ".get_class($this->client));

        $this->client->get('https://google.com');

        return Command::SUCCESS;
    }
}

Запустите команду, чтобы проверить, будет ли Http-вызов виден на временной шкале транзакции:

php artisan try

Впервые в инспекторе? Контролируйте свое приложение бесплатно

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

В отличие от других сложных универсальных платформ, Inspector очень прост и дружелюбен к PHP. Вы можете попробовать наш пакет Laravel или Symfony.

Если вам нужна эффективная автоматизация, глубокая аналитика и возможность пересылать оповещения и уведомления в вашу среду обмена сообщениями, попробуйте Inspector бесплатно. Зарегистрируйте свой аккаунт.

Или узнайте больше на сайте: https://inspector.dev

How to monitor Guzzle Http Client – PHP Fast tips

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/inspector/how-to-monitor-guzzle-http-client-php-fast-tips-4ijg?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3