🐫
【Nuxt】APIレスポンスを自動でcamelCaseに変換するマイベストプラクティス(SSR対応)
NuxtでAPIを利用する際、サーバーからのレスポンスがスネークケース (snake_case) で返ってくることがあります。しかし、フロントエンドではキャメルケース (camelCase) を使用するのが一般的です。
本記事では、Nuxtのサーバーミドルウェアを活用して、APIレスポンスのキーを自動的にcamelCaseへ変換する方法を解説します。
目的
- APIのレスポンスデータを統一的にcamelCaseへ変換
- フロントエンドのコードを統一し、一貫性のある変数命名を実現
- ミドルウェアを活用して、全APIリクエストを自動で変換
実装方法
camelcase-keys
パッケージをインストール
1. まず、レスポンスデータのキーを変換するために camelcase-keys
をインストールします。
npm install camelcase-keys
または
yarn add camelcase-keys
server/middleware/fetch.ts
を作成
2. Nuxt 3 では server/middleware/
ディレクトリにミドルウェアを定義することで、サーバー側のAPIリクエスト処理をカスタマイズできます。
以下のように server/middleware/fetch.ts
を作成し、APIレスポンスを自動的に camelCase
に変換する処理を記述します。
server/middleware/fetch.ts
import camelcaseKeys from 'camelcase-keys'
import { defineEventHandler } from 'h3'
export const createCustomFetch = (baseURL: string) => {
return $fetch.create({
baseURL,
onRequest({ options }) {
console.log('Server-side request:', options)
},
onResponse({ response }) {
if (response._data && typeof response._data === 'object') {
response._data = camelcaseKeys(response._data, { deep: true })
}
},
})
}
export default defineEventHandler((event) => {
const config = useRuntimeConfig()
event.context.customFetch = createCustomFetch(config.public.apiBaseUrl)
})
コードの解説
createCustomFetch
関数
この関数では、カスタムの $fetch
インスタンスを作成し、baseURL
を設定します。
- onRequest フック: APIリクエストの前にオプションをログに記録。
-
onResponse フック: APIレスポンスを受け取った後、
camelcaseKeys
を適用して、レスポンスデータのキーを自動変換。 -
event.context.customFetch
にセットすることで、イベント内でカスタム$fetch
を利用可能にする。
defineEventHandler
この関数を利用することで、NuxtのAPIミドルウェアとして動作させることができます。
動作確認
APIレスポンスの変換前
サーバーから以下のようなスネークケースのデータが返ってくるとします。
{
"user_id": 123,
"user_name": "John Doe",
"profile_data": {
"profile_image_url": "https://example.com/image.jpg"
}
}
APIレスポンスの変換後
ミドルウェアを適用することで、フロントエンドで受け取るデータはcamelCase になります。
{
"userId": 123,
"userName": "John Doe",
"profileData": {
"profileImageUrl": "https://example.com/image.jpg"
}
}
なぜミドルウェアを使うのか?
-
全てのAPIレスポンスを自動変換 → 毎回
camelcaseKeys()
を手動で呼び出す必要がなくなる - 一貫性のあるデータ形式 → フロントエンドでスネークケースを考慮せずに済む
- コードのシンプル化 → API呼び出しの度に変換処理を書く必要がなくなる
まとめ
Nuxt 3 のサーバーミドルウェアを活用することで、APIレスポンスを自動的に camelCase
に変換し、フロントエンドのコードを統一することができます。
- ミドルウェアを活用して、APIレスポンスを統一的にcamelCase化
- カスタム
$fetch
を作成し、全APIリクエストに適用可能 - データの一貫性を保ち、フロントエンドの開発を効率化
これにより、APIレスポンスを簡潔に扱うことができ、可読性や保守性が向上します。
Discussion