猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

PHP の Guzzle を使う時にもうググらない! GuzzleHttp の RequestOptions 定数を使う

Guzzleについて

Guzzle という PHP の HTTP クライアントがある。

github.com

このライブラリ、めちゃめちゃ使われているし、基本的には使い勝手も良い。僕も 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など、「サーバーサイドの動作には影響しないが、つけていないとログの集計に時に困る」ようなヘッダーもあるので、間違っているとまずい。

解決方法

ドキュメントをよく見るとこう書いてある。

f:id:yoshiki_utakata:20191218111742p:plain

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 あたりまで入力した時に候補が出てくるのだ。

f:id:yoshiki_utakata:20191218112040p:plain

これでもう迷うことはなくなるので、ドキュメントをググることもなくなるわけだ。

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 を使うべきである。

気づけばプロ並みPHP 改訂版--ゼロから作れる人になる!

気づけばプロ並みPHP 改訂版--ゼロから作れる人になる!

  • 作者:谷藤 賢一
  • 出版社/メーカー: リックテレコム
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

独習PHP 第3版

独習PHP 第3版

  • 作者:山田祥寛
  • 出版社/メーカー: 翔泳社
  • 発売日: 2016/05/11
  • メディア: Kindle版