JavaScript中級

中級 JavaScriptで学ぶマイクロサービス|練習問題編

導入

マイクロサービスアーキテクチャは、現代のソフトウェア開発において非常に重要な概念です。特に、複雑なシステムを小さな独立したサービスに分割することにより、開発や運用の効率を高めることができます。本記事では、JavaScriptを用いたマイクロサービスの実装に焦点を当て、特定のシチュエーションを通じて実務に役立つ知識を提供します。

教科書レベルの解説(マイクロサービス)

重要な概念の整理

マイクロサービスは、各サービスが独立してデプロイ可能であり、異なるプログラミング言語や技術スタックを使用しても問題ありません。これにより、開発チームは最適なツールを選択し、迅速に機能を追加できます。しかし、マイクロサービスには特有の課題も存在します。例えば、サービス間の通信やデータ整合性の確保が挙げられます。

コード例(JavaScript)


// マイクロサービスの例: ユーザー情報を管理するサービス
const express = require('express');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.json());

let users = [];

// ユーザーを追加するエンドポイント
app.post('/users', (req, res) => {
    const user = req.body;
    users.push(user);
    res.status(201).send(user);
});

// ユーザー情報を取得するエンドポイント
app.get('/users/:id', (req, res) => {
    const user = users.find(u => u.id === req.params.id);
    if (!user) {
        return res.status(404).send('User not found');
    }
    res.send(user);
});

// サーバーを起動
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

コードの行ごとの解説

  1. 最初に必要なモジュールをインポートします。Expressはサーバーを簡単に構築できるフレームワークです。
  2. ユーザー情報を保持するための配列を定義します。
  3. POSTリクエストを処理するエンドポイントを作成し、新しいユーザーを配列に追加します。
  4. GETリクエストを処理し、指定されたIDのユーザー情報を返します。ユーザーが見つからない場合は404エラーを返します。
  5. 最後に、指定したポートでサーバーを起動します。

練習問題編

以下に、マイクロサービスに関連する練習問題を用意しました。各問題に対して模範解答と解説を示します。

  1. 問題1: ユーザーを更新するためのPUTエンドポイントを実装してください。

    模範解答:

    
    // ユーザー情報を更新するエンドポイント
    app.put('/users/:id', (req, res) => {
        const userIndex = users.findIndex(u => u.id === req.params.id);
        if (userIndex === -1) {
            return res.status(404).send('User not found');
        }
        users[userIndex] = req.body;
        res.send(users[userIndex]);
    });
    

    解説: PUTメソッドを使用して、特定のユーザー情報を更新するエンドポイントを作成しました。

  2. 問題2: ユーザー情報を削除するDELETEエンドポイントを実装してください。

    模範解答:

    
    // ユーザー情報を削除するエンドポイント
    app.delete('/users/:id', (req, res) => {
        const userIndex = users.findIndex(u => u.id === req.params.id);
        if (userIndex === -1) {
            return res.status(404).send('User not found');
        }
        users.splice(userIndex, 1);
        res.status(204).send();
    });
    

    解説: DELETEメソッドを使用して、特定のユーザーを削除するエンドポイントを実装しました。

  3. 問題3: ユーザー情報を全て取得するGETエンドポイントを実装してください。

    模範解答:

    
    // 全てのユーザー情報を取得するエンドポイント
    app.get('/users', (req, res) => {
        res.send(users);
    });
    

    解説: GETメソッドを使用して、全てのユーザー情報を返すエンドポイントを作成しました。

まとめ

  • マイクロサービスは、独立したサービスとして機能するための設計思想を持つ。
  • エンドポイントの実装において、HTTPメソッドを適切に使用することが重要である。
  • データの整合性やエラーハンドリングに注意を払い、実務に役立つマイクロサービスを構築する。