BEAR.Sunday@phpcon2012
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,428
On Slideshare
2,176
From Embeds
1,252
Number of Embeds
7

Actions

Shares
Downloads
8
Comments
0
Likes
3

Embeds 1,252

http://www.bear-project.net 815
http://bear-project.net 389
https://twitter.com 43
http://translate.googleusercontent.com 2
http://twitter.com 1
https://si0.twimg.com 1
http://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \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

Transcript

  • 1. BEAR.SundayAkihito Koriyama (@BEARSunday) 15 Sep 2012 phpcon2012
  • 2. About MePHP Freelance Exicite Travel Famicon @koriym @BEARSunday
  • 3. PHP 5.4+ Only
  • 4. API Driven Development
  • 5. • 全ての情報をAPIとして利用可能に• APIを内部でも利用する *API提供をサブプロ ジェクトにしない
  • 6. テキスト
  • 7. page://self/blog/postsapp://self/user?id=10app://other/user?id=10office://self/room/reserve
  • 8. Hypertext-Driven API
  • 9. “REST APIs must be hypertext-driven.” REST神
  • 10. Hypertext-Driven ?• =情報が繋がっている
  • 11. Hypertext-Driven Application • PHPのフレームワーク • PHPもフレームワーク? • HTTPもフレームワーク?
  • 12. POST I want to order a drink.
  • 13. PUT I want to be able to change my drink.
  • 14. OPTIONS
  • 15. • Hypermedia Application Language
  • 16. Client API
  • 17. Client Auth API
  • 18. Client Valid Auth API
  • 19. Client Valid Auth API Log
  • 20. @ValidClient Valid Auth API Log /admin delete
  • 21. アスペクト指向 • @DbPager • @Log • @Transactional • @Cahce
  • 22. • Google GuiceクローンのDI• push / pull アーキテクチャ• オブジェクトグラフキャッシュ• リソース指向アーキテクチャ• 名前付き引き数• シグナル・スロット• Symfony / ZF2 / Aura コンポーネント
  • 23. MUST / GOAL• パフォーマンス• 低い学習コスト• 長期間運用可能なソフトウエア品質
  • 24. WHAT’S NEXT• Web Framework• SQL Mapper• BigPipe• Realtime Web• CQRS / Thrift / Daemon
  • 25. This is a message.
  • 26. Thankl you.
  • 27. See you @BEAR.Sunday meetup #1