Express REST API
สร้าง API ให้ Frontend มาคุยกับ Backend ได้
API คืออะไร? ทบทวน
API (Application Programming Interface) คือ ประตู ที่ให้ Frontend คุยกับ Backend Frontend ส่ง request → Backend ตอบด้วย response (มักเป็นข้อมูล JSON)
REST API คืออะไร?
REST เป็นรูปแบบการออกแบบ API ที่ใช้ HTTP method บอกว่าจะทำอะไร:
| Method | ความหมาย | ตัวอย่าง |
|---|---|---|
| GET | อ่าน/ดึงข้อมูล | ดูรายการสินค้า |
| POST | สร้างใหม่ | เพิ่มสินค้าใหม่ |
| PUT / PATCH | แก้ไข | แก้ราคาสินค้า |
| DELETE | ลบ | ลบสินค้า |
URL มักเป็น คำนาม และใช้ method บอกการกระทำ:
GET /products— ดูสินค้าทั้งหมดPOST /products— เพิ่มสินค้าDELETE /products/5— ลบสินค้า id 5
JSON — ภาษาของข้อมูล
API มักส่งข้อมูลเป็น JSON (ดูเหมือน JS object):
{
"id": 1,
"name": "กาแฟ",
"price": 80
}
จริง ๆ คือข้อความ (text) ที่มีรูปแบบนี้ ทุกภาษาอ่านได้
สร้าง REST API ด้วย Express
mkdir shop-api
cd shop-api
npm init -y
npm install express
สร้าง index.js:
const express = require("express");
const app = express();
// สำคัญ! บอก Express ให้อ่าน JSON จาก body ของ request
app.use(express.json());
// เก็บข้อมูลในหน่วยความจำ (ชั่วคราว — บทหน้าจะใช้ database)
let products = [
{ id: 1, name: "กาแฟ", price: 80 },
{ id: 2, name: "ชา", price: 60 }
];
// GET /products — ดูทั้งหมด
app.get("/products", (req, res) => {
res.json(products);
});
app.listen(3000, () => {
console.log("API รันที่ http://localhost:3000");
});
รัน node index.js แล้วเปิด http://localhost:3000/products — เห็น JSON! 🎉
เพิ่ม: ดูรายการเดียว (GET /products/:id)
app.get("/products/:id", (req, res) => {
const id = Number(req.params.id);
const product = products.find(p => p.id === id);
if (!product) {
return res.status(404).json({ error: "ไม่พบสินค้า" });
}
res.json(product);
});
:id= parameter ใน URL (เช่น/products/1)req.params.id= ค่าที่ส่งมาres.status(404)= ส่ง HTTP status 404 (ไม่พบ)
เพิ่ม: สร้างใหม่ (POST)
app.post("/products", (req, res) => {
const newProduct = {
id: products.length + 1,
name: req.body.name,
price: req.body.price
};
products.push(newProduct);
res.status(201).json(newProduct);
});
ทดสอบด้วย Thunder Client (extension VS Code) หรือ Postman:
- Method: POST
- URL: http://localhost:3000/products
- Body (JSON):
{ "name": "โก๊ะ", "price": 50 }
เพิ่ม: แก้ไข (PUT) และ ลบ (DELETE)
// PUT /products/:id — แก้ทั้งหมด
app.put("/products/:id", (req, res) => {
const id = Number(req.params.id);
const index = products.findIndex(p => p.id === id);
if (index === -1) {
return res.status(404).json({ error: "ไม่พบสินค้า" });
}
products[index] = { id, ...req.body };
res.json(products[index]);
});
// DELETE /products/:id — ลบ
app.delete("/products/:id", (req, res) => {
const id = Number(req.params.id);
products = products.filter(p => p.id !== id);
res.status(204).send();
});
นี่คือ CRUD ครบ: Create, Read, Update, Delete
HTTP Status Code ที่ใช้บ่อย
| Code | ความหมาย |
|---|---|
200 | OK (สำเร็จ) |
201 | Created (สร้างใหม่สำเร็จ) |
204 | No Content (ลบสำเร็จ ไม่มีของส่งกลับ) |
400 | Bad Request (ข้อมูลส่งมาผิด) |
404 | Not Found (ไม่พบ) |
500 | Server Error (เซิร์ฟเวอร์พัง) |
CORS — เมื่อ Frontend คนละที่อยู่กับ Backend
ถ้า Frontend (เช่น บน localhost:5173) เรียก Backend (localhost:3000)
เบราว์เซอร์จะ บล็อก เพื่อความปลอดภัย แก้ด้วย:
npm install cors
const cors = require("cors");
app.use(cors());
ทดสอบ API ยังไง?
- เบราว์เซอร์: ใช้ได้แค่ GET
- Thunder Client (extension VS Code) — แนะนำ ใช้ง่าย
- Postman — ทรงพลัง ใช้กันทั่วไป
- curl (terminal)
สรุป
| แนวคิด | สรุป |
|---|---|
| REST API | ออกแบบ API ด้วย HTTP method |
| GET/POST/PUT/DELETE | อ่าน/สร้าง/แก้/ลบ |
| JSON | รูปแบบข้อมูลที่ API ใช้ |
req.params | ค่าจาก URL (:id) |
req.body | ข้อมูลที่ส่งมา (ต้อง express.json()) |
| CRUD | Create Read Update Delete |
บทหน้า: เก็บข้อมูลถาวรด้วย Database & SQL 🗄️
อ่านจบแล้ว? ทำเครื่องหมายว่าเสร็จเพื่อบันทึกความคืบหน้า
แบบทดสอบ
ตอบให้ครบแล้วกด “ตรวจคำตอบ” เพื่อเช็คความเข้าใจ
1. API คืออะไร?
2. HTTP method ใดใช้ ‘ขอดูข้อมูล’ โดยไม่เปลี่ยนแปลง?
3. Express middleware คืออะไร?
กำลังโหลด…