Next.js で FastAPI などのバックエンドから API を取得する方法について、詳細な手順を説明します。
Next.js で API を取得する方法
Next.js では、クライアントサイドとサーバーサイド両方で API を取得することができます。axios
を使って API を呼び出す方法を紹介します。API を取得する基本的な流れは、以下のようになります。
axios
インストール- API 呼び出しの実装
- データの表示
- サーバーサイドでの API 呼び出し(getServerSideProps)
- クライアントサイドでの API 呼び出し(useEffect)
1. axios のインストール
まず、API 呼び出しのために axios
をインストールします。
npm install axios
axios
は Promise ベースの HTTP クライアントで、API リクエストを簡単に行うことができます。
2. API 呼び出しの実装
Next.js で、API 呼び出しを行う方法として、以下の2つの方法があります。
A. サーバーサイドで API を呼び出す(getServerSideProps)
getServerSideProps
は、ページリクエスト時にサーバーサイドで API を呼び出して、ページを生成するためのデータを取得するために使います。
例: サーバーサイドで FastAPI のデータを取得する
// pages/index.js
import axios from 'axios';
const Home = ({ message }) => {
return (
<div>
<h1>{message}</h1>
</div>
);
};
// サーバーサイドで API 呼び出し
export async function getServerSideProps() {
try {
const res = await axios.get(`${process.env.NEXT_PUBLIC_API_URL}/`);
const message = res.data.message;
return {
props: { message }, // ページに渡すデータ
};
} catch (error) {
console.error(error);
return {
props: { message: 'Failed to fetch data' },
};
}
}
export default Home;
この方法を利用すると、API 呼び出しがサーバーサイドで行われ、取得したデータがページに渡されます。ページがリクエストされるたびに、サーバー側でデータを取得します。
B. クライアントサイドで API を呼び出す(useEffect)
useEffect
を使って、コンポーネントがレンダリングされた後にクライアントサイドで API を呼び出す方法です。API 呼び出しがクライアントサイドで行われるため、ページがブラウザにロードされてからデータを取得します。
例: クライアントサイドで API を呼び出す
// pages/index.js
import { useEffect, useState } from 'react';
import axios from 'axios';
const Home = () => {
const [message, setMessage] = useState('');
useEffect(() => {
const fetchMessage = async () => {
try {
const res = await axios.get(`${process.env.NEXT_PUBLIC_API_URL}/`);
setMessage(res.data.message);
} catch (error) {
console.error(error);
setMessage('Failed to fetch data');
}
};
fetchMessage();
}, []); // コンポーネントがマウントされた後に一度だけ実行
return (
<div>
<h1>{message}</h1>
</div>
);
};
export default Home;
この方法では、ページがブラウザにロードされた後に API リクエストが送信され、データが取得されるまで、表示されるメッセージが変わります。クライアントサイドでのみ API 呼び出しを行いたい場合に有効です。
3. 環境変数の設定
Next.js では、process.env
を使用して環境変数を管理します。.env.local
ファイルを作成して、API の URL を環境変数として設定します。
例えば、NEXT_PUBLIC_API_URL
という環境変数を使って、API の URL を設定します。
// .env.local
NEXT_PUBLIC_API_URL=http://localhost:8000
これで、Next.js のどのコンポーネントでも process.env.NEXT_PUBLIC_API_URL
を使って API URL を参照できます。
4. データの表示
API 呼び出しが成功したら、取得したデータをコンポーネント内で表示します。
getServerSideProps
または useEffect
で取得したデータを、そのまま JSX の中に表示できます。
5. エラーハンドリング
API 呼び出し時にエラーが発生する可能性があります。try-catch
ブロックを使用して、エラーハンドリングを行います。例えば、ネットワークの問題やサーバーエラーが発生した場合に備えて、エラーメッセージを表示することができます。
まとめ
- サーバーサイドで API を呼び出す (
getServerSideProps
): ページリクエスト時にサーバー側で API を呼び出し、その結果をページに渡します。SEO 対策に有効です。 - クライアントサイドで API を呼び出す (
useEffect
): コンポーネントがマウントされた後にクライアントサイドで API を呼び出します。非同期的なデータの取得に便利です。
どちらの方法も、FastAPI などのバックエンド API からデータを取得するのに適しています。どちらを選ぶかは、アプリケーションの要件やパフォーマンスに基づいて決めると良いでしょう。
コメント