
Guzzleについて
Guzzle という PHP の HTTP クライアントがある。
このライブラリ、めちゃめちゃ使われているし、基本的には使い勝手も良い。僕も PHP で Web API を叩く時などには基本的にはこれを使う。
違和感
しかしある時に違和感に気づく。
毎回使うたびにドキュメントをググる ことになるのだ。
なぜか
ググるのはリクエストオプションの名前などだ。例えば、HEADERに特定の文字列を指定してリクエストを送る場合は書きのコードになる。(これは Guzzleのドキュメント から持ってきた例)
<?php $client->request('GET', '/get', [ 'headers' => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'] ] ]);
この時のオプションが header なのか headers なのか(複数形のsがついているかどうか)など、地味に迷うポイントがあるのだ。
headersを間違えてheaderとしても何も警告はないが、リクエストヘッダーがつかない状態でリクエストされる。User-Agentなど、「サーバーサイドの動作には影響しないが、つけていないとログの集計に時に困る」ようなヘッダーもあるので、間違っているとまずい。
解決方法
ドキュメントをよく見るとこう書いてある。

Constant あるやないけ!!
これを使うと先ほどのコードはこうなる。
<?php $client->request('GET', '/get', [ \GuzzleHttp\RequestOptions::HEADERS => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'] ] ]);
これで何が変わるのか
IDEなど統合開発環境や特定のエディタを使っていると、コード補完が聞くので、\GuzzleHttp\RequestOptions::HEAD あたりまで入力した時に候補が出てくるのだ。

これでもう迷うことはなくなるので、ドキュメントをググることもなくなるわけだ。
Guzzleのサンプルコードは良くないと思う
結局何が悪いかというと、Guzzleのサンプルが悪いのである。
例えば Request Header の部分のドキュメント
http://docs.guzzlephp.org/en/stable/request-options.html#headers
こういう例になっているが
<?php $client->request('GET', '/get', [ 'headers' => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'] ] ]);
こうあるべきである
<?php $client->get('/get', [ \GuzzleHttp\RequestOptions::HEADERS => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'] ] ]);
エディタの補完の理由で、
request('GET'ではなくて->get('であるべきだし'headers'ではなくて\GuzzleHttp\RequestOptions::HEADERSであるべきだ
まとめ
エディタの補完が聞くので \GuzzleHttp\RequestOptions を使うべきである。
- 作者:谷藤 賢一
- 発売日: 2017/02/18
- メディア: 単行本(ソフトカバー)
- 作者:山田祥寛
- 発売日: 2016/05/11
- メディア: Kindle版