「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Guzzle Http クライアントを監視する方法 – PHP の簡単なヒント

Guzzle Http クライアントを監視する方法 – PHP の簡単なヒント

2024 年 11 月 8 日に公開
ブラウズ:942

Guzzle は、HTTP リクエストの送信や Web サービス ライブラリの作成を容易にする人気の PHP HTTP クライアントです。最も一般的な PHP フレームワークは内部 Http クライアント サービスを提供しており、それらは単に Guzzle Http クライアントのカスタマイズされた実装です:

  • Laravel HTTP クライアント
  • Symfony HTTP クライアント
  • Laminas (旧名 Zend Framework) HTTP クライアント

Guzzle は 2 つの主な理由で広く使用されています:

1) カスタマイズと柔軟性

デザインパターンのファンのために、Guzzle は拡張機能を受け入れています。 Guzzle のコア コンポーネント (HTTP クライアント、リクエスト、レスポンス、Milddeware など) を拡張することで、新しい機能を Guzzle に簡単に実装できることを意味します。

2) ミドルウェアのサポート

Guzzle ミドルウェア システムを使用すると、開発者は送信前にリクエストを操作したり、処理前にレスポンスを操作したりできます。ロギング、認証、エラー処理などの高度な機能を有効にすることができます。

Guzzle HTTP クライアントの概要

このチュートリアルでは、アプリケーションから外部サービスに対して行われるすべてのリクエストを簡単に監視できるように、カスタム Guzzle Http クライアントを作成するプロセスを説明します。

この実装を IoC コンテナ (またはサービス コンテナ) に挿入して、アプリケーション全体でこの実装を利用できるようにする方法も説明します。

基本、カスタマイズ オプションについて説明し、実際のコード例を提供します。

ガズルをインストールする

Guzzle がインストールされていることを確認してください。そうでない場合は、Composer:
を使用してインストールします。

composer require guzzlehttp/guzzle

基本的なカスタマイズ

基本的なカスタム Guzzle Http クライアントを作成することから始めましょう:

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);
    }
}

この例では、Guzzle Http Client クラスを拡張し、コンストラクターをカスタマイズして、このクライアントによって行われたすべてのリクエストにカスタム ヘッダーを追加します。

Guzzle HTTP リクエストの監視

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}");
    }
}

この例では、リクエストごとにトランザクションのタイムラインに新しいアイテムを追加するだけです。これで、監視ビューで Guzzle によって行われた API 呼び出しを確認できるようになります:

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クライアントを使用する

これで、アプリケーションでカスタム クライアントを使用できるようになりました。この拡張機能は標準の Guzzle Http クライアントの動作に変更を加えないため、カスタム クラスのインスタンスを作成して通常どおり使用できます。

// 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');

Guzzle Http クライアントをコンテナにバインドする

この例では 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();
});

これで、Guzzle Http Client クラスを Artisan Command に挿入して、テストのためだけに 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 は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。クラウド インフラストラクチャやサーバーに何もインストールする必要はありません。composer パッケージをインストールするだけで準備完了です。

他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。

効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。

または、Web サイトで詳細をご覧ください: 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