Status Code を返す / Raw HTTP Request Body を見る

Date
2007-10-22 (Mon)
Category
symfony

細かいネタをいくつか。

API を作る時には Status Code を正しく返す

外側に公開するときはなおさら、内側で使う時でも、API を作る時に HTTP ステータスコードを正しく使おう というのは最近の Web 開発のトレンド、なんて云うと怒られるかな。少なくとも、僕は暫く前から気を遣って居ます。(中には行儀の悪い Flash などは 404 を返すと、HTTP Response Body にアクセスできないとかブツブツ…)

ともかく。Symfony を使って、HTTP Response Header 中の Status Code にアクセスするにはどうすれば良いのでしょうか?非常に簡単で、任意のアクションクラスの中で以下のようにします。

$this->getResponse()->setStatusCode(400);

あれ?404 って何だっけ?という向きに、Status Code チートシート を用意しました。ご自由にお使いください。(尤も HTTP/1.1: Status Code Definitions から H3 要素を XPath で切り出して、Word で整形しただけの単純なものですが。)

連想配列化されていない Raw HTTP Request Body を見る

PHP で HTTP POST を受け付けると、$_POST という 定義済の変数 に連想配列として自動的に格納されます。便利ですね。ただ時として、POST や PUT あるいは その他拡張された HTTP メソッド(動詞) で、連想配列化される以前の生の文字列を見たいときもあるかと思います。これは Symfony に限らず PHP 入出力ストリーム を使って、以下のようにします。

$raw_input = null;
$stream = f o p e n("php://input", "r");
if ($stream) {
  $raw_input = s t r e a m _ g e t _ c o n t e n t s($stream);
  f c l o s e($stream);
}
else
{
  throw new Exception("Input stream open failure.");
}

今気がついたけど、『enctype="multipart/form-data" に対しては 使用できません。』ってあるね…という事は、ファイルアップロードを独自処理、とかは出来ないってことか…そんな条件分けをする意味が正直理解しがたいが…まぁしたくないけどね。

以上細かいネタでした。あ〜 MovableType だと f o p e n とか特別な単語を書くと、エラーが出るようになってる…上記変な書き方になってるのはそのせいです。

Comment:0

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/237
Listed below are links to weblogs that reference
Status Code を返す / Raw HTTP Request Body を見る from The Croton

Return to Page Top