Guzzle は、HTTP リクエストの送信や Web サービス ライブラリの作成を容易にする人気の PHP HTTP クライアントです。最も一般的な PHP フレームワークは内部 Http クライアント サービスを提供しており、それらは単に Guzzle Http クライアントのカスタマイズされた実装です:
Guzzle は 2 つの主な理由で広く使用されています:
デザインパターンのファンのために、Guzzle は拡張機能を受け入れています。 Guzzle のコア コンポーネント (HTTP クライアント、リクエスト、レスポンス、Milddeware など) を拡張することで、新しい機能を Guzzle に簡単に実装できることを意味します。
Guzzle ミドルウェア システムを使用すると、開発者は送信前にリクエストを操作したり、処理前にレスポンスを操作したりできます。ロギング、認証、エラー処理などの高度な機能を有効にすることができます。
このチュートリアルでは、アプリケーションから外部サービスに対して行われるすべてのリクエストを簡単に監視できるように、カスタム 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 リクエストを実行するためのショートカット メソッドを提供します:
$client->get('/endpoint'); $client->post('/endpoint'); $client->put('/endpoint');
これらのメソッドはすべて、内部で汎用リクエスト メソッドを使用します。以下のスクリーンショットは、Guzzle クライアント コードから取得したものです:
リクエスト メソッドをオーバーライドして、アプリケーションによって外部サービスに対して行われる 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 呼び出しを確認できるようになります:
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"); } }
これで、アプリケーションでカスタム クライアントを使用できるようになりました。この拡張機能は標準の 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');
この例では 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
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3