Skip to content

RESTful API 簡介

RESTful API 是一種基於 HTTP 協議的 Web 服務接口設計。它遵循 REST(Representational State Transfer)原則,提供了一組指南以確保 API 的一致性和可維護性。

設計準則

  1. 統一資源定位:使用 URI 來唯一標識資源。
  2. 無狀態操作:每個請求應包含所有必要信息。
  3. 可緩存的響應:標明哪些響應是可以被緩存的。
  4. 統一接口:標準化操作如使用 HTTP 方法。
  5. 分層系統:客戶端無需知道後端服務的具體實現。

URI 設計與資源表達

良好的 URI 設計應該清晰且直觀,易於理解和使用。

範例

  • 獲取用戶列表:GET /users
  • 獲取特定用戶:GET /users/{id}
  • 新增用戶:POST /users
  • 更新用戶:PUT /users/{id}
  • 刪除用戶:DELETE /users/{id}

HTTP 方法和狀態碼使用

HTTP 方法和狀態碼是 RESTful API 溝通的基礎。

方法

  • GET: 獲取資源。
  • POST: 創建新資源。
  • PUT: 更新現有資源。
  • DELETE: 刪除資源。

狀態碼

  • 200 OK: 請求成功。
  • 201 Created: 資源創建成功。
  • 400 Bad Request: 請求格式錯誤。
  • 404 Not Found: 資源不存在。
  • 500 Internal Server Error: 服務器錯誤。

HTTP 通訊封包 row data 格式

當您使用瀏覽器的開發者工具 (F12) 查看 HTTP 通訊時,會見到以下格式的原始數據:

Request 封包格式

  • GET 請求示例:
GET /users HTTP/1.1
Host: example.com
Connection: keep-alive
Accept: application/json
  • POST 請求示例:
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27

{
"name": "newUser"
}

Response 封包格式

  • 200 OK 響應示例:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 49

[
{
    "id": 1,
    "name": "Alice"
}
]
  • 201 Created 響應示例:
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 36

{
"id": 2,
"name": "newUser"
}

這些原始格式的數據展示了 HTTP 請求和響應的頭部信息以及主體內容。在開發和調試過程中,這些信息非常重要,尤其是在處理錯誤或不預期的響應時。

建立簡單 RESTful API 實作

要建立一個簡單的 RESTful API 使用 Node.js 與 Express,首先需要設置你的 Node.js 環境。以下是從建立新專案到執行你的第一個 Express 伺服器的步驟。

建立新的 Express 專案

  • 初始化 Node.js 專案:

在命令列中,選擇一個文件夾來存放你的專案,然後執行以下命令以創建一個新的 Node.js 專案。

npm init -y

這將創建一個 package.json 文件。

  • 安裝 Express:

繼續在命令列中執行以下命令以安裝 Express。

npm install express
  • 創建你的 Express 伺服器:

在專案的根目錄下創建一個名為 index.js 的文件(或其他你喜歡的名字),並添加以下代碼:

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

let users = [{ id: 1, name: 'Alice' }];

app.get('/users', (req, res) => {
    res.status(200).json(users);
});

app.post('/users', (req, res) => {
    users.push(req.body);
    res.status(201).send();
});

app.listen(3000, () => console.log('Server running on port 3000'));
  • 運行伺服器:

在命令列中執行以下命令以啟動你的 Express 伺服器:

node index.js

這將在端口 3000 上啟動伺服器。你現在可以通過瀏覽器或 API 測試工具(如 Postman)訪問 http://localhost:3000/users

Angular HttpClient 使用

Angular 的 HttpClient 模組提供了一種簡單的方法來進行 HTTP 請求。

範例

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  constructor(private http: HttpClient) {}

  getUsers() {
    return this.http.get('/api/users');
  }
}

RxJS 與 RESTful API 整合

使用 RxJS 可以更好地處理異步請求和響應。

範例

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  constructor(private http: HttpClient) {}

  getUsers(): Observable<any> {
    return this.http.get('/api/users');
  }
}

Angular 中狀態管理與錯誤處理

使用 Angular Service 和 RxJS,可以有效地進行狀態管理和錯誤處理。

範例:錯誤處理

this.userService.getUsers().pipe(
  catchError(this.handleError)
).subscribe(data => {
  // 處理數據
}, err => {
  // 處

理錯誤
});

開發完整 Angular 應用案例

開發一個完整的 Angular 應用涉及到多個部分的協同工作,包括前端界面、與後端的通信、狀態管理等。

步驟

  1. 設計界面:使用 Angular 的組件和模板。
  2. 服務與依賴注入:創建用於與後端通信的服務。
  3. 路由與導航:設計應用的導航結構。
  4. 狀態管理:使用服務和 RxJS 來管理應用狀態。
  5. 錯誤處理:處理來自後端的錯誤響應。