الفكرة
أثناء العمل على مشاريع API كثيرة، تكرر معي نفس البداية: إعداد FastAPI، ربط Redis، أداة تحدد معدل الطلبات، قفل موزّع لأقسام حرجة، ولوجز JSON. بدل ما أعيد بناء ده في كل مرة، لخّصته في قالب جاهز يبدأ منه أي مشروع.
البناء
المشروع مقسوم لطبقات واضحة: api، core، services، repos، schemas. منطق العمل مش متسربش لطبقة النقل أو التخزين. كل شيء قابل للتهيئة عبر متغيرات البيئة بادئة FORGE_ config.py.
استخدامات ريديس الثلاثة
المشروع بيستخدم ريديس لثلاث حاجات متفرقة، وكل واحدة بتعتمد على ذرّية الأوامر نفسها:
- كاش JSON مع TTL ووظيفة
get_or_setبتخزن نتيجة الحساب الثقيل لكن تنتهي صلاحيتها تلقائيًا. - محدد معدل (sliding window) مكتوب كسكربت Lua واحدة ذرّية، فمفيش سباق بين عمليات متعددة.
- قفل موزّع بـ
SET NX PXمع مفتاح ملكية، والإفراج يتم بمقارنة وحذف (Lua) عشان محدش يحرر قفل مش بتاعه.
التحقق
الكود ملزوم بأربع بوابات جودة: Ruff (lint + format)، mypy strict، pre-commit، وGitHub Actions. الاختبارات بتشتغل على fakeredis وhttpx.ASGITransport من غير ما تحتاج Redis حقيقي أو خادم ويب شغال.