URLルーティングをつくるエピソード1@Makuake LT Party 2018/12/19
View Slide
動機・ある⽇Golangを触っていた・「標準ライブラリが充実していていいなぁ」・「でもnet/httpのURLパースはちょっと弱いから外部ライブラリ使うのがスタンダートかな・・?」・「⾃分で⽤意したい!」
URLルーティングとは?・リクエストされるURLに対し、実⾏したい処理は何かを判定させるもの• ex. http://example.com/users• /users → UserControllerͷॲཧΛฦ͢
実装パターン・正規表現でURLマッチング・⽊構造を⽤いて⽂字列探索のアルゴリズムを使う
⽊構造とは?・グラフ理論という数学の分野で定義されている⽊の構造を持つデータ構造のこと・⽊・複数の点(nodeまたはvertex)と複数の辺(edge)で構成されたグラフ
ɹࠜʢSPPUʣɹࢬʢFEHFʣɹઅʢOPEFʣɹ༿ʢMFBGʣ
⽊構造の例・家系図・ファイルシステム・ドメイン名(cf. https://www.nic.ad.jp/ja/dom/system.html)・構⽂⽊・コンパイラ・DOMツリー・親⼦構造を持つタグやカテゴリとか
参考になりそうな実装を⾒てみる・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
なるほどわからん
URLルーティングをつくる・何を⽊構造として扱うか?・→ルート定義のリスト・実装の流れ・インプットとして、ルート定義とURLパスを得る・ルート定義から⽊構造を⽣成・URLパスをターゲットとして⽊構造を探索、マッチしたデータを返す
1BUI .FUIPE "DUJPO (&5 )PNF$POUSPMMFS!EP4PNF"DUJPOVTFST (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO[email protected] (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO[email protected] 1045 6TFS$POUSPMMFS!EP4PNF"DUJPOVTFSTFWFOUT (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO[email protected] (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO[email protected] 1045 6TFS$POUSPMMFS!EP4PNF"DUJPOVTFSTTVQQPSU (&5 6TFS$POUSPMMFS!EP4PNF"DUJPO
VTFST(&5 [email protected] TVQQPSU [email protected](&5(&5(&5 (&5 1045)551෦͕ऴϊʔυʢ༿ʣʹͳΔ
To be continued