php-httpとhttplugでguzzle5から解放されます
キーテイクアウト
-
PHP-HTTPによるプロジェクトであるHttPlugは、あらゆるHTTPクライアントをSDKに簡単に注入できるようになり、既に使用されているHTTPクライアントが既に使用されていて、ガズルの使用を避けたいアプリケーションのソリューションを提供します。
- httplugインターフェイスパッケージとGuzzle 6を一緒に引き込むことができます。これにより、httplugのhttpclientインターフェイスを実装するGuzzle 6またはその他のアダプターを使用できます。 PHP-HTTPプロジェクトは、Guzzle 5および6、およびZend1と2を含むPHPのすべてのHTTPクライアントを最大限にサポートすることを目的としています。 🎜>
- diffbot SDKは、HTTPクライアントの他の実装とPSR-7の互換性と受容性になりました。すべてが箱から出して作業するために、HTTPLUGインターフェイスを尊重するアダプターのみが必要です。 httplugは、アプリでHTTPクライアントの実装を抽象化するための新しいアプローチを提供し、抽象化の1つの追加レイヤーのコストの拡張性を提供します。
- この記事は、MárkSági-KazárとDavid Buchmannによってピアレビューされました。 SetePointコンテンツを最高にするためにSitePointのピアレビュアーのすべてに感謝します!
- 以前のシリーズでは、diffbot用のPHPクライアントを構築しました。クライアントはうまく機能し、比較的広く使用されています。ライブアプリでテストして、標準に達していることを確認しましたが、Guzzle 5に大きく依存します。 これには2つの問題があります:
アプリにクライアントを実装している人は、すでに好ましいHTTPクライアントを使用している可能性があり、Guzzleではなく使用したいと考えています。 SDKへのhttpクライアントを簡単に注入できるようにする必要があります。
偶然にも、それを行うことができる新しいプロジェクトがあります:httplug。
- 注:フォローするDiffbot SDKの内部ロジックに精通する必要はありません。この記事のプロセスは、具体的なHTTPクライアントの実装を備えた任意のパッケージに適用でき、簡単に従うことができます。 php-httpおよびhttplug
-
PHP-HTTPは、PHPのHTTP関連ツールのGitHub組織です。 PSR-7リクエストと応答に加えて最小限のHTTPクライアント契約を定義するためのインターフェイスと例外のコレクションであるHTTPlugを提供します。この契約の実装は、仮想パッケージのphp-http/client-implementationを提供しますこれは、Guzzle 6を使用する人が作曲家を使用している人が、Adapterの依存関係として、Adapter、Httplug Interfaceパッケージ、およびGuzzle 6自体を引き込むためにphp-http/guzzle6-adapterを必要とすることを意味します。
httplugは、再利用可能なパッケージのエントリポイントです。これは、すべてのクライアント(guzzle6アダプターなど)が基づいているクライアントの抽象化です。これらのクライアントはさらに、基礎となるパッケージ /依存関係をさらに利用します - この場合はguzzle 6。
だから、下から上:HTTPクライアントが存在します(Guzzle 6)
- Guzzle 6アダプターは、インターフェイスとしてHTTPlugを使用して構築されています。Guzzle6
- をラップします。 http呼び出しを必要とする必要があるアプリは、クライアントを必要とし、httplugのhttpclientインターフェイスが必要です。
- アプリは、Guzzle 6、またはhttplugのhttpclientインターフェイスを実装し、別のサードパーティのhttpクライアントをラッピングする他のアダプターを使用できます
- チームの計画は、最終的にPHPランドのすべてのさまざまなHTTPクライアントを最大限にサポートすることです:Guzzle 6、Guzzle 5、Zend2、Zend1など。クライアントバージョン、そして適切なアダプターをミックスに接続するだけです。
- adapter
クライアント
という用語を使用することに注意してください。ここでは、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
ログイン後にコピーログイン後にコピーログイン後にコピーコールの結果は、$応答として保存されます。これはguzzle5応答です。その応答は、その有効性をチェックし、そこからエンティティを構築するエンティティファクトリーによってさらに処理され、エンティティイテレーターにプッシュされます。 したがって、計画は
です- diffbot :: sethttpclientをhttplug実装を受け入れるメソッドに置き換えます
- API要約、クロール、および検索クラスのコールメソッドを変更して、提供されたHTTPクライアントの実装でGETリクエストを発行できるようにします。 エンティティファクトリーとエンティティのイテレーターを変更して、それらがもはやguzzle5バージョンの応答に依存せず、むしろPSR-7カウンターパートに依存します。
- PHP-HTTPプロジェクトには、httpmethodsclientを含む追加のパッケージ、utilsがあります。そのクラスは、メッセージファクトリーとHTTPクライアントを1つの全体に包み、Get、投稿などの一般的に使用される動詞でリクエストを簡単に送信できます。 ..)。さらに、PSR-7 ResponseInterfaceも返します。つまり、GetBodyメソッドが利用可能になります。これは、Tojsonメソッドのみが実装されていないことを意味します。
バトルプランがレイアウトされていると、リファクタリングを始めることができます。
前提条件
追加のパッケージが必要です:
git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
ログイン後にコピーログイン後にコピーログイン後にコピーメソッドは次のようにリファクタリングする必要があります git checkout -b feature-httplug
ログイン後にコピーログイン後にコピーログイン後にコピーまたは、発見クラスは、クラスの上部にある使用ステートメントを使用してインポートできます。
この変更により、Diffbot SDKのエンドユーザーが次のようになりました。"require": { ... "php-http/client-implementation": "^1.0" }, "require-dev": { ... "php-http/guzzle6-adapter": "~0.2@dev" },
ログイン後にコピーログイン後にコピー独自のクライアントをインストールし、httpmethodsclientと並行してディスカバリーコンポーネントを自動的に処理させます。
を完全な柔軟性のためにsethttpclientメソッドに注入します ほとんどのユーザーはこれをAutoPilotで使用します"prefer-stable": true, "minimum-stability": "dev"
ログイン後にコピーログイン後にコピーapi要約、クロール、検索
次に、通話方法。
- 以前に実装したhttpmethodsclientインスタンスには、getメソッドがあるため、その点で変更は必要ありません。ただし、$ ResponseインスタンスはMistMatchを示しており、正当な理由があります。 EntityFactoryが期待する元の$応答は、guzzle5応答です。
EntityFactoryによって苦情が発行されているため、API要約を編集する必要はありません。それ自体で物事を処理します。クロールクラスのコールカウンターパートは少し違う:
ここでの2つの警告 - $応答のJSONメソッドを使用するメソッドの2行目と、guzzle5応答を期待するエンティティテーターインスタンス化。ここから影響を与えることができる唯一の線は前者ですので、それを変更してみましょう:git clone https://github.com/swader/diffbot-php-client cd diffbot-php-client git checkout tags/0.4.5 composer install phpunit
ログイン後にコピーログイン後にコピーログイン後にコピー同様の変更を検索クラスの通話方法で行う必要があります。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"
ログイン後にコピーCheckResponseFormatとcreateApSofsteritoratorメソッドの両方で。use GuzzleHttp\Client;
ログイン後にコピー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>
ログイン後にコピーHTTPリクエストとAPI呼び出しをテストする主な方法であるモッキングは、Guzzle 6では異なるため、テストにはわずかに大きなオーバーホールが必要です。 このチュートリアルはすでに少し長いので、Guzzle 5とGuzzle 6、特にDiffbot SDKの2つのバージョン間のモッキングの違いを学ぶことに興味がある場合は、関連する機能ブランチをご覧ください。 。
最後に、テストを実行しましょう:<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>
ログイン後にコピー成功!すべての合格(予想されるスキップテストを除く)。
diffbot SDKは、PSR-7互換性だけでなく、HTTPクライアントの他の実装を受容的にしています。必要なのは、httplugインターフェイスを尊重するアダプターだけで、すべてが箱から出して作業する必要があります。
結論アダプターの実装を追加するか、パッケージを試してフィードバックを提供するだけで支援したい場合は、チームはすべての貢献を歓迎します。連絡を取るか、以下のコメントセクションにフィードバックを残してください。このチュートリアルが興味深いと感じた場合は、ボタンのようにヒットすることを忘れないでください!$array = json_decode($response->getBody(), true);
ログイン後にコピーPHP HTTPおよびHTTPLUG
に関するよくある質問(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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
