Honoでサブディレクトリごとにリソースを分割したAPIを作る
Honoを使用してAPIを作り込む際に、ファイルの分割をサブディレクトリ・パス単位で行うことが多いです。ルートのAPIを作成し、app.routeを使用してサブディレクトリ内の追加したいAPIを登録することで、パスの指定やリソースの分割がシンプルになります。例として、/supabase/contentというパスを指定したAPIを追加する方法が説明されています。
広告ここから
広告ここまで
目次
HonoでいろいろとAPIを作り込んでいく時、ファイルの分割をサブディレクトリ・パス単位で分割することが多いので、やり方を簡単にまとめました。
ルートのAPIを作る
まずはルートのAPIを用意します。
const app = new Hono<{
Bindings: {
AI: Fetcher;
VECTORIZE_INDEX: VectorizeIndex;
}
}>()
app.get('/', c => c.text("hello"))
export default app
シンプルに追加する場合
ここにAPIを普通に足すと、こんな感じになります。
app.get('/sub/search', async c => {
return c.text('search')
})
app.post('/sub/content', async c => {
return c.text('search')
})
これでも充分なのですが、パスが増えてくると、サブディレクトリ部分のパスを毎回書くのが煩雑になったり、そのパスでしか使わないライブラリを外に出したりしたくなります。
app.route
でサブディレクトリを指定する
最近はapp.route
を使ってファイルを分割することが増えてきました。サブディレクトリの中に追加したいAPIは、新しくnew Hono()
を実行して、そこにパスを生やします。
import { Hono } from "hono";
export const supabaseApp = new Hono()
supabaseApp.get('content', async c => {
return c.text('content')
})
そしてサブディレクトリのパス名でapp.route
を使って登録すればOKです。
app.get('/', c => c.text("hello"))
app.route('/supabase', supabaseApp)
export default app
これでパスの指定やリソースの分割がシンプルになりました。
% curl http://127.0.0.1:8787/supabase/content
content%
ちなみに、c.req.path
は/supabase/content
が届きます。route
の値も入ってくる点に注意しましょう。