RESTful APIは、Webアプリケーションがデータのやり取りを効率的に行うための標準的な設計パターンです。本記事では、RESTful APIの基本概念と、Python(Flask)とNode.js(Express)を使った簡単なAPIの構築方法を解説します。
RESTful APIとは?
RESTの概要
REST(Representational State Transfer)は、Webサービスの設計原則の一つで、リソースに対する標準的な操作をHTTPプロトコルで実現します。
主な特徴
- リソース指向: URLはリソースを表現します。
- ステートレス: 各リクエストが独立しており、状態を保持しません。
- HTTPメソッドの活用:
HTTPメソッド | 目的 | 例 |
---|---|---|
GET | データの取得 | /users (全ユーザー取得) |
POST | データの作成 | /users (新規ユーザー作成) |
PUT | データの更新 | /users/1 (ID 1のユーザー更新) |
DELETE | データの削除 | /users/1 (ID 1のユーザー削除) |
Python(Flask)でのRESTful API構築
必要な環境
- Pythonのインストール
- Flaskライブラリのインストール
Flaskのインストール
pip install flask
サンプルコード
以下は、ユーザー情報を管理するシンプルなRESTful APIの例です。
from flask import Flask, jsonify, request
app = Flask(__name__)
# ダミーデータ
users = [
{"id": 1, "name": "山田太郎", "email": "yamada@example.com"},
{"id": 2, "name": "鈴木花子", "email": "suzuki@example.com"}
]
# ユーザー一覧を取得
@app.route('/users', methods=['GET'])
def get_users():
return jsonify(users)
# 新しいユーザーを追加
@app.route('/users', methods=['POST'])
def create_user():
new_user = request.json
users.append(new_user)
return jsonify(new_user), 201
# 特定のユーザーを取得
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = next((u for u in users if u['id'] == user_id), None)
return jsonify(user) if user else ("User not found", 404)
# ユーザー情報を更新
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
user = next((u for u in users if u['id'] == user_id), None)
if user:
updates = request.json
user.update(updates)
return jsonify(user)
return "User not found", 404
# ユーザーを削除
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
global users
users = [u for u in users if u['id'] != user_id]
return "", 204
if __name__ == '__main__':
app.run(debug=True)
実行方法
- ファイルを
app.py
として保存。 - ターミナルで以下を実行:
python app.py
- ブラウザまたはAPIクライアント(例: Postman)で
http://127.0.0.1:5000/users
にアクセス。
Node.js(Express)でのRESTful API構築
必要な環境
- Node.jsのインストール
- Expressのインストール
Expressのインストール
npm install express
サンプルコード
以下は、ユーザー情報を管理するシンプルなRESTful APIの例です。
const express = require('express');
const app = express();
app.use(express.json());
// ダミーデータ
let users = [
{ id: 1, name: '山田太郎', email: 'yamada@example.com' },
{ id: 2, name: '鈴木花子', email: 'suzuki@example.com' }
];
// ユーザー一覧を取得
app.get('/users', (req, res) => {
res.json(users);
});
// 新しいユーザーを追加
app.post('/users', (req, res) => {
const newUser = req.body;
users.push(newUser);
res.status(201).json(newUser);
});
// 特定のユーザーを取得
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
user ? res.json(user) : res.status(404).send('User not found');
});
// ユーザー情報を更新
app.put('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (user) {
Object.assign(user, req.body);
res.json(user);
} else {
res.status(404).send('User not found');
}
});
// ユーザーを削除
app.delete('/users/:id', (req, res) => {
users = users.filter(u => u.id !== parseInt(req.params.id));
res.status(204).send();
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
実行方法
- ファイルを
app.js
として保存。 - ターミナルで以下を実行:
node app.js
- ブラウザまたはAPIクライアント(例: Postman)で
http://localhost:3000/users
にアクセス。
PythonとNode.jsの比較
特徴 | Python(Flask) | Node.js(Express) |
---|---|---|
シンプルさ | 学習コストが低い | JavaScriptに慣れていれば簡単 |
パフォーマンス | 小規模プロジェクトに最適 | 高負荷・リアルタイム処理に適応 |
主要用途 | API、データ分析 | API、リアルタイム通信 |
学習のポイント
- 公式ドキュメントを活用する:
- 小規模プロジェクトで試す:
- ユーザー管理やタスク管理システムを構築して実践。
- APIクライアントを利用:
- PostmanやcURLを使ってAPIのテストを行う。
まとめ
RESTful APIは、モダンなWebアプリケーションにおける重要な構成要素です。Python(Flask)やNode.js(Express)を使った基本的なAPI構築を理解し、実践的なスキルを磨いていきましょう。
次回は「認証とセキュリティの基礎知識」について解説します。お楽しみに!
コメント