صمِّم واجهة برمجية REST نظيفة باستخدام طرق HTTP الصحيحة، ورموز الحالة الصحيحة، والتحقق من صحة أجسام الطلبات.
افتح هذا الدرس في Kodokonتكشف واجهة REST البرمجية عن موارد (مستخدمون، مهام، طلبات) تُعالَج باستخدام طرق HTTP: GET للقراءة، وPOST للإنشاء، وPUT أو PATCH للتحديث، وDELETE للحذف. أما العُرف المهني فهو: أسماء بصيغة الجمع، ولا أفعال أبدًا في الروابط. تكتب POST /tasks، لا /createTask. لنبنِ واجهة برمجية صغيرة للمهام، في الذاكرة في الوقت الحالي.
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. ما ردّة الفعل الصحيحة للواجهة البرمجية؟