IT-Q

Route Handler(route.ts)と Server Function は、どう使い分けますか。

分岐点は、HTTPのエンドポイントとして外に見せる必要があるかどうかです。自分の画面からフォームを送るだけなら Server Function で足り、型もそのまま繋がります。

面接官が見ているのは両方の存在意義を説明できるか。

よくある答えと、面談でどう見られるか

  • 外部から叩かれる口が要るなら Route Handler、自分の画面からの更新なら Server Function
    Webhook やモバイルアプリからの利用が Route Handler の出番です。
  • Route Handler の方が伝統的なので、基本はそちらを使う
    慣れの問題として理解はできますが、選択の基準にはなりません。自分の画面から送るだけなら、エンドポイント設計の手間が増えるだけです。
  • Server Function の方が新しいので、基本はそちらに寄せる
    新旧では選びません。外部に口が要るかどうかで分かれます。また Server Function は更新向けで、取得には推奨されていません。
  • どちらでも同じことができるので、好みで選んでよい
    できることが違います。Route Handler は HTML 以外を返す口として外に見せられますが、Server Function はそうではありません。

面接官は何を見ているか

  • 自分の画面からの更新なら Server Function、と言えた
  • 外部から叩かれるものは Route Handler、と言えた
  • HTTP の口が要るかどうかで分けられている

模範解答

分岐点は「HTTP のエンドポイントとして外に見せる必要があるか」です。

自分のアプリの画面からフォームを送るだけなら Server Function で十分です。エンドポイントを設計する手間が要らず、型もそのまま繋がります。

Route Handler が要るのは、外部から叩かれる口が必要な場合です。Webhook の受け口、モバイルアプリから使う API、HTML 以外(JSON、CSV、画像など)を返す用途がこれにあたります。公式でも Backend for Frontend のパターンとして紹介されています。

なお Route Handler は既定ではキャッシュされません。GET だけは明示的にキャッシュに寄せられますが、それ以外のメソッドはキャッシュされない仕様です。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。