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

PieceとJSON/JSONP

PHP

 PHPのWebフレームワークのAJAXへの対応状況はまちまちで、どれもAJAXを通して応答を返すことをアプリケーション開発者が意識しなくてはならなかったり、かなり泥臭い対応をしなくてはならなかったりします。
 Piece Frameworkは現時点で、AJAXやJSON/JSONPといった技術に対応するための機能を何も提供していませんが、対応するのは極めて容易で、しかも他のフレームワークでは実現できないような透明性を確保できます。僕自身、ありとあらゆるPHPのWebフレームワークに精通しているわけではありませんが、それでもやはり、Piece の柔軟性には特筆すべきものがあると考えます。


 以下で記述している内容は、Piece Framework本家にまたマージされていません。PieceでJSON/JSONPを扱うための私案とお考えください。


 Pieceのビューの設定は、piece-unity-config.yaml内で行います。例えば、テンプレートエンジンに、HTML_Template_Flexyを使用する場合は、次のように記述します。

- name: View
  point:
    - name: renderer
      type: extension
      value: Renderer_Flexy

上の設定を使ってサンプル・アプリケーションを表示すると、次のような画面が表示されます。




 ここで、通常のHTML出力ではなく、JSONでフロー実行の結果を表示するように切り替えてみましょう。それには、Renderer_Flexyではなく、Renderer_JSONを使うように設定ファイルを変更すればOKです。

- name: View
  point:
    - name: renderer
      type: extension
      value: Renderer_JSON
- name: Renderer_JSON
  point:
    - name: useJSONP
      type: configuration
      value: false

 上のように書き換えた上で、リロードすると次ような応答が返っています。

{"dynamicContent":"This is a dynamic content."}

 注意していただきたいのは、応答をHTMLからJSONに切り替えるにあたって、コードに全く手を加えていないことです。そのため、既存のWebアプリケーションをJSON&JavaScriptによるリッチクライアント・アプリケーションに切り替えることもの容易ですし、両者を共存させることも可能です。
 さらに、Renderer_JSONのuseJSONP設定ポイントをTrueにすれば、JSONPで応答を返すこともできます。

- name: Renderer_JSON
  point:
    - name: useJSONP
      type: configuration
      value: true

上のように修正を加えた上で、コールバック関数callbackを指定してアクセスすると、次のように応答が返っています。

callback({"dynamicContent":"This is a dynamic content."});

 このように、Pieceでは設定ファイルに数行変えるだけで、簡単に出力フォーマットを変更することが可能です。
 この凄さは(、本当に凄いかどうか、役に立つかどうかは僕も思案中ですが)、スクリーンキャストを使えばもっと伝わると思うのですが、「Piece Frameworkのスクリーンキャストは、ナレーションを関西弁で吹き込み、英語字幕を付けなくてはならない」という鉄の掟があるため、残念ながら僕には作成できませんでした。;-)