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の値も入ってくる点に注意しましょう。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark