Node.js - RESTful API
こんにちは、将来のプログラマーたち!今日は、Node.jsとRESTful APIの世界に興味深い旅に出発しましょう。これらの用語が今は未知の言語のように聞こえるかもしれませんが、このチュートリアルの終わりまでには「REST」を流暢に話すことができるようになるでしょう! ?
RESTアーキテクチャとは?
REST、または表現状遷移(Representational State Transfer)は、コンピュータがインターネット上でどのように通信するべきかを規定する一連のルールです。レストランにいると考えてみてください。あなた(クライアント)がウェイター(API)にメニュー(データ)を求めると、ウェイターは自分で料理を作ることはなく、キッチン(サーバー)に行って必要なものを取りにいきます。この往復はRESTの動作に似ています!
RESTの主要原則:
- クライアント・サーバー: ユーザーインターフェースとデータストレージの関係を分離します。
- ステートレス: クライアントからサーバーへの各リクエストは、リクエストを理解するために必要なすべての情報を含まなければなりません。
- キャッシュ可能: レスポンスは、キャッシュ可能であるかどうかを定義しなければなりません。
- 統一インターフェース: サーバーとの標準的なやり取り方法です。
- 層構造システム: クライアントは、直接サーバーに接続しているか、中継器に接続しているかを区別できません。
HTTPメソッド
さあ、HTTPメソッドについて話しましょう。これらは、サーバーにどのようなアクションを実行するかを伝える動詞のようなものです。以下に主要なものを示します:
メソッド | 説明 | 使用例 |
---|---|---|
GET | データを取得 | ユーザーのプロフィールを取得 |
POST | 新しいデータを作成 | 新しいブログ投稿を追加 |
PUT | 既存のデータを更新 | ユーザーの詳細を編集 |
DELETE | データを削除 | ツイートを削除 |
PATCH | データを部分的に修正 | ユーザーのメールアドレスのみを更新 |
これらを簡単なNode.jsコード例で動作を見てみましょう!
GETリクエストの例:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
この例では、シンプルなサーバーを作成し、'/api/users'へのGETリクエストにJSONリストのユーザーを返します。このコードを実行して、ブラウザで'http://localhost:3000/api/users'にアクセスすると、ユーザーのリストが表示されます!
POSTリクエストの例:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('New user added:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'User created successfully' }));
});
}
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
この例では、POSTリクエストを処理し、新しいユーザーを追加します。データをリスeningし、処理し、ユーザーが作成されたことを確認するレスポンスを送信します。
RESTful Web Services
基本的なことを理解したので、Expressという人気のNode.jsフレームワークを使用して完全なRESTful APIを作成しましょう!
まず、Expressをインストールします:
npm init -y
npm install express
次に、図書館用のシンプルなRESTful APIを作成します:
const express = require('express');
const app = express();
app.use(express.json());
let books = [
{ id: 1, title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' }
];
// 全ての本を取得
app.get('/api/books', (req, res) => {
res.json(books);
});
// 特定の本を取得
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
res.json(book);
});
// 新しい本を追加
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});
// 本を更新
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});
// 本を削除
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});
app.listen(3000, () => console.log('Server running on port 3000'));
この例では、図書館用の完全なRESTful APIを作成しています。以下に分解します:
-
app.get()
を使用してGETリクエストを処理し、すべての本または特定の本を取得します。 -
app.post()
は新しい本の作成を処理します。 -
app.put()
は既存の本を更新します。 -
app.delete()
は本を削除します。
各ルートはRESTful原則に従い、適切なHTTPメソッドとステータスコードを使用しています。
APIのテスト
APIをテストするには、Postmanやcurlなどのツールを使用できます。以下にcurlを使用した例を示します:
# 全ての本を取得
curl http://localhost:3000/api/books
# 新しい本を追加
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"George Orwell"}' http://localhost:3000/api/books
# 本を更新
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Updated Title","author":"Updated Author"}' http://localhost:3000/api/books/1
# 本を削除
curl -X DELETE http://localhost:3000/api/books/1
それで、Node.jsとExpressを使用して初めてのRESTful APIを作成しました!実践を積むことで完璧になります。図書館APIに更多信息を追加してみてください、例えば本を検索する機能や並べ替える機能など。
APIを作成することは、異なるソフトウェアアプリケーション間の橋を架けることです。作成する cada APIは、プログラムがどのように相互作用し、データを共有するか新しい可能性を開きます。探索を続け、コードを書き続け、最も重要なのは、Node.jsのエキスパートになる旅を楽しむことです!
Credits: Image by storyset