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

BEAR.Sunday@phpcon2012

2,940

Published on

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,940
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

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 of "BEAR.Sunday@phpcon2012"

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

      Clipping is a handy way to collect important slides you want to go back to later.

    ×