$30 off During Our Annual Pro Sale. View Details »

Paging in API

Paging in API

This is a presentation I used at #pagernight on 2014-07-04.

r7kamura

July 04, 2014
Tweet

More Decks by r7kamura

Other Decks in Programming

Transcript

  1. AAPPIIのページングの話


    !
    @@rr77kkaammuurraa


    ##ppaaggeerrnniigghhtt

    View Slide

  2. 最近ワイワイしたもの


    !
    ** JJSSOONN SScchheemmaaでいろいろやるやつ


    ** RRuubbyyのHHuubboottクローン


    ** 22つのSSQQLLから差分となるSSQQLLを生成するやつ


    ** テストからドキュメント生成するやつ


    ** uuiiuurreeooの総資産mmaacckkeerreellで監視するやつ

    View Slide

  3. 今日話さないこと


    !
    ** UUIIの話


    ** 京の地に眠るとされる110088種のページャ


    ** 僕の考えた最強のページネーション


    ** オープンソースの軽量コンテナDDoocckkeerrを使おう


    ** かわいいKKoottlliinn


    ** ##モリスナイト

    View Slide

  4. 今日話すこと


    !
    ** AAPPIIこんな感じでつくりました


    ** ページャの実装こうなってます


    ** ページャちょっと怖い話


    ** 所感

    View Slide

  5. ← ページングこんな感じ


    ((TTwwiitttteerr風の無限ページャ))


    !
    ※これはWWeebbブラウザ版


    ((アプリの動画撮るの難しかった))

    View Slide

  6. AAPPII
    データベース
    各種WWeebbアプリ
    AAnnddrrooiidd


    22001144--0022〜
    iiOOSS


    22001133--0088〜

    View Slide

  7. GGEETT //ppiicckkuupp__rreecciippee
    GGEETT //ddaaiillyy__rraannkkiinnggss//22001144--0077--0044
    ** トップページは大体キャッシュ


    ** 複数のAAPPIIリクエストを送ってる

    View Slide

  8. ** 日付毎にアクセス数上位2200件


    ** 11リクエストで11日分


    ** スクロールで次ページ読み込み
    GGEETT //ddaaiillyy__rraannkkiinnggss//22001144--0077--0044
    GGEETT //ddaaiillyy__rraannkkiinnggss//22001144--0077--0033

    View Slide

  9. GGEETT //hhoott__rreecciippeess??ppaaggee==11
    GGEETT //hhoott__rreecciippeess??ppaaggee==22
    ** つくれぽが1100件ついたレシピ


    ** スクロール ==>> ppaaggee==nn++11

    View Slide

  10. GGEETT //rreecciippeess//sseeaarrcchh??ppaaggee==11
    ** 検索AAPPII


    ** スクロール ==>> ppaaggee==nn++11
    GGEETT //rreecciippeess//sseeaarrcchh??ppaaggee==22

    View Slide

  11. GGEETT //ccaatteeggoorriieess
    これは見た目の都合で隠してるだけ
    ** カテゴリAAPPII


    ** ツリー構造で11親等先まで取得


    ** ページャ必要なし

    View Slide

  12. GGEETT //bbooookkmmaarrkk__ttaaggss
    ** MMYYフォルダ ((とユーザ情報))


    ** ログイン中のときだけ使う


    ** ここもページャ必要なし
    GGEETT //mmee

    View Slide

  13. GGEETT //bbooookkmmaarrkkss??ppaaggee==11
    GGEETT //bbooookkmmaarrkkss??ppaaggee==22
    ** MMYYフォルダ内のレシピ返すAAPPII


    ** スクロール ==>> ppaaggee==nn++11

    View Slide

  14. 実装の話

    View Slide

  15. 要素技術


    ※大したことやってないです


    !
    ** LLiinnkk HHeeaaddeerr


    ** KKaammiinnaarrii


    ** その他

    View Slide

  16. LLiinnkk HHeeaaddeerr


    !
    ** RRFFCC 55998888 ((WWeebb LLiinnkkiinngg))


    ** ヘッダ内に他ページへのリンク


    ** 最初・前・次・最後 を入�れてる


    !
    Link:  ;  rel=“next”,  
               ;  rel=“last”

    View Slide

  17. KKaammiinnaarrii


    !
    ** あとで @@aa__mmaattssuuddaa がきっと


    ** 単純な配列にも適用できて便利


    ** SSoollrrの検索結果とかにも使える


    !
    Recipe.page(2).per(20)  
    Kaminari::PaginatableArray.new(array)

    View Slide

  18. その他


    !
    ** 社内用AAPPIIフレームワークがある


    ** 集合を定義したらAAPPIIになる


    ** II//FFが統一されてSSOOAAしやすい

    View Slide

  19. RReessoouurrccee
    VVaalliiddaattiioonn
    PPaaggiinnaattiioonn
    JJssoonnEEnnccooddeerr
    RReeqquueesstt
    RReessppoonnssee
    AAuutthhoorriizzaattiioonn
    <<----ここで絞込 ++ LLiinnkkHHeeaaddeerr

    View Slide

  20. class RecipesController < ApplicationController
    include Authorization
    !
    prepend Pagination
    !
    def index
    render json: resources
    end
    !
    private
    !
    def resources
    Recipe.published
    end
    end

    View Slide

  21. ページャ怖い話


    !
    「キャッシュ入�れた」


    !
    !
    !
    !
    !
    !
    「めでたい」「爆速」


    「」「::++11::」


    「iiOOSSアプリなんか“もっと見る”出ないんだけど?」

    View Slide

  22. 所感


    !
    ** 人は結局正規表現で数字だけ抜き取る


    ** この規模だと伝統的ページャでOOKK


    ** ページ数増えないサービスづくりが良い

    View Slide

  23. おわり


    !
    AAPPIIのページングの話


    !
    @@rr77kkaammuurraa


    ##ppaaggeerrnniigghhtt

    View Slide