Upgrade to Pro — share decks privately, control downloads, hide ads and more …

URLルーティングをつくるエピソード1

bmf_san
December 19, 2018

 URLルーティングをつくるエピソード1

bmf_san

December 19, 2018
Tweet

More Decks by bmf_san

Other Decks in Programming

Transcript

  1. URLルーティングをつくる
    エピソード1
    @Makuake LT Party 2018/12/19

    View Slide

  2. 動機
    ・ある⽇Golangを触っていた
    ・「標準ライブラリが充実していていいなぁ」
    ・「でもnet/httpのURLパースはちょっと弱いから外
    部ライブラリ使うのがスタンダートかな・・?」
    ・「⾃分で⽤意したい!」

    View Slide

  3. URLルーティングとは?
    ・リクエストされるURLに対し、実⾏したい処理は何
    かを判定させるもの
    • ex. http://example.com/users
    • /users → UserControllerͷॲཧΛฦ͢

    View Slide

  4. 実装パターン
    ・正規表現でURLマッチング
    ・⽊構造を⽤いて⽂字列探索のアルゴリズムを使う

    View Slide

  5. ⽊構造とは?
    ・グラフ理論という数学の分野で定義されている⽊の
    構造を持つデータ構造のこと
    ・⽊
    ・複数の点(nodeまたはvertex)と複数の辺
    (edge)で構成されたグラフ

    View Slide

  6. ɹࠜʢSPPUʣ
    ɹࢬʢFEHFʣ
    ɹઅʢOPEFʣ
    ɹ༿ʢMFBGʣ

    View Slide

  7. ⽊構造の例
    ・家系図
    ・ファイルシステム
    ・ドメイン名(cf. https://www.nic.ad.jp/ja/dom/system.html)
    ・構⽂⽊
    ・コンパイラ
    ・DOMツリー
    ・親⼦構造を持つタグやカテゴリとか

    View Slide

  8. 参考になりそうな実装を⾒てみる
    ・https://gist.github.com/neo-nanikaka/
    c2e2f7742b311696d50b
    ・https://github.com/nissy/bon
    ・https://github.com/nissy/mux
    ・https://github.com/ytakano/radix_tree
    ・https://github.com/kkdai/radix
    ・https://github.com/MarkBaker/Tries

    View Slide

  9. なるほどわからん

    View Slide

  10. URLルーティングをつくる
    ・何を⽊構造として扱うか?
    ・→ルート定義のリスト
    ・実装の流れ
    ・インプットとして、ルート定義とURLパスを得る
    ・ルート定義から⽊構造を⽣成
    ・URLパスをターゲットとして⽊構造を探索、マッチしたデー
    タを返す

    View Slide

  11. View Slide

  12. 1BUI .FUIPE "DUJPO
    (&5 )PNF$POUSPMMFS!EP4PNF"DUJPO
    VTFST (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO
    [email protected] (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO
    [email protected] 1045 6TFS$POUSPMMFS!EP4PNF"DUJPO
    VTFSTFWFOUT (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO
    [email protected] (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO
    [email protected] 1045 6TFS$POUSPMMFS!EP4PNF"DUJPO
    VTFSTTVQQPSU (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO

    View Slide

  13. VTFST
    (&5 [email protected] TVQQPSU

    [email protected]
    (&5
    (&5
    (&5 (&5 1045
    )551෦෼͕ऴ୺ϊʔυʢ༿ʣʹͳΔ

    View Slide

  14. View Slide

  15. To be continued

    View Slide