فهم HTTP ومبادئ REST API
مقدمة: ما هو HTTP ولماذا نحتاجه؟
الدرس 11: فهم HTTP ومبادئ REST API
مرحباً بك في الدرس الحادي عشر من سلسلة تعلم بايثون من الصفر حتى بناء API عملي. بعد أن تعلمنا أساسيات بايثون وكيفية إدارة الحزم، حان الوقت الآن لفهم كيف تتواصل التطبيقات مع بعضها عبر الإنترنت. في هذا الدرس، سنتعرف على بروتوكول HTTP ومبادئ REST API، وهما الأساس الذي ستبني عليه مشروعك العملي.
ما هو HTTP؟
HTTP هو اختصار لـ HyperText Transfer Protocol، وهو البروتوكول الذي تستخدمه المتصفحات والتطبيقات للتواصل مع الخوادم. ببساطة، هو لغة التواصل بين العميل (مثل متصفحك) والخادم (مثل موقع ويب).
عندما تفتح موقعاً في المتصفح، يرسل المتصفح طلباً HTTP إلى الخادم، ثم يرد الخادم برسالة تحتوي على البيانات المطلوبة. هذه العملية تحدث في أجزاء من الثانية.
مكونات طلب HTTP
كل طلب HTTP يتكون من عدة أجزاء رئيسية:
- الطريقة (Method): تحدد نوع العملية التي تريد تنفيذها. أشهر الطرق هي GET (للحصول على بيانات) و POST (لإرسال بيانات جديدة).
- المسار (Path): عنوان المورد الذي تطلبه، مثل
/usersأو/tasks. - الرؤوس (Headers): معلومات إضافية عن الطلب، مثل نوع البيانات المقبولة أو رمز التوثيق.
- الجسم (Body): البيانات التي ترسلها مع الطلب، وتستخدم عادة مع طرق POST أو PUT.
مكونات استجابة HTTP
عندما يرد الخادم، يرسل:
- رمز الحالة (Status Code): رقم يخبرك بنتيجة الطلب. مثلاً 200 يعني نجاح، 404 يعني غير موجود، 500 يعني خطأ في الخادم.
- الرؤوس (Headers): معلومات عن الاستجابة.
- الجسم (Body): البيانات الفعلية التي طلبتها، غالباً بصيغة JSON.
ما هو REST API؟
REST API هو أسلوب لتصميم واجهات برمجة التطبيقات (APIs) باستخدام مبادئ HTTP. REST تعني Representational State Transfer. الهدف هو جعل API بسيطاً وقابلاً للتوسع.
المبادئ الأساسية لـ REST:
- استخدام طرق HTTP بشكل صحيح: GET للقراءة، POST للإنشاء، PUT للتحديث، DELETE للحذف.
- المسارات تعبر عن الموارد: مثل
/tasksللمهام،/usersللمستخدمين. - عديم الحالة (Stateless): كل طلب مستقل ولا يعتمد على طلبات سابقة.
- استخدام JSON: تنسيق البيانات الأكثر شيوعاً في REST APIs.
مثال عملي: محاكاة طلب HTTP باستخدام بايثون
لنكتب كوداً بسيطاً يرسل طلب HTTP حقيقي إلى خادم تجريبي. سنستخدم مكتبة requests التي تعلمنا تثبيتها في الدرس السابق.
# مثال: إرسال طلب GET إلى خادم تجريبي
import requests
# عنوان الخادم التجريبي
url = "https://jsonplaceholder.typicode.com/posts/1"
# إرسال الطلب
response = requests.get(url)
# طباعة رمز الحالة
print(f"رمز الحالة: {response.status_code}")
# طباعة البيانات المستلمة
print("البيانات:")
print(response.json())
عند تشغيل هذا الكود، سترى رمز الحالة 200 (نجاح) وبيانات JSON تحتوي على معلومات عن منشور تجريبي.
شرح الكود خطوة بخطوة
1. نستورد مكتبة requests التي تسمح لنا بإرسال طلبات HTTP بسهولة.
2. نحدد عنوان URL الذي نريد الاتصال به. في هذا المثال، نستخدم خادماً تجريبياً يوفر بيانات وهمية.
3. نستخدم الدالة requests.get() لإرسال طلب GET. هذه الدالة ترجع كائن استجابة.
4. نطبع رمز الحالة باستخدام response.status_code. الرقم 200 يعني أن الطلب نجح.
5. نستخدم response.json() لتحويل البيانات المستلمة من JSON إلى قاموس بايثون، ثم نطبعها.
أخطاء شائعة
- نسيان تثبيت المكتبة: تأكد من تثبيت
requestsباستخدامpip install requests. - عدم التحقق من رمز الحالة: دائماً تحقق من
response.status_codeقبل استخدام البيانات. - محاولة تحويل استجابة فارغة إلى JSON: إذا كان رمز الحالة 204 (لا محتوى)، لا تحاول استخدام
response.json().
/tasks يمثل قائمة المهام، بينما /tasks/1 يمثل مهمة محددة برقم 1. هذا التصميم يجعل API سهل الفهم والاستخدام.
مثال متقدم: إرسال طلب POST
لنرى كيف نرسل بيانات جديدة إلى الخادم باستخدام طلب POST:
# مثال: إرسال طلب POST لإنشاء مورد جديد
import requests
url = "https://jsonplaceholder.typicode.com/posts"
# البيانات التي نريد إرسالها
new_post = {
"title": "درس HTTP",
"body": "هذا محتوى الدرس",
"userId": 1
}
# إرسال الطلب مع البيانات
response = requests.post(url, json=new_post)
# طباعة رمز الحالة والبيانات الجديدة
print(f"رمز الحالة: {response.status_code}")
print("المورد الجديد:")
print(response.json())
في هذا المثال، نستخدم requests.post() ونمرر البيانات باستخدام الوسيط json=. الخادم سينشئ مورداً جديداً ويرد برمز الحالة 201 (تم الإنشاء).
لماذا نحتاج HTTP و REST API؟
تخيل أنك تريد بناء تطبيق لإدارة المهام. المستخدمون يحتاجون إلى:
- عرض قائمة المهام (GET /tasks)
- إضافة مهمة جديدة (POST /tasks)
- تحديث مهمة موجودة (PUT /tasks/1)
- حذف مهمة (DELETE /tasks/1)
بدون HTTP و REST API، سيكون من المستحيل بناء تطبيق ويب أو تطبيق جوال يتواصل مع خادم مركزي. هذا هو الأساس الذي ستبني عليه مشروعك في الدروس القادمة.
تمرين صغير
- إرسال طلب GET إلى
https://jsonplaceholder.typicode.com/users - طباعة رمز الحالة
- طباعة أسماء المستخدمين الثلاثة الأوائل فقط
تلميح: استخدم response.json() لتحويل البيانات إلى قائمة، ثم استخدم التقطيع (slicing) للحصول على العناصر الثلاثة الأولى.
في الدرس القادم، سننتقل إلى التطبيق العملي ونتعلم كيفية تثبيت FastAPI وإنشاء أول endpoint حقيقي. استعد لبناء أول API لك!
جاري تحميل التقييمات...