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
- メディア: 単行本(ソフトカバー)