Back

Node.jsで最小限のREST APIを構築する方法

Node.jsで最小限のREST APIを構築する方法

フロントエンドプロジェクト用に素早くバックエンドが必要です。プロトタイプ、ローカル開発、またはシンプルな本番サービスかもしれません。Node.js REST APIのセットアップに1週間もの設定時間は必要ありません。

このガイドでは、モダンなNode.jsとExpress 5を使用して最小限のREST APIを構築する手順を説明します。JSONパース、適切なエラーハンドリング、クリーンな構造を、わずか約80行のコードで実現できます。

重要なポイント

  • Express 5で約80行のコードで機能的なREST APIを構築
  • 外部依存なしで組み込みミドルウェアを使用したJSONパース
  • 適切なHTTPステータスコードによる一貫したレスポンスパターンの実装
  • 予期しないサーバー障害を減らすための集中的なエラーハンドリングの追加

前提条件

開始する前に、以下を確認してください:

  • Node.js 24 LTS以降がインストールされていること(公式Node.jsサイトからダウンロード可能)
  • コードエディタ
  • 基本的なJavaScriptの知識

プロジェクトのセットアップ

新しいディレクトリを作成し、プロジェクトを初期化します:

mkdir minimal-api
cd minimal-api
npm init -y

Express 5をインストールします:

npm install express

package.jsonを開き、"type": "module"を追加してESMインポートを有効にします。ファイルには以下を含める必要があります:

{
  "type": "module",
  "scripts": {
    "start": "node server.js"
  }
}

Express 5 APIの構築

以下のコードでserver.jsを作成します:

import express from 'express'

const app = express()
const PORT = process.env.PORT || 3000

// Built-in JSON parsing middleware
app.use(express.json())

// In-memory data store
let items = [
  { id: 1, name: 'First item' },
  { id: 2, name: 'Second item' }
]

let nextId = 3

// GET all items
app.get('/api/items', (req, res) => {
  res.json({ data: items })
})

// GET single item
app.get('/api/items/:id', (req, res) => {
  const item = items.find(i => i.id === parseInt(req.params.id))
  if (!item) {
    return res.status(404).json({ error: 'Item not found' })
  }
  res.json({ data: item })
})

// POST new item
app.post('/api/items', (req, res) => {
  const { name } = req.body
  if (!name) {
    return res.status(400).json({ error: 'Name is required' })
  }
  const newItem = { id: nextId++, name }
  items.push(newItem)
  res.status(201).json({ data: newItem })
})

// DELETE item
app.delete('/api/items/:id', (req, res) => {
  const index = items.findIndex(i => i.id === parseInt(req.params.id))
  if (index === -1) {
    return res.status(404).json({ error: 'Item not found' })
  }
  items.splice(index, 1)
  res.status(204).send()
})

// 404 handler for undefined routes
app.use((req, res) => {
  res.status(404).json({ error: 'Route not found' })
})

// Error handling middleware
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).json({ error: 'Internal server error' })
})

app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`)
})

サーバーを起動します:

npm start

JavaScript Backend API構造の理解

この最小限のREST API Node構成は、以下の必須要素をカバーしています:

JSONパース: Express 5にはexpress.json()が組み込みミドルウェアとして含まれています。外部パッケージは不要です(Express APIドキュメントを参照)。

一貫したレスポンス: すべてのエンドポイントはdataまたはerrorプロパティを持つJSONを返します。この予測可能性により、フロントエンドコードがレスポンスを統一的に処理できます。

HTTPステータスコード: APIは適切なコードを使用します—成功時は200、リソース作成時は201、削除成功時は204、不正なリクエストには400、リソースが見つからない場合は404、サーバーエラーには500

エラーハンドリング: 包括的なエラーミドルウェアにより、未処理のルートエラーがサーバーをクラッシュさせることを防ぎます。

エンドポイントのテスト

curlまたは任意のHTTPクライアントを使用します:

# Get all items
curl http://localhost:3000/api/items

# Get single item
curl http://localhost:3000/api/items/1

# Create item
curl -X POST http://localhost:3000/api/items \
  -H "Content-Type: application/json" \
  -d '{"name": "New item"}'

# Delete item
curl -X DELETE http://localhost:3000/api/items/1

このガイドに含まれていないもの

このガイドでは、データベース、認証、複雑なバリデーションを意図的にスキップしています。これらは本番システムでは重要ですが、基礎を学ぶ際やクイックプロトタイプを立ち上げる際にはノイズになります。

拡張する準備ができたら、以下の追加を検討してください:

  • Zodのようなライブラリを使用した入力バリデーション
  • 設定用の環境変数
  • 永続化のためのデータベース接続

まとめ

これで、Express 5を使用したNode.jsの動作する最小限のREST APIができました。ここで示したパターン—一貫したJSONレスポンス、適切なステータスコード、集中的なエラーハンドリング—は、APIが成長するにつれてうまくスケールします。この基盤から始めて、プロジェクトが必要とする場合にのみ複雑さを追加してください。

よくある質問

Express 5には、ルートハンドラー用のネイティブPromiseサポートが含まれており、返されたまたはスローされた拒否されたPromiseが自動的にエラーミドルウェアをトリガーします。また、非推奨のメソッドを削除し、パスマッチングを改善しています。コアAPIは類似しているため、ほとんどのプロジェクトでExpress 4からの移行は簡単です。

メモリ内ストアは、データベース設定ではなくAPI構造に焦点を当てた例を保ちます。プロトタイプや学習には適しています。本番環境では、サーバー再起動後もデータを永続化するために、配列をPostgreSQLやMongoDBなどのデータベースに置き換えてください。

npm install corsでcorsパッケージをインストールし、インポートしてルートの前にapp.use(cors())を追加します。どのオリジンがAPIにアクセスできるかを制限するためのオプションを渡すことができます。これは、フロントエンドがバックエンドとは異なるドメインまたはポートで実行される場合に必要です。

この構造は堅実な基盤を提供しますが、本番使用には追加が必要です。入力バリデーション、認証、レート制限、ロギング、適切なデータベースを追加してください。ここで示した一貫したレスポンス形式とエラーハンドリングパターンは、これらの機能を追加する際にうまくスケールします。

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay