web-dev-qa-db-ja.com

PHP-なぜcURLの代わりにGuzzleを使用するのですか?

私のアプリケーションでは、もともとcURLを使用してさまざまなAPIからデータを取得し始めました。今日、私はGuzzleを使用して同じタスクを完了しようとしました。これまでのところ、cURLとGuzzleはどちらも同じように機能しているようです。

Github から判断すると、多くの人がGuzzleを好むように見えますが、その理由を本当に理解していません。

私の質問:

私の状況(さまざまなAPIからデータを取得する場合)で、Guzzleを使用することは望ましいですか? Guzzleの代わりにcURLを使用する場合(またはその逆)、最終的に後悔するようになりますか?

私はPHP/Laravel。

49
Cato Minor

Guzzleを使用する理由

まず、GuzzleはHTTPリクエストの抽象化レイヤーです。ただし、デフォルトではcURLを使用しますが、必要な他のHTTPクライアントを使用できます。

GuzzleはcURLを必要としますか?

いいえ。Guzzleは任意のHTTPハンドラーを使用してリクエストを送信できます。これは、GuzzleがcURL、PHPのストリームラッパー、ソケット、およびReactのような非ブロッキングライブラリで使用できることを意味します。リクエストを送信する別の方法を使用するようにHTTPハンドラーを構成するだけです。

注:Guzzleはこれまで、HTTPリクエストの送信にcURLのみを利用してきました。 cURLは驚くべきHTTPクライアント(おそらく最高)であり、Guzzleは利用可能になったときにデフォルトで引き続き使用します。まれですが、一部の開発者はシステムにcURLをインストールしていないか、バージョン固有の問題に直面していません。交換可能なHTTPハンドラを許可することにより、Guzzleはより多くのカスタマイズが可能になり、より多くの開発者のニーズに適合するようになりました。

Laravelを使用しているので、万が一EメールAPIを使用している場合は、すでにGuzzleがインストールされています。 Laravelのcomposer.jsonに提案が表示されます。

"suggest": {
    ...
    "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).",
    ...
}

もう1つの理由はコードの再利用です。 bogdan によるコメントを見てください。cURLで単純なhttpリクエストを行うために必要なコードの量です。 Guzzleを使用すると、はるかにシンプルで、よりクリーンで、読みやすく、再利用できます。 Http要求をカプセル化するサービスを簡単に作成できます。

Guzzleでは、promiseを使用してjavascriptを実行する場合と非常によく似た方法で async requests を実行することもできます。

最後になりましたが、テスト! cURLを使用するよりも、APIのテストを実行したり、アプリのユニットテストを作成したり、Guzzleでhttpリクエストをモックしたりする方が簡単です。テストに関する詳細情報 こちら

[〜#〜] but [〜#〜]やりたいだけの場合カップルのみ単純なhttpリクエストの場合(そうではないようです)、テストを気にせず、Guzzleに依存してcURLに行きたくありません。

73
Fabio Antunes

Guzzleは、使用可能な場合にcURLを使用するHTTPトランスポートの抽象化レイヤーです。

上記と同様に、cURLを使用してすべてを自分で行うことができますが、Guzzleは、特にデバッグに関しては、物事を非常に単純化します。

5
DevDonkey