More Related Content
Similar to BEAR.Sunday@phpcon2012
Similar to BEAR.Sunday@phpcon2012 (20)
More from Akihito Koriyama
More from Akihito Koriyama (15)
BEAR.Sunday@phpcon2012
- 2. About Me
PHP Freelance Exicite Travel Famicon
@koriym
@BEARSunday
- 18. POST
I want to order a drink.
- 19. PUT
I want to be able to change my drink.
- 27. アスペクト指向
• @DbPager
• @Log
• @Transactional
• @Cahce
- 28. • Google GuiceクローンのDI
• push / pull アーキテクチャ
• オブジェクトグラフキャッシュ
• リソース指向アーキテクチャ
• 名前付き引き数
• シグナル・スロット
• Symfony / ZF2 / Aura コンポーネント
- 30. WHAT’S NEXT
• Web Framework
• SQL Mapper
• BigPipe
• Realtime Web
• CQRS / Thrift / Daemon
Editor's Notes
- \n
- こんにちは。BEAR.Sundayの開発をしている郡山です。では早速紹介をしたいと思います。宜しくお願いします。\n
- PHP5.4専用のフレームワークです。 \n
- BEAR.Sundayには様々な特徴がありますが、中でも今日はAPI駆動開発を中心にお話をしたいと思います。\n
- APIとは、プログラムのためのインターフェイスです。通常外部に対して使うものですが、これをアプリケーションの内部でも使って、アプリケーションの持つ情報を全てAPIにしよう、そしてそれを中心に開発しようというものです。ではさっそくこのAPI駆動開発、ADDで作られたBEAR.Sundayのアプリケーションを見て見ます。\n
- データベースから記事一覧のデータを取得して表示する、チュートリアルなどでよくあるページです。これはデバック表示がされてます。緑色のタグに注目してみてください。\n
- これですね。\n
- URIが表示されています。見慣れないスキーマやホスト名ですがこれがBEAR.Sundayの内部URIです。これがAPIとして機能します。\n
- それぞれのAPIでリクエストされた情報のかたまりはリソースと呼ばれます。\nここではそのリソース範囲が破線で示されています。つまり今自分が見てる情報はどのAPIによって得られたものかがわかります。内側の記事リソースはページリソースに含まれてる、などリソースがどのように構成されているかということも分かるでしょう。並んでいるツールアイコンをクリックしてみます。\n
- 虫眼鏡のインスペクタアイコンをクリックするとAPIで得られたデータが表示されます。つまりリソースの状態です。Viewアイコンはそれがどのような表現になったかがわかります。\nHTML5のcanvasを使ったエディタで、なかなか快適です。ctrl+Sやクリックで保存することもできます。\n
- それではこのAPIを今度はコンソールから操作してみます。 スクリプトを利用して、記事リソースをGETリクエストします。\n
- 200 OKのレスポンスコード、それにブログの記事がJSONフォーマットで返ってきました。webアプリケーションではこれが部分的なHTMLとしてレンダリングされていましたが、API利用するとこのようにJSONで返ってきます。\n
- スキーマやホストは自由に構成する事ができます。リソースの名前と実装は任意で割り当てられるので、テストの時にダミーデータを使ったり、既存のシステムを統合するのにレイヤーとしても機能します。\n
- BEARでは”ハイパーテキスト駆動API”が使える事も特徴です。\n
- ロイ.T.フィールディングさん、この人はRESTを策定したいわばRESTの神様みたいな人です。この人が言うには「ハイパーテキスト駆動API以外はRESTを名乗っては行けない」そうです。\n
- それではハイパーテキスト駆動とはどういうことでしょうか?簡単に言えば、情報が他の情報と繋がっているという事です。リソースとリソースがリンクされてるということです。\n
- それではBEAR.Sundayで作成したハイパーテキスト駆動のアプリケーションを見て見ましょう。しかしここで紹介するのは一般的なWebページのアプリケーションではありません。REST APIのHTTPアプリケーションです。\n
- 飲み物を注文してその支払をする簡単なアプリです。まず注文URIにdrinkをPOSTして、注文リソースをつくります。201 Createdとステータスコードが返ってきて無事注文が作成され、注文内容が返ってきたのが分かります。\n
- 次に注文を変更するためPUTメソッドでリクエストします。注文IDと追加を指定してPUTすると Continue続けなさいというレスポンスが返ってきました。レスポンスにはリンクが含まれ、この注文に対する支払先が記されてることに注目してください。\n
- 支払には何が必要でしょうか?OPTIONSメソッドではそのURIでどのメソッドが使えるか、またクエリーには何が必要かを知る事ができます。これで支払URIに何をPUTすればいいかが分かりますね。ちなみに支払をするのにPUTを使っているので、同じリクエストを二度しても支払が重複することはありません。\n
- このサンプルアプリでリンク付きの情報、ハイパーメディアがどのようなものかお分かりいただけたでしょうか? HTTPはトランスポートプロトコルではなくて、アプリケーションプロトコルです。\n情報の関連をクライアントでなく、サービスにもつこのアプリケーションは、その柔軟性から従来のAPIよりより長期運用が可能なものになり、自己の機能をよりよく表した自己記述的なものになります。\nAPIはたんにデータを返すだけでなくその関連性も利用できるハイパーメディアになりました。紹介したリンク付きJSONフォーマットはHALと言われるドラフトRFCのもので、BEAR.SundayはこのPHP実装を利用しています。\n
- APIは利用方法によって事前、事後に必要な処理が変わります。\n
- 例えば、認証や\n
- バリデーションなどはソフトウエア内部からのアクセスでは不要でも、外部からのアクセスでは必要でしょう。\n
- 特定のAPIにはロギングが必要かもしれません。\n
- BEARではこれらの「横断的な処理」をアノテーションや、URI、またはメソッド、これらの条件を決めてそれに従うものに指定することができます。アスペクト指向、AOPと呼ばれるプログラミング技法です。\n
- このAOPによってDBページング処理や、ロギング、トランザクション等を対象となるコードには手を加えないでbootstarp時の設定だけで機能を追加することができます。例えば普通のSQLを書いてもそれをページング対応のSQLにするのに対象のコードに手を入れる必要はありません。モバイルだったらページングにする、というような処理が該当コードを記述することなく実現できます。\n
- これでREST APIを中心としたBEAR.Sundayの特徴の紹介を終わります。他にも様々な特徴があります。\n
- BEAR.Sundayは設計の抽象度が高く、技術も多岐に渡っていますが、パフォーマンスや学習コストなどには非常に注力していいて、高いバランスを目指しています。これらの事はゴールでも有りますが、前提条件でもあります。\n
- 現在APIフレームワークとしての完成度が高まっている状態ですが、Webフレームワークとしての完成やその他の機能を実装予定です。1.0リリースは年内を予定しています。\n
- 知名度の高い世界的なフレームワークに混じって、個人制作のフレームワークを紹介させていただきました。最初は無茶なことだとも思いました。\n\nしかし注目してくれる人が少なからずいて、またこんな小さなプロジェクトが、大きなカンファレンスの審査に通り、登壇して発表できる事自体が、現在のPHPコミュニティやこのPHPカンファレンスの健全さや、素晴らしさを証明する、そういうメッセージになるのではないかと思い、応募を決めました。\n
- ご清聴ありがとうございました。\n
- それではmeetupでお会いしましょう。\n