Skip to content

Instantly share code, notes, and snippets.

@hidenorigoto
Last active January 4, 2016 03:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hidenorigoto/8560174 to your computer and use it in GitHub Desktop.
Save hidenorigoto/8560174 to your computer and use it in GitHub Desktop.

BEAR.ResourceのGuzzle依存バージョンについて調べたメモ

see Upgrade Guzzle

  • Guzzleは、AWS-SDK-PHPが強く依存しており、この改善に合わせてかなり高頻度にバージョンアップされている (AWS-SDK-PHPのcomposer.jsonで、依存するguzzleを頻繁に更新している)
  • 上のバージョンアップ時に問題となっている箇所については、元のコードで使っていたメソッド(getHeaders()->getAll())が内部に連想配列を持つCollectionを返していた。利用側からはただの配列のように扱えた。
  • Guzzleのこのコミットで、ヘッダーの取り扱いが単純なCollectionからHeaderCollectionに置き換えられた。この修正において、getHeaders()はHeaderCollectionオブジェクトを返すようになったが、HeaderCollectionのgetAll()メソッドが返すのは内部に保持しているHeaderオブジェクトの配列となっている(個々のHeaderオブジェクトはArrayAccessに対応していない)。
  • BEAR.Resource側では、guzzleから取得したヘッダー情報を連想配列として利用しようとしている

https://github.com/MugeSo/BEAR.Resource/blob/c63a67696571b68966ad3887ebccf76da39bf9d9/src/BEAR/Resource/Adapter/Http/Guzzle.php#L126

strpos($headers['Content-Type'][0], 'xml')

Guzzle側にはどれが公開インターフェイスなのか明示的な記述がないが、Guzzleの内部構造に依存せず、レスポンスヘッダーをデータとして明示的に扱うという点では、getHeaders()->toArray()の結果を用いるのがよさそう。

ところで、Guzzleがアクティブなstableバージョンをどの程度まで見ているのか、明確な記述が見つけられなかった。 AWS-SKK-PHPが要求するGuzzleのバージョンが「アクティブ」なバージョンとも考えられるが、マイナーバージョンアップ間隔いことと、一応「安易な後方非互換は歓迎しない(当然ですが)」と書かれているため、新しい機能を利用しているのでなければ、低めのバージョンから広めに対応しておくのがユーザーには優しいかもしれない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment