TypeScript中級

中級 TypeScriptで学ぶAPI設計|練習問題編

導入

API設計は、システム開発において重要な要素です。特に、異なるシステム間でのデータ交換や機能の統合を考えると、その設計の質がプロジェクトの成功に直結します。本記事では、TypeScriptを用いたAPI設計の具体的なケーススタディを通じて、実務で役立つ知識を深めていきます。

教科書レベルの解説(API設計)

重要な概念の整理

API設計においては、エンドポイントの設計、リクエストとレスポンスのフォーマット、エラーハンドリングなどが基本的な要素として挙げられます。特に、RESTfulなAPIを設計する際には、リソースの表現やHTTPメソッドの適切な使用が求められます。また、APIのバージョニングや認証の仕組みも設計の初期段階で考慮する必要があります。

コード例(TypeScript)


import express, { Request, Response } from 'express';

const app = express();
app.use(express.json());

interface User {
    id: number;
    name: string;
    email: string;
}

let users: User[] = [];

app.post('/users', (req: Request, res: Response) => {
    const { name, email } = req.body;
    const newUser: User = { id: users.length + 1, name, email };
    users.push(newUser);
    res.status(201).json(newUser);
});

app.get('/users', (req: Request, res: Response) => {
    res.json(users);
});

app.get('/users/:id', (req: Request, res: Response) => {
    const user = users.find(u => u.id === parseInt(req.params.id));
    if (user) {
        res.json(user);
    } else {
        res.status(404).send('User not found');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

コードの行ごとの解説

  1. import express, { Request, Response } from ‘express’; – Expressフレームワークをインポートし、リクエストとレスポンスの型を取得します。
  2. const app = express(); – Expressアプリケーションのインスタンスを作成します。
  3. app.use(express.json()); – JSON形式のリクエストボディをパースするミドルウェアを追加します。
  4. interface User {…} – ユーザーのデータ構造を定義するインターフェースを作成します。
  5. app.post(‘/users’, (req, res) => {…}); – 新しいユーザーを作成するエンドポイントを定義します。
  6. app.get(‘/users’, (req, res) => {…}); – 全ユーザーを取得するエンドポイントを定義します。
  7. app.get(‘/users/:id’, (req, res) => {…}); – 特定のユーザーをIDで取得するエンドポイントを定義します。
  8. app.listen(3000, () => {…}); – サーバーをポート3000で起動します。

練習問題編

以下の練習問題に取り組んでみてください。各問題に対する模範解答も用意しています。

  1. 問題1: ユーザー情報に年齢を追加するために、Userインターフェースを修正してください。
  2. 
    interface User {
        id: number;
        name: string;
        email: string;
        age: number; // 年齢を追加
    }
    
  3. 問題2: ユーザーをIDで削除するAPIエンドポイントを追加してください。
  4. 
    app.delete('/users/:id', (req: Request, res: Response) => {
        users = users.filter(u => u.id !== parseInt(req.params.id));
        res.status(204).send();
    });
    
  5. 問題3: ユーザーの情報を更新するAPIエンドポイントを実装してください。
  6. 
    app.put('/users/:id', (req: Request, res: Response) => {
        const user = users.find(u => u.id === parseInt(req.params.id));
        if (user) {
            const { name, email, age } = req.body;
            user.name = name;
            user.email = email;
            user.age = age;
            res.json(user);
        } else {
            res.status(404).send('User not found');
        }
    });
    

まとめ

  • API設計では、リソースの管理とエンドポイントの適切な設計が不可欠です。
  • TypeScriptを使用することで、型安全なAPI設計が可能となり、バグの発生を減らすことができます。
  • 練習問題を通じて、実際の業務に役立つAPI設計のスキルをさらに磨いていきましょう。