ออกแบบ REST API ที่สะอาดด้วยเมท็อด HTTP ที่ถูกต้อง รหัสสถานะที่เหมาะสม และการตรวจสอบความถูกต้องของเนื้อความคำขอ
เปิดบทเรียนนี้ใน KodokonREST API เปิดให้เข้าถึง ทรัพยากร (resources) (ผู้ใช้ งาน คำสั่งซื้อ) ที่จัดการด้วยเมท็อด HTTP ได้แก่ GET เพื่ออ่าน POST เพื่อสร้าง PUT หรือ PATCH เพื่ออัปเดต และ DELETE เพื่อลบ ธรรมเนียมของมืออาชีพคือ ใช้คำนามพหูพจน์ ไม่ใช้คำกริยาใน URL เด็ดขาด คุณเขียน POST /tasks ไม่ใช่ /createTask มาสร้าง API งานเล็ก ๆ กัน โดยตอนนี้เก็บข้อมูลไว้ในหน่วยความจำก่อน
import express from "express";
const app = express();
app.use(express.json());
const tasks = [
{ id: 1, title: "Review the module", done: false }
];
app.get("/tasks", (req, res) => {
res.json(tasks);
});
app.listen(3000);บรรทัด app.use(express.json()) เป็นสิ่งจำเป็น หากไม่มีมัน req.body จะเป็น undefined สำหรับทุกคำขอแบบ JSON เมื่อมีการสร้าง จงตรวจสอบข้อมูลนำเข้าเสมอ ตอบกลับด้วย 201 และคืนทรัพยากรที่สร้างขึ้น สิ่งนี้ทำให้ไคลเอนต์ได้รับ id ที่เซิร์ฟเวอร์สร้างขึ้น
app.post("/tasks", (req, res) => {
const { title } = req.body;
if (!title) {
return res.status(400).json({
error: "The title field is required"
});
}
const task = {
id: tasks.length + 1,
title,
done: false
};
tasks.push(task);
res.status(201).json(task);
});จงจำรหัสที่คุณจะใช้ทุกวันไว้ 200 อ่านหรืออัปเดตสำเร็จ 201 สร้างทรัพยากรแล้ว 204 สำเร็จโดยไม่มีเนื้อหา (การลบ) 400 คำขอไม่ถูกต้อง 404 ไม่พบทรัพยากร 500 ข้อผิดพลาดของเซิร์ฟเวอร์ กฎคือ ถ้าเป็น 4xx ไคลเอนต์ทำผิด ถ้าเป็น 5xx โค้ดของคุณเองที่ล้มเหลว
app.delete("/tasks/:id", (req, res) => {
const id = Number(req.params.id);
const index = tasks.findIndex((t) => t.id === id);
if (index === -1) {
return res.status(404).json({
error: "Task not found"
});
}
tasks.splice(index, 1);
res.status(204).end();
});req.body จะยังคงเป็น undefined สำหรับคำขอแบบ JSON?app.use(express.json())app.use(express.static(...))app.listen(3000)title ที่จำเป็น API ควรตอบสนองอย่างไรจึงจะถูกต้อง?