読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

SlimPHP:Slim マイクロフレームワークで REST アプリケーションを作成する(2)POST

前へ | 次へ


IBM developerWorks Slim マイクロフレームワークで REST アプリケーションを作成するを参考に、SlimPHPのスケルトンアプリから作成します。コードはSlimPHP3用に書き換えています。

SlimPHP:Slim マイクロフレームワークで REST アプリケーションを作成する(1)GET - tanaka's Programming Memo からの続きです。

POSTリクエストの処理

POSTリクエストは、新規リソースを作成するためのメソッドです。新規リソースの登録に必要なデータがリクエスト本体に含まれます。

  1. post()でルートパターンを登録する
  2. 登録するデータがリクエスト本体に含まれてPOSTで送信されてくる
  3. 登録したコールバック関数内で、リクエスト本体をデコード
  4. デコードしたデータをRedBeanオブジェクトに変換
  5. RedBeanでデータベースに保存
  6. 新しく作成したリソースのJSONエンコード表現を返す

以上を実装します。

リクエスト本体の取得方法はSlim3では変更されているので、公式サイトの Documentation - Slim Framework で新しい方法を調べます。リクエストに関連するものなので、左のメニューから[The Request]の下の適当なリンクを選択します。表示されるページに全ての内容が含まれるので[The Request]の下のものであれば[Overview]でも[Method]でもどれでも大丈夫です。

取得する方法は[getBody]のままと思われるので、[getBody]でページ内を検索すると解説箇所がわかります。$request->getBody()で利用出来るようなので、引数に渡される$requestから利用すればよさそうです。

Headerの設定方法も変更されています。これはGETですでに利用しています。調べ方は、Slimの公式ページのドキュメントの左から[The Response]の下のメニューを選択して、[header]で検索します。Set Headerの項目に解説があり、[withHeader('ヘッダータイプ', '設定するデータ')]で新しいヘッダー作成して、それをreturnします。

以上を対応させた上で、チュートリアルを書き換えたものが以下のコードです。

  • /src/routes.php を開く
  • $app->get('/articles', ・・・ から始まるコードの上に以下のコードを追加
// /articles フォルダーへのPOSTリクエストを登録
$app->post('/articles', function ($request, $response, $args) {
  try {
    // get and decode JSON request body
    $body = $request->getBody();
    $input = json_decode($body);

    // store article record
    $article = R::dispense('articles');
    $article->title = (string)$input->title;
    $article->url = (string)$input->url;
    $article->date = (string)$input->date;
    $id = R::store($article);

    // return JSON-encoded response body
    echo json_encode(R::exportAll($article));
    return $response->withHeader('Content-Type', 'application/json');
  } catch (Exception $e) {
    return $response
        ->withStatus(400)
        ->withHeader('X-Status-Reason', $e->getMessage());
  }
});

テスト

POSTメソッドをテストしてみます。FirefoxのアドオンHTTP Resource Testを利用するとよさそうです。

Firefox のアドオン HTTP Resource Test でリクエストを送信 | すぐに忘れる脳みそのためのメモ を参考に試してみます。

インストール

  • Firefoxを起動
  • [ツール]>[アドオン]メニューを開く
  • 検索に[HTTP Resource Test]と入力
  • 見つかったら[インストール]を選んでインストールする
  • [今すぐ再起動する]を選択

利用

{"title":"PostTestTitle","url":"http:\/\/0.0.0.0:8080\/articles","date":"2016-02-29"}
  • [Submit]ボタンを押す
  • 成功すると、[Server Response]の[Body]欄に以下が表示される
[{"id":"10","title":"PostTestTitle","url":"http:\/\/0.0.0.0:8080\/articles","date":"2016-02-29"}]

以上を確認したら、HTTP Response Testの[Method]欄を[GET]に変更して[Submit]してください。登録した全てのデータが[Body]欄に表示されます。


前へ | 次へ