[Next.js] API Routesでの実装方法の覚書
2 min read
背景
基本的な使い方は公式ドキュメントに書いてあるが、実際に使ってみて気付いたことをまとめておく。
環境
- Next.js v14.2.15
- Pages Router
- next.config.js: pageExtensions
実装
ファイル構成
src/pages/api
以下にAPI Routesとなるファイルを配置する。
// src/pages/api/posts?slug=xxx でパラメータによって返却されるデータが変化するAPI
import type { PostProps } from '@/types/source';
import type { NextApiRequest, NextApiResponse } from 'next';
import posts from '~/source/posts.json';
type ResponseData = PostProps[] | PostProps;
export default function handler(req: NextApiRequest, res: NextApiResponse<ResponseData>) {
const { slug } = req.query;
if (slug === undefined) {
return res.status(200).json(posts);
}
const post = posts.find((post) => post.slug === slug);
if (post === undefined) {
return res.status(404).json({ message: 'Not Found' });
}
res.status(200).json(post);
}
こういったファイルを作成するとhttps://localhost:8080/api/posts?slug=xxx
にアクセスすることで該当するデータを取得できる。以上である。
pageExtensionsを利用している場合の注意点
next.config.js内でpageExtensions
の設定を利用している場合、この設定はPages RouterだけではなくAPI Routesも影響してしまう。
module.exports = {
pageExtensions: ['page.tsx'],
};
例えば上記のような設定をしているとsrc/pages/api/posts.ts
が有効にならない。上記の設定のままAPI Routesを有効にしたい場合はsrc/pages/api/posts.page.ts
としなければならない。
module.exports = {
pageExtensions: ['page.tsx', 'api.ts'],
};
そのため、上記のように'api.ts'
を追加して、ファイル名をsrc/pages/api/posts.api.ts
とすることでAPI Routesを有効にできた。