Next.jsでAPI Routesを使用方法と注意点
Next.jsにおけるAPI Routesの使用
Next.jsでは、API Routesを使用して独自のAPIエンドポイントを作成することが可能です。これにより、Next.jsアプリケーション内から直接HTTPリクエスト(GET、POST、PUT、DELETEなど)を処理できます。TypeScriptを使用する場合、まず型定義を適切に設定することが大切です。
API Routeの作成
API Routeを作成するためには、まずpages/api
ディレクトリ内に.ts
または.tsx
ファイルを作成します。ファイル名とパスがそのままURLのエンドポイントとして使用されます。
例えば、pages/api/hello.ts
というファイルを作成すれば、そのエンドポイントは/api/hello
となります。
API Routeのハンドラ関数
API Routeファイル内には、リクエストを処理するハンドラ関数をエクスポートします。この関数は、以下の2つのパラメータを取ります。
req
:IncomingMessage
インスタンスに似たHTTPリクエストオブジェクトres
:ServerResponse
インスタンスに似たHTTPレスポンスオブジェクト
これらのオブジェクトは、NextApiRequest
およびNextApiResponse
という型を持つので、TypeScriptで適切に型定義できます。
以下に、API Routeを作成する基本的なコードスニペットを示します。
import type { NextApiRequest, NextApiResponse } from 'next'
export default function handler(
req: NextApiRequest,
res: NextApiResponse
) {
res.status(200).json({ name: 'John Doe' })
}
上記のコードは、GETリクエストが/api/hello
に対して行われると、ステータスコード200と共にJSONレスポンスを返します。
リクエストメソッドの処理
req.method
を使用することで、異なるHTTPメソッドを処理することができます。以下に、GETとPOSTメソッドをそれぞれ処理する例を示します。
import type { NextApiRequest, NextApiResponse } from 'next'
export default function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method === 'GET') {
res.status(200).json({ name: 'John Doe' })
} else if (req.method === 'POST') {
// リクエストボディからデータを取得
const { name } = req.body
res.status(200).json({ yourName: name })
} else {
// その他のHTTPメソッドに対する処理
res.setHeader('Allow', ['GET', 'POST'])
res.status(405).end(`Method ${req.method} Not Allowed`)
}
}
上記のコードでは、GETリクエストとPOSTリクエストを別々に処理し、それ以外のメソッドに対しては405エラーを返します。