このチュートリアルでは、Node.js、Express.js、およびMongoDBを使用してRESTful APIを構築する方法を説明します。環境設定、APIエンドポイントの定義、データ永続化の処理について説明します。最終的には、拡張可能な機能的なAPIが完成します。
目次
- REST APIとMongoDBの概要
- 開発環境の設定
- プロジェクトの設定と依存関係
- MongoDBへの接続
- APIエンドポイントの定義(CRUD操作)
- APIのテスト
- 堅牢なエラー処理の実装
- 結論と次のステップ
REST APIとMongoDBの概要
REST(Representational State Transfer)は、スケーラブルで保守可能なWebサービスを構築するためのアーキテクチャスタイルです。REST APIは、URLで識別されるリソースと対話するために、標準的なHTTPメソッド(GET、POST、PUT、DELETE)を使用します。MongoDBは、データの保存と取得の柔軟性を提供するNoSQLのドキュメント指向データベースです。この組み合わせは、多くのアプリケーションにとって強力な基盤となります。
開発環境の設定
始める前に、Node.jsとnpm(Node Package Manager)がインストールされていることを確認してください。nodejs.orgからダウンロードできます。また、MongoDBがインストールされ、実行されていることを確認してください。mongodb.comからダウンロードできます。
プロジェクトの設定と依存関係
新しいプロジェクトディレクトリを作成し、ターミナルでそのディレクトリに移動します。新しいNode.jsプロジェクトを初期化します。
npm init -y
必要な依存関係をインストールします。
npm install express mongoose body-parser
express
:最小限で柔軟なNode.js Webアプリケーションフレームワーク。mongoose
:MongoDBとNode.js用のオブジェクトデータモデリング(ODM)ライブラリ。body-parser
:JSONリクエストボディを解析するためのミドルウェア。
MongoDBへの接続
server.js
という名前のファイルを作成し、次のコードを追加します。
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// MongoDB接続文字列 - 接続詳細に置き換えてください
const mongoURI = 'mongodb://localhost:27017/mydatabase';
mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Error connecting to MongoDB:', err));
app.use(bodyParser.json());
app.listen(port, () => console.log(`Server listening on port ${port}`));
APIエンドポイントの定義(CRUD操作)
アイテムを管理するためのシンプルなモデルとエンドポイントを作成しましょう。このコードをserver.js
ファイルに追加します。
const ItemSchema = new mongoose.Schema({
name: String,
description: String
});
const Item = mongoose.model('Item', ItemSchema);
// POST /items - 新しいアイテムを作成
app.post('/items', async (req, res) => {
try {
const newItem = new Item(req.body);
const savedItem = await newItem.save();
res.status(201).json(savedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items - すべてのアイテムを取得
app.get('/items', async (req, res) => {
try {
const items = await Item.find({});
res.json(items);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items/:id - IDで単一のアイテムを取得
app.get('/items/:id', async (req, res) => {
try {
const item = await Item.findById(req.params.id);
if (!item) return res.status(404).json({ message: 'Item not found' });
res.json(item);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// PUT /items/:id - アイテムを更新
app.put('/items/:id', async (req, res) => {
try {
const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!updatedItem) return res.status(404).json({ message: 'Item not found' });
res.json(updatedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// DELETE /items/:id - アイテムを削除
app.delete('/items/:id', async (req, res) => {
try {
const deletedItem = await Item.findByIdAndDelete(req.params.id);
if (!deletedItem) return res.status(404).json({ message: 'Item not found' });
res.json({ message: 'Item deleted' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
APIのテスト
Postmanやcurlなどのツールを使用して、APIエンドポイントをテストします。新しいアイテムを作成するには/items
にPOSTリクエストを送信し、すべてのアイテムを取得するには/items
にGETリクエストを送信します。個々のアイテムに対しては、そのIDを使用してGET、PUT、DELETEリクエストを使用します。
堅牢なエラー処理の実装
この例コードには基本的なエラー処理が含まれています。本番環境では、より包括的なエラー処理、ログ記録、入力検証を実装してください。
結論と次のステップ
MongoDBを使用して基本的なREST APIを正常に構築しました!認証、認可、データ検証、より高度なエラー処理を追加することで、これを拡張できます。本番環境対応のデータベース接続を使用し、Express.jsとMongooseのより高度な機能を検討してください。