🔎

[データ構造] URLのRoutingを普通の速さで

2021/07/24に公開約800字

Rustにはhyperというライブラリがあります。
自分も少しだけPR送ったりしてます。
hyperはHTTPしかサポートしてません。
なので、hyperを利用する際はルーティングをどう実装するかは自分で決めなきゃいけません。

実際は、受け取ったリクエストからpathを取得し、メモリ上で何が要求されたのか判断し、処理を実行するベストプラクティスがあります。詳細は

https://github.com/hyperium/hyper
をみるとわかります。

ですが、ごく稀に「ルーティングをファイルシステムでやらなきゃ(自分で実装しなきゃ)」な場合に遭遇します。
そんなとき、どのように実装すべきでしょうか?
どのようにルーティング情報を保存し、どのように何が要求されたかを判定するべきでしょうか。
なかなか難しいです。

例えば

※ {}は変数
といったWebAPIのルーティングを考えます。

これら3つのみであれば、効率性など考える必要もないのだと思いますが、これが例えば100とかになると一つのリクエストに対して遅すぎる実装となるでしょう。

ルーティング情報が多いとき、標準的な解法かもしれませんが、木構造を利用できます。
例えば、やりすぎかもしれませんが「まずGETとPOSTで2分割して、pathの個数でまた分割して、最後はpathの情報で別々のファイルにする」などです。

これ以外に、良い方法があるのでしょうか?
あれば、ぜひ教えてください><

Discussion

ログインするとコメントできます