مقدمة عن aiohttp
aiohttp هي مكتبة غير متزامنة قوية للتعامل مع عميل وخادم HTTP بلغة بايثون. تم بناؤها على أساس asyncio وتوفر واجهة مرنة لإنشاء تطبيقات ويب قابلة للتوسع وتنفيذ طلبات HTTP متوازية. تدعم المكتبة HTTP/1.1 وWebSocket والكوكيز والجلسات والتكامل مع محركات القوالب الشهيرة.
ما هي aiohttp
aiohttp (إدخال/إخراج HTTP غير متزامن) هي مكتبة بايثون شاملة تجمع بين وظائف عميل HTTP وخادم HTTP باستخدام البرمجة غير المتزامنة. صُممت للعمل مع asyncio، مما يسمح بإنشاء تطبيقات ويب عالية الأداء قادرة على معالجة آلاف الاتصالات المتزامنة.
الميزات الرئيسية للمكتبة
توفر مكتبة aiohttp مجموعة واسعة من الإمكانيات لتطوير تطبيقات الويب الحديثة. تدعم إنشاء عملاء HTTP بسيطين للتفاعل مع واجهات API الخارجية، بالإضافة إلى خوادم ويب كاملة مع دعم الوسائط الوسيطة (middleware) والتوجيه والقوالب.
مزايا وميزات aiohttp
الهندسة غير المتزامنة
الميزة الرئيسية لـ aiohttp هي طبيعته غير المتزامنة. بفضل استخدام asyncio، يمكن للمكتبة معالجة العديد من الاتصالات المتزامنة دون حظر تدفق التنفيذ. مما يجعلها الخيار الأمثل للتطبيقات ذات الأحمال العالية.
تعدد الاستخدامات
يدعم aiohttp وظائف العميل والخادم في حزمة واحدة. وهذا يعني أن المطورين يمكنهم استخدام مكتبة واحدة لإنشاء تطبيقات ويب كاملة تعمل في نفس الوقت كعميل وخادم HTTP.
دعم مدمج للتقنيات الحديثة
تدعم المكتبة WebSocket بشكل أصلي، مما يسمح بإنشاء تطبيقات تفاعلية في الوقت الفعلي. كما تتضمن دعمًا لتنسيقات بيانات مختلفة، بما في ذلك JSON والنماذج والملفات.
قابلية التوسع والمرونة
توفر aiohttp نظامًا للوسائط الوسيطة (middleware) لإضافة وظائف إضافية، ونظام توجيه لتنظيم معالجات URL، وإمكانية التكامل مع محركات القوالب الشهيرة.
التثبيت والإعداد الأساسي
تثبيت المكتبة الأساسية
pip install aiohttp
تثبيت التبعيات الإضافية
للعمل مع قوالب Jinja2:
pip install aiohttp_jinja2 jinja2
للعمل مع الجلسات:
pip install aiohttp_session
التحقق من التثبيت
بعد التثبيت، يمكن التحقق من إصدار المكتبة:
import aiohttp
print(aiohttp.__version__)
عميل HTTP غير متزامن مع aiohttp
أساسيات العمل مع ClientSession
ClientSession هي الفئة الرئيسية لتنفيذ طلبات HTTP في aiohttp. تدير مجموعة الاتصالات وتضمن إعادة استخدام الاتصالات بكفاءة.
import aiohttp
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
# تشغيل الدالة غير المتزامنة
asyncio.run(fetch('https://example.com'))
تكوين جلسة العميل
async def create_configured_session():
timeout = aiohttp.ClientTimeout(total=30)
connector = aiohttp.TCPConnector(limit=100, limit_per_host=10)
async with aiohttp.ClientSession(
timeout=timeout,
connector=connector,
headers={'User-Agent': 'MyApp/1.0'}
) as session:
return session
إرسال طلبات GET و POST
تنفيذ طلبات GET
async