108
Web API のすすめ ~巨人にさらなる力を~ 2010/10/16 YAPC::Asia 2010 @xaicron

Web API のすすめ

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Web API のすすめ

Web API のすすめ~巨人にさらなる力を~

2010/10/16 YAPC::Asia 2010@xaicron

Page 2: Web API のすすめ

自己紹介

名前Yuji Shimada嶋田裕二

仕事DeNA

CPANXAICRON

twitter@xaicron

blog http://blog.livedoor.jp/xaicron/

Page 3: Web API のすすめ

謝罪

Page 4: Web API のすすめ

サブタイトルはただのあおり文句です

Page 5: Web API のすすめ

今日は Web API の話をします

Page 6: Web API のすすめ

が、コードとかはほとんど出てきません

Page 7: Web API のすすめ

15時から講堂でやるやつはコードいっぱい出てきますので

見に来てね!!

Page 8: Web API のすすめ

一口に Web API と言ってもいろいろありますね

Page 9: Web API のすすめ

public に使えるものGoogle Map とか

認証が必要なものtwitter

内部的に使ってるものGmail

Page 10: Web API のすすめ

それぞれの特徴

Page 11: Web API のすすめ

public なもの

ユーザー登録とかなしで、http(s) 経由で直接使えるどれくらいのアクセスがくるのか予想をつけ辛い

Page 12: Web API のすすめ

認証が必要なもの

ユーザー登録が必要AccessToken とかがもらえて、それを使ってアクセスユーザー数からアクセスがある程度わかる

不正なユーザーとか BAN できる

Page 13: Web API のすすめ

内部的に使ってるもの

自分のところのページを非同期にするために同一ドメイン内とかで Ajax 通信ユーザーは自分ではつかわないアクセス数は、ユーザー数でわかる

Page 14: Web API のすすめ

いろいろなものがある

Page 15: Web API のすすめ

全体に共通して言えること

Page 16: Web API のすすめ

速さが重要

Page 17: Web API のすすめ

Web API は速くないと全く使う気が起きない

Page 18: Web API のすすめ

内部 API の場合は非同期でページを表示してるだけだから、そんなに速くなくてもよくね?

Page 19: Web API のすすめ

ページの描画が 10% 遅くなるだけでアクセス数が(ry

Page 20: Web API のすすめ

というのは置いておいても

Page 21: Web API のすすめ

速いに越したことはないよね!

Page 22: Web API のすすめ

正直、Web API はもう流行ってないんじゃないか疑惑

Page 23: Web API のすすめ

参考:http://yusukebe.com/archives/10/10/04/210341.html

Page 24: Web API のすすめ

引用:“実際に「使える」Web APIは限られていることからマッシュ

アップはツンダ”

Page 25: Web API のすすめ

その API が流行るかどうかは誰にもわからない

Page 26: Web API のすすめ

もしかしたら何かで流行るかもしれないし

Page 27: Web API のすすめ

とりあえず作ってみようぜ!

Page 28: Web API のすすめ

高速な Web API の実現方法

Page 29: Web API のすすめ

既存の WAF を使わない

Page 30: Web API のすすめ

前夜祭で @tokuhirom が言っていたこと

Page 31: Web API のすすめ

徳永 「WAF は全部コードが読めるものじゃないと使えない」

Page 32: Web API のすすめ

Agree

Page 33: Web API のすすめ

自分がわかっていないものを使って、

問題が起こったときにn

Page 34: Web API のすすめ

速いものを作るには、特化したものを作るしかない

Page 35: Web API のすすめ

PSGI のおかげで

Page 36: Web API のすすめ

ここ一年で Web アプリを取り巻く環境は劇的に変わった

Page 37: Web API のすすめ

いまはツールが充実している

Page 38: Web API のすすめ

ore-ore WAF を作るのは難しくない

Page 39: Web API のすすめ

既存の WAF だと機能過多な場合がほとんど

Page 40: Web API のすすめ

Web API では用件がシンプルなので

Page 41: Web API のすすめ

Controller をがんばる必要がない

Page 42: Web API のすすめ

1 : 1

Page 43: Web API のすすめ

でマッピングできる

Page 44: Web API のすすめ

detach とか forward みたいな機能すら不要

Page 45: Web API のすすめ

Web API に限ったことではないけど

Page 46: Web API のすすめ

Web App を作る上では、Controller と Model は完全に分離

すべき

Page 47: Web API のすすめ

結局はちょっと高機能な dispatcher としてしか使っていない

Page 48: Web API のすすめ

なら無駄な機能を削ぎ落としたやつを自分で書いた方がいい

Page 49: Web API のすすめ

さらに、Web API では View らしい View はない

Page 50: Web API のすすめ

ほとんどすべての場合で、JSON を返せばみんな幸せ

Page 51: Web API のすすめ

一時期、XMLとか、なぜかYAMLとかを返すものもありました

Page 52: Web API のすすめ

誰もうれしくない

Page 53: Web API のすすめ

みんなで幸せになりましょう

Page 54: Web API のすすめ

ここまでのまとめ

Page 55: Web API のすすめ

PlackRouter::SimpleJSON

Page 56: Web API のすすめ

あたりを使って、イカしたore-ore WAF を書きましょう

Page 57: Web API のすすめ

ちょっとしたものなら本当にすぐ書けるよ

Page 58: Web API のすすめ

第一部 〜完〜

Page 59: Web API のすすめ

第二部 〜実践編〜

Page 60: Web API のすすめ

よし、たぶん高速な dispatcher は書けるはずだお!

Page 61: Web API のすすめ

とはいえ、dispatch にかかる時間は通常は全体の処理の

数%程度!

Page 62: Web API のすすめ

本当に必要なのは Model のチューニングですね

Page 63: Web API のすすめ

通常、ちゃんとチューニングされた Perl コードであれば

Page 64: Web API のすすめ

多くのボトルネックは DB 接続のようなものになる

Page 65: Web API のすすめ

残念ながらそうならないケースもちらほら

Page 66: Web API のすすめ

どんな場合にも言えることだけど、最も効果の出やすいチューニング

Page 67: Web API のすすめ

method 呼び出しを減らすこと

Page 68: Web API のすすめ

ただし、過剰に減らして可読性が下がってもしょうがない

Page 69: Web API のすすめ

Devel::NTYProf を使ってちゃんとボトルネックを見つける

Page 70: Web API のすすめ

次に、オブジェクトの生成を減らす

Page 71: Web API のすすめ

例えば、ORM を使っていて、それがかなりのオブジェクトを生成しているのであれば、使用をやめる

Page 72: Web API のすすめ

ただし、生の DBI をそのまま使うのはやはり面倒

Page 73: Web API のすすめ

最近は

Page 74: Web API のすすめ

DBIx::Connector ->(DBIx::DBHREsolver ->)

DBI

Page 75: Web API のすすめ

みたいにラップして使うのがいい気がしている

Page 76: Web API のすすめ

もちろん、ORM でも十分に速度を出すことも可能なので

Page 77: Web API のすすめ

その辺りはよしなに使い分ければいいと思います

Page 78: Web API のすすめ

必ず使うクラスがあり、それを毎回 new しているような場合

Page 79: Web API のすすめ

Object::Container のようなものに入れて singleton にしておくのがい

Page 80: Web API のすすめ

最近の Object::Container は preload オプションとかついたので

Page 81: Web API のすすめ

さらに使いやすくなっているはず!

Page 82: Web API のすすめ

run する前に 読み込んでおけば、CoW が効くのでメモリーも抑えら

れて一石二鳥

Page 83: Web API のすすめ

ここまでのまとめ

Page 84: Web API のすすめ

PlackRouter::SimpleJSONObject::ContainerDBIx::Connctor (DBIx::Skinny)

Page 85: Web API のすすめ

当然、ここの部分は API の用件によってかなりぶれがあり、一概にこ

れがいいとはいません

Page 86: Web API のすすめ

が、一般的に、今言ったことを守っておけば、コード事態がボトルネックになる確立はだいぶ減ると思い

ます

Page 87: Web API のすすめ

というわけで

Page 88: Web API のすすめ

第二部 〜未完〜

Page 89: Web API のすすめ

第三部 〜運用編〜

Page 90: Web API のすすめ

多分、次で @fujiwara さんが超絶詳しく説明してくれます

Page 91: Web API のすすめ

第三部 〜期待〜

Page 92: Web API のすすめ

だけではさすがにあれなので

Page 93: Web API のすすめ

まぁ基本的なことですが

Page 94: Web API のすすめ

まぁ基本的なことですが

Page 95: Web API のすすめ

当然、必要な場所でログはとりましょう

Page 96: Web API のすすめ

Log::Dispatch がデファクトなので素直に使っておくのがいいです

Page 97: Web API のすすめ

Syslog n

Page 98: Web API のすすめ

ここまでのまとめ

Page 99: Web API のすすめ

PlackRouter::SimpleJSONObject::ContainerDBIx::Connecter (DBIx::Skinny)Log::Dispatch

Page 100: Web API のすすめ

あたりを使って薄いものをつくればいいですね!

Page 101: Web API のすすめ

それ Amon2 で出来るよ!

Page 102: Web API のすすめ

って感じですが、あれは普通に参考になるので一度はソースを読ん

だ方がいいです

Page 103: Web API のすすめ

まとめ

Page 104: Web API のすすめ

今の時代、ore-ore WAF を書くのは

別に怖くない

Page 105: Web API のすすめ

もちろん、なれてないうちは、イケてないものが出来ちゃうかもしれ

ないけど、

Page 106: Web API のすすめ

新しいものを常に追求した方が楽しいでしょ!!

Page 107: Web API のすすめ

:-)

Page 108: Web API のすすめ

ご清聴ありがとうございました