Laravel HTTP クライアントの 5 つのヒントの分析と要約
この記事では、Laravel に関する関連知識をお届けします。主に Laravel HTTP クライアントの 5 つのヒントを紹介します。興味のある友人はぜひご覧ください。皆さんのお役に立てれば幸いです。
web 開発者として、
Laravel アプリケーションから
api を操作する必要がよくあります。便利で直感的な
Guzzle HTTP ライブラリ ラッパーは、
Laravel HTTP クライアント バージョン
7 で提供されています。この記事では、開発体験をより効率的で楽しいものにする、Laravel HTTP クライアントを使用するための 5 つの貴重なヒントを紹介します。
これらの手法には、
HTTP
HTTP クライアントの構成、移植可能な基本的な
URL 構成、その他のリクエストの防止、# のリッスンが含まれます。 ##HTTP
イベント。これらのテクニックをマスターすると、API
インタラクションを簡素化し、より堅牢で保守しやすい Laravel
アプリケーションを作成できます。 HTTP マクロ
Laravel のサービスの多くには、アプリケーションのカスタム メソッドを定義できる
機能があります。 Laravel フレームワークからコアクラスを拡張する代わりに、これらのマクロをサービスプロバイダーの
boot() メソッドに追加できます。 HTTP ドキュメントには、一般的な設定を定義するために使用できるマクロの
example
が示されています。
public function boot(): void { Http::macro('github', function () { return Http::withHeaders([ 'X-Example' => 'example', ])->baseUrl('https://github.com'); }); } // Usage response = Http::github()->get('/');
マクロは、アプリケーションで定義したいものをすべて定義でき、便利です再利用するための方法。ドキュメント内のマクロの例には、他のサービスで使用する HTTP クライアントを構成するための別のヒントが含まれています。 次のセクションでは、マクロを組み合わせてクライアントを他のコンテナ サービスに渡す方法を再検討します。
コンテナ サービス用の HTTP クライアントの構成
Laravel アプリケーションで API を操作するとき、クライアントに対してさまざまな構成可能な設定を構成することが必要になる場合があります。たとえば、API に複数の環境がある場合は、ベース URL、トークン、タイムアウト設定などを構成する必要があります。 マクロを使用してクライアントを定義し、クライアントを独自のサービスとして表現し、それを他のサービスに挿入したり、その両方を行うことができます。
まず、サービス プロバイダーの
register()メソッドでクライアント設定を定義する方法を見てみましょう:
public function register(): void { $this->app->singleton(ExampleService::class, function (Application $app) { $client = Http::withOptions([ 'base_uri' => config('services.example.base_url'), 'timeout' => config('services.example.timeout', 10), 'connect_timeout' => config('services.example.connect_timeout', 2), ])->withToken(config('services.example.token')); return new ExampleService($client); }); }
シングルトン サービス定義では、いくつかの呼び出しが行われます。クライアントを設定します。結果は PendingRequest
インスタンスであり、次のようにサービス コンストラクターに渡すことができます:
class ExampleService { public function __construct( private PendingRequest $client ) {} public function getWidget(string $uid) { $response = $this->client ->withUrlParameters(['uid' => $uid]) ->get('widget/{uid}'); return new Widget($response->json()); } }
サービスは withOptions()
メソッド Guzzle オプションを使用して直接構成されます。ただし、HTTP クライアントによって提供されるいくつかの便利なメソッドを使用することもできます。
$this->app->singleton(ExampleService::class, function (Application $app) { $client = Http::baseUrl(config('services.example.base_url')) ->timeout(config('services.example.timeout', 10)) ->connectTimeout(config('services.example.connect_timeout', 2)) ->withToken(config('services.example.token')); return new ExampleService($client); });
または、マクロとサービスを組み合わせたい場合は、AppServiceProvider# の ## で行うことができます。
boot()
$this->app->singleton(ExampleService::class, function (Application $app) { return new ExampleService(Http::github()); });
移植可能なベース URL 構成
デフォルトのベース URL の末尾に
が含まれていることがわかります。 /。RFC3986
に従って最大限の移植性を提供します。 次のサービス構成を例に挙げます (デフォルトのbase_url に注意してください):
return [ 'example' => [ 'base_url' => env('EXAMPLE_BASE_URI', 'https://api.example.com/v1/'), 'token' => env('EXAMPLE_SERVICE_TOKEN'), 'timeout' => env('EXAMPLE_SERVICE_TIMEOUT', 10), 'connect_timeout' => env('EXAMPLE_SERVICE_TIMEOUT', 2), ], ];
https://stg-api.example.com/
; 末尾のスラッシュを使用すると、コードを変更せずに URL が期待どおりに機能するようになります。末尾の/ を設定する際、コード内のすべての API 呼び出しで相対パスが使用されることに注意してください。
$this->client ->withUrlParameters(['uid' => $uid]) // 例子: // 测试环境 - https://stg-api.example.com/widget/123 // 生产环境 - https://api.example.com/v1/widget/123 ->get('widget/{uid}');
Guzzle の
Creating a Client ドキュメントを参照し、base_uri スタイルの違いを確認してください。 URI 解析に影響します。
テストでの迷走リクエストの防止Laravel の HTTP クライアントは、テストの作成を簡単にする優れたテスト ツールを提供します。 API と対話するコードを作成するとき、テストで実際のネットワーク リクエストが何らかの形で発生しているのではないかと不安になります。 Laravel HTTP クライアントで Preventing Stray Requests
を入力します:Http::preventStrayRequests();
Http::fake([
'github.com/*' => Http::response('ok'),
]);
// Run test code
// If any other code triggers an HTTP call via Laravel's client
// an exception is thrown.
ログイン後にコピー
私の意見では、Http::preventStrayRequests(); Http::fake([ 'github.com/*' => Http::response('ok'), ]); // Run test code // If any other code triggers an HTTP call via Laravel's client // an exception is thrown.
preventStrayRequests() を使用する最良の方法は、API で期待する場所です。インタラクティブ テスト クラスの ##setUp() メソッド。おそらく、これをアプリケーションの基本
TestCase クラスに追加することもできます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Support\Facades\Http;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
public function setUp(): void
{
parent::setUp();
Http::preventStrayRequests();
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
これを行うと、テスト スイートで起動されるすべての HTTP クライアント呼び出しが偽のリクエストによって裏付けられるようになります。このアプローチを使用すると、テストですべてのアウトバウンド リクエストを同等の偽のリクエストでカバーできたという大きな自信が得られます。 HTTP イベントのログ ハンドラー
Laravel の HTTP クライアントには、リクエスト/レスポンスのライフサイクルの重要な段階を素早く調べるために使用できる貴重なイベントが多数あります。この記事の執筆時点では、3 つのイベントがトリガーされました:
Illuminate\HttpClient\Events\RequestSending
IlluminateHttpClient\Events\ResponseReceived
IlluminateHttpClient\EventsConnectionFailed
比方说,你想把你的应用程序发出请求的每个 URL 都可视化。我们可以很容易地接入 RequestSending
事件,并记录出每个请求。
namespoace App/Listeners; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log; class LogRequestSending { public function handle(object $event): void { Log::debug('HTTP请求正在发送。', ['url' => $event->request->url() 'url' => $event->request->url(), ]); } }
为了使事件处理程序工作,在 EventServiceProvider
类中添加以下内容。
use App\Listeners\LogRequestSending; use Illuminate\Http\Client\Events\RequestSending; // ... protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], RequestSending::class => [ LogRequestSending::class, ], ];
一旦它被连接起来,你就会在你的日志中看到类似于 HTTP 客户端尝试的每个请求的内容。
[2023-03-17 04:06:03] local.DEBUG: HTTP请求正在被发送。{"url": "https://api.example.com/v1/widget/123"}
了解更多
官方的Laravel HTTP 文档有你需要的一切,可以开始了。我希望这个教程能给你一些灵感和技巧,你可以在你的 Laravel 应用程序中使用。
原文地址:https://laravel-news.com/laravel-http-cl...
译文地址:https://www.php.cn/link/bac346f4c260a59fde0b1546e8a025aa
以上がLaravel HTTP クライアントの 5 つのヒントの分析と要約の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP でのデータベース操作は、オブジェクトをリレーショナル データベースにマップする ORM を使用して簡素化されます。 Laravel の EloquentORM を使用すると、オブジェクト指向構文を使用してデータベースと対話できます。モデル クラスを定義したり、Eloquent メソッドを使用したり、実際にブログ システムを構築したりすることで ORM を使用できます。

Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

マイクロサービス アーキテクチャは、PHP フレームワーク (Symfony や Laravel など) を使用してマイクロサービスを実装し、RESTful 原則と標準データ形式に従って API を設計します。マイクロサービスはメッセージ キュー、HTTP リクエスト、または gRPC を介して通信し、監視とトラブルシューティングに Prometheus や ELKStack などのツールを使用します。

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。
