ホームページ >バックエンド開発 >PHPチュートリアル >php-httpとhttplugでguzzle5から解放されます
アプリにクライアントを実装している人は、すでに好ましいHTTPクライアントを使用している可能性があり、Guzzleではなく使用したいと考えています。 SDKへのhttpクライアントを簡単に注入できるようにする必要があります。
httplugは、再利用可能なパッケージのエントリポイントです。これは、すべてのクライアント(guzzle6アダプターなど)が基づいているクライアントの抽象化です。これらのクライアントはさらに、基礎となるパッケージ /依存関係をさらに利用します - この場合はguzzle 6。
だから、下から上:
HTTPクライアントが存在します(Guzzle 6)
クライアント
という用語を使用することに注意してください。ここでは、Httplugに基づくアダプターは両方です。彼らは既存のクライアントを中心にラッパーですが、クライアント自身として直接使用されています。 この投稿の計画は、DiffbotのPHPクライアントのコンクリートガズル5依存関係をHTTPlugバージョンに置き換えることです。注:httplugおよび関連パッケージはアルファソフトウェアであるため、変更される場合があります。それらを使用するために何でも変換することは、危険な努力です ブートストラップ いつものように、環境をブートストラップするために改善されたHomesteadを使用することをお勧めします。準備ができたら、SDKの現在の安定したバージョンをクローンしてテストできます。
最後のコマンドは、phpunitが開発環境にグローバルにインストールされていると想定しています。 すべてのテストに合格するはずです(ナンセンスのために盗聴されていないスキップされたテストを除く)。したがって、変換を開始する準備ができています。
始めましょう最初に、このアップグレードを開発するための新しいブランチを作成する必要があります。
次に、Composer.jsonファイルに2つの依存関係を追加します:git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunitこれが行うことは、これがクライアントに、これからは
仮想パッケージ - これに依存することを伝えます。これは、使用するために、Diffbotクライアント(このような)を使用するアプリケーション(このパッケージの実装(Packagistのリンクにリストされているものの1つ)を選択する必要があることを意味します。もちろん、パッケージの開発中に、実際の実装なしですべてが機能しているかどうかをテストして確認することは不可能であるため、追加の要件依存関係を指定します。上記の特定のケースでは、「php-http/guzzle6-adapter」:「〜0.2@dev」を使用します。単に最新のものであり、安定したリリースがないという理由だけで、その特定のバージョンを選択しました。
注:通常のようにターミナルで依存関係をインタラクティブに宣言するのではなく、なぜcomposer.jsonに値を追加するアプローチを使用したのか疑問に思うかもしれません。これは、作曲家が仮想パッケージで要求することでエラーがスローされるためです。パッケージは実際には存在せず、仮想名、プレースホルダーだけなので、作曲家はインストールを知らずに混乱します。これへの変更を示唆する問題がありますが、すぐに起こることはありません。php-httpパッケージはまだ激しい開発中であるため、次の2つの値をcomposer.jsonファイルに追加する必要があります。 これは、開発パッケージ(安定)のインストールを許可することですが、存在する場合は安定したバージョンを好みます。したがって、非常に不安定なPHPunit 5.2.xをフェッチするのではなく、5.0.8(執筆時点で最も最新)を取得しますが、持っていないパッケージを尋ねると成功します。安定したリリース(guzzle6-adapterなど)。
また、guzzle6をインストールする場合は、guzzle5への依存性を削除する必要があります。最終的な要求ブロックは次のようになります:
git checkout -b feature-httplugプラン
SDKが現在機能する方法は次のとおりです。メインのDiffbotクラスでは、オプションでHTTPClientを設定します。これは現在、バージョン5でのGuzzleの実装にバインドされています。カスタムクライアントインスタンスが設定されていない場合、Diffbotクラスはデフォルトのクライアントを自動的に使用します。 このクライアントは、API Abstractの呼び出しメソッドで使用され、指定されたURLにGETリクエストを発行します。さらに、Crawl APIクラスと検索APIクラスにカスタムコールメソッドがあります。
コールの結果は、$応答として保存されます。これはguzzle5応答です。その応答は、その有効性をチェックし、そこからエンティティを構築するエンティティファクトリーによってさらに処理され、エンティティイテレーターにプッシュされます。 したがって、計画は
ですバトルプランがレイアウトされていると、リファクタリングを始めることができます。
前提条件
追加のパッケージが必要です:
diffbotクラスには、上部にこの行があります:
git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
または、発見クラスは、クラスの上部にある使用ステートメントを使用してインポートできます。
独自のクライアントをインストールし、httpmethodsclientと並行してディスカバリーコンポーネントを自動的に処理させます。
api要約、クロール、検索 次に、通話方法。 EntityFactoryによって苦情が発行されているため、API要約を編集する必要はありません。それ自体で物事を処理します。クロールクラスのコールカウンターパートは少し違う:
これを次のように変更できます
変更:
HTTPリクエストとAPI呼び出しをテストする主な方法であるモッキングは、Guzzle 6では異なるため、テストにはわずかに大きなオーバーホールが必要です。
このチュートリアルはすでに少し長いので、Guzzle 5とGuzzle 6、特にDiffbot SDKの2つのバージョン間のモッキングの違いを学ぶことに興味がある場合は、関連する機能ブランチをご覧ください。 。 成功!すべての合格(予想されるスキップテストを除く)。 diffbot SDKは、PSR-7互換性だけでなく、HTTPクライアントの他の実装を受容的にしています。必要なのは、httplugインターフェイスを尊重するアダプターだけで、すべてが箱から出して作業する必要があります。
PHP HTTPおよびHTTPLUG git checkout -b feature-httplug
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
ほとんどのユーザーはこれをAutoPilotで使用します
git clone https://github.com/swader/diffbot-php-client
cd diffbot-php-client
git checkout tags/0.4.5
composer install
phpunit
ここでの2つの警告 - $応答のJSONメソッドを使用するメソッドの2行目と、guzzle5応答を期待するエンティティテーターインスタンス化。ここから影響を与えることができる唯一の線は前者ですので、それを変更してみましょう:git checkout -b feature-httplug
同様の変更を検索クラスの通話方法で行う必要があります。
"require": {
...
"php-http/client-implementation": "^1.0"
},
"require-dev": {
...
"php-http/guzzle6-adapter": "~0.2@dev"
},
"prefer-stable": true,
"minimum-stability": "dev"
EntityFactoryクラスには、上部に次のインポートがあります。
"require": {
"php" : ">=5.4.0",
"php-http/client-implementation": "^1.0"
},
"require-dev": {
"symfony/var-dumper": "~2",
"phpunit/phpunit": "^5.0",
"php-http/guzzle6-adapter": "~0.2@dev"
},
エンティティファクトリークラスが実装するエンティティファクトリーインターフェイスでも同じことを行う必要があります。composer require "php-http/utils" "php-http/discovery"
use GuzzleHttp\Client;
CheckResponseFormatとcreateApSofsteritoratorメソッドの両方で。use Http\Client\Utils\HttpMethodsClient as Client;
から<span>/**
</span><span> * Sets the client to be used for querying the API endpoints
</span><span> *
</span><span> * <span>@param Client $client
</span></span><span> * <span>@see http://php-http.readthedocs.org/en/latest/utils/#httpmethodsclient
</span></span><span> * <span>@return $this
</span></span><span> */
</span><span>public function setHttpClient(Client $client = null)
</span><span>{
</span> <span>if ($client === null) {
</span> <span>$client = new Client(
</span> <span><span>\Http\Discovery\HttpClientDiscovery</span>::find(),
</span> <span><span>\Http\Discovery\MessageFactoryDiscovery</span>::find()
</span> <span>);
</span> <span>}
</span> <span>$this->client = $client;
</span> <span>return $this;
</span><span>}
</span>
テスト<span>public function call()
</span><span>{
</span> <span>$response = $this->diffbot->getHttpClient()->get($this->buildUrl());
</span>
<span>$array = $response->json();
</span>
<span>if (isset($array['jobs'])) {
</span> <span>$jobs = [];
</span> <span>foreach ($array['jobs'] as $job) {
</span> <span>$jobs[] = new JobCrawl($job);
</span> <span>}
</span>
<span>return new EntityIterator($jobs, $response);
</span> <span>} elseif (!isset($array['jobs']) && isset($array['response'])) {
</span> <span>return $array['response'];
</span> <span>} else {
</span> <span>throw new DiffbotException('It appears something went wrong.');
</span> <span>}
</span><span>}
</span>
最後に、テストを実行しましょう:
$array = json_decode($response->getBody(), true);
アダプターの実装を追加するか、パッケージを試してフィードバックを提供するだけで支援したい場合は、チームはすべての貢献を歓迎します。連絡を取るか、以下のコメントセクションにフィードバックを残してください。このチュートリアルが興味深いと感じた場合は、ボタンのようにヒットすることを忘れないでください!に関するよくある質問(FAQ)
guzzle5とphp http/httplugの違いは何ですか。 Guzzle5は特定のHTTPクライアントであり、PHP HTTPは任意のHTTPクライアントを使用できる抽象化レイヤーです。 HTTPlugは、追加機能を提供するPHP HTTPの拡張機能です。主な違いは、PHP HTTPとHTTPLUGが特定のHTTPクライアントに結び付けられていないため、より柔軟性と相互運用性を可能にすることです。 > Guzzle5からPHP HTTP/HTTPLUGに移行するには、Guzzle5クライアントをPHP HTTPインターフェイスを実装するアダプターに置き換えることが含まれます。これは、guzzle5を含むさまざまなHTTPクライアントにアダプターを提供するHTTPlugライブラリを使用して実行できます。アダプターがセットアップされたら、PHP HTTPメソッドを使用してリクエストを送信し、応答を処理できます。 guzzle5でphp http/httplugを使用すると、柔軟性と相互運用性が向上します。 PHP HTTP/HTTPLUGを使用すると、コードを変更せずに異なるHTTPクライアントを切り替えることができます。これにより、さまざまなクライアントでアプリケーションをテストし、必要に応じてクライアントを切り替えることが容易になります。さらに、HTTPlugは、HTTPクライアントに機能を追加できるプラグインシステムを提供します。 PHPの依存関係管理ツール。コマンドコンポーザーを実行して、php-http/httplugを実行することでインストールできます。これにより、httplugライブラリとその依存関係がダウンロードされます。php http/httplugを使用してリクエストを送信するにはどうすればよいですか?php http/httplugでリクエストを送信するには、最初に作成する必要があります。リクエストオブジェクト。これは、MessageFactoryインターフェイスのCreaterequestメソッドを使用して実行できます。リクエストオブジェクトを取得したら、HTTPCLIENTインターフェイスのSendRequestメソッドを使用して送信できます。 ResponseInterfaceインターフェイスで表されます。 getStatusCode、getheaders、およびgetBodyメソッドを使用して、応答のステータスコード、ヘッダー、および本文にそれぞれアクセスできます。 php http/httplugのディスカバリーコンポーネントは、利用可能なHTTPアダプターとメッセージ工場を自動的に見つけて使用するために使用されます。これにより、異なるHTTPクライアントを切り替え、利用可能な最良の実装を使用しやすくなります。 httpclientdiscoveryまたはmessagefactorydiscoveryクラスの静的検索メソッドを呼び出します。これにより、最初に利用可能なHTTPクライアントまたはメッセージファクトリーのインスタンスが返されます。 httplugのプラグインは何ですか?httplugのプラグインを使用して、httpクライアントに機能を追加するために使用します。これらは、認証、キャッシュ、エラー処理などの機能を追加するために使用できます。プラグインコンツクラスのAddPluginメソッドを使用してプラグインをクライアントに追加できます。 httpclientexceptionインターフェイスを実装します。これらの例外をキャッチし、必要に応じてそれらを処理できます。さらに、ErrorPluginを使用して、非200の応答を自動的に例外に変換できます。
以上がphp-httpとhttplugでguzzle5から解放されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。