Node.js と Express による Web API 開発入門

Web API は、HTTP プロトコルを介してブラウザや各種クライアントからアプリケーション機能へアクセスするためのインターフェースです。Node.js では標準の http モジュールを使用してサーバーを構築できますが、フレームワークを利用することで開発効率や保守性を大幅に向上させることができます。本稿では、広く利用されている Express フレームワークを用いた API 構築の基礎を解説します。

Node.js における標準 http モジュールの基本

Node.js の http モジュールを用いると、低レイヤーからリクエストを制御可能です。以下は最小構成のサーバー例です。

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ message: '接続成功' }));
});

server.listen(3000, () => console.log('サーバー起動: 3000番ポート'));

Express による Web アプリケーションの構築

Express を導入することで、ルーティングやリクエスト処理が簡略化されます。まずはプロジェクトを初期化し、ライブラリをインストールします。

npm init -y
npm install express

次に、ルーティングを設定してアプリケーションを起動します。

const express = require('express');
const app = express();

app.get('/api/info', (req, res) => {
  res.json({ status: 'running', timestamp: Date.now() });
});

app.listen(3000, () => console.log('Express サーバー待機中...'));

ミドルウェアによるリクエスト管理

Express のミドルウェアは、リクエストのライフサイクルに割り込むための強力な機構です。app.use() を使用して認証チェックやログ出力などの処理を共通化できます。

app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 次の処理へ制御を移す
});

ルーティングとパラメータの活用

クライアントからのデータ送受信には、URL パラメータやクエリ文字列を利用します。

// パスパラメータ: /items/123
app.get('/items/:id', (req, res) => {
  res.send(`ID ${req.params.id} を検索中`);
});

// クエリパラメータ: /search?keyword=node
app.get('/search', (req, res) => {
  res.json({ keyword: req.query.keyword });
});

CRUD 操作の実装

メモリ上のデータを操作する基本的な CRUD API を実装します。リクエストボディを解析するために express.json() ミドルウェアを使用します。

app.use(express.json());

let inventory = [];

app.route('/items')
  .get((req, res) => res.json(inventory))
  .post((req, res) => {
    const newItem = { id: inventory.length + 1, ...req.body };
    inventory.push(newItem);
    res.status(201).json(newItem);
  })
  .put((req, res) => {
    const { id, name } = req.body;
    inventory = inventory.map(i => i.id === id ? { ...i, name } : i);
    res.json({ message: '更新完了' });
  });

タグ: Node.js express RESTful-API HTTP Backend

5月14日 23:02 投稿