Kodokon kodokon.com

بناء واجهة برمجية REST

صمِّم واجهة برمجية REST نظيفة باستخدام طرق HTTP الصحيحة، ورموز الحالة الصحيحة، والتحقق من صحة أجسام الطلبات.

9 دقيقة · 3 أسئلة

افتح هذا الدرس في Kodokon

تكشف واجهة REST البرمجية عن موارد (مستخدمون، مهام، طلبات) تُعالَج باستخدام طرق HTTP: GET للقراءة، وPOST للإنشاء، وPUT أو PATCH للتحديث، وDELETE للحذف. أما العُرف المهني فهو: أسماء بصيغة الجمع، ولا أفعال أبدًا في الروابط. تكتب POST /tasks، لا /createTask. لنبنِ واجهة برمجية صغيرة للمهام، في الذاكرة في الوقت الحالي.

JAVASCRIPT
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 الذي أنشأه الخادم.

JAVASCRIPT
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، الكود الخاص بك هو الذي فشل.

JAVASCRIPT
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();
});

اختبار المعرفة

تأكّد من أنك تذكّرت النقاط الأساسية في هذا الدرس.

  1. أيّ رمز حالة تُرجِعه بعد إنشاء مورد بنجاح؟
    • 200
    • 201
    • 204
    • 301
  2. بدون أيّ سطر تبقى req.body قيمتها undefined لطلب JSON؟
    • app.use(express.json())
    • app.use(express.static(...))
    • app.listen(3000)
  3. يرسل عميل طلب POST دون الحقل المطلوب title. ما ردّة الفعل الصحيحة للواجهة البرمجية؟
    • إنشاء المورد بعنوان فارغ
    • إرجاع الحالة 400 مع رسالة خطأ
    • إرجاع الحالة 500
    • تجاهل الطلب دون الرد