تطبيق خدمة API بسيط لاستهلاك القسائم من المجمع. هذا لأغراض العرض التوضيحي وتم إنشاؤه لإظهار المهارات المعمارية والبرمجة.
فيما يلي نقاط التصميم الرئيسية وكيفية التعامل معها وتنفيذها.
يتم استخدام الملحن لإدارة كافة تبعيات التطبيق. تم الإعلان عن كافة الحزم/المكتبات المطلوبة في ملف composer.json
. ويمكن تثبيته باستخدام أمر composer install
.
يتم توجيه إدخال التطبيق إلى الدليل public
، الذي يحتوي فقط على ملف index.php
ويمكن أن يحتوي أيضًا على ملفات أصول يمكن الوصول إليها بشكل عام. بخلاف ذلك، لا يمكن الوصول مباشرة إلى أي كود أو ملف خارج هذا المجلد. الفكرة هي حماية جميع الملفات خارج هذا الدليل.
جميع الطلبات وكيفية التعامل معها محددة في routes/api.php
.
للتفاعل مع MySQL، استخدمنا Illuminate Database المعروف أيضًا باسم "Eloquent". يسمح لنا بالتفاعل مع قاعدة البيانات الخاصة بنا عبر رسم الخرائط العلائقية للكائنات "ORM".
لترحيل قاعدة البيانات وزرعها، استخدمنا الحزمة المحايدة لإطار العمل Phinx. مع مرور الوقت، يتطور رمز التطبيق وتتطور معه قاعدة البيانات أيضًا. لتتبع تغييرات التعليمات البرمجية، نستخدم أدوات إصدار المصدر مثل git. باستخدام البرامج النصية للترحيل، يمكننا أيضًا تتبع تغييرات قاعدة البيانات. مفيدة بشكل خاص عند العمل في بيئة الفريق. عندما يسحب أعضاء الفريق تغييراتك، إذا رأوا البرامج النصية للترحيل، يمكنهم ببساطة تشغيلها باستخدام الأمر البسيط لترقية تغييرات مخطط قاعدة البيانات المحلية الخاصة بهم.
لإدارة تبعيات الفئة وتنفيذ حقن التبعيات، استخدمنا SlimFramwork Container
. وبهذا يمكننا عكس التحكم في التبعيات من التطبيق إلى الفصل ومن هنا جاء نمط "عكس التحكم".
للتعامل مع إعدادات التكوين للتطبيق، استخدمنا Illuminate Config. يتم تخزين جميع التكوينات في دليل config
. استخدم أيضًا Symfony Dotenv لتحميل المتغيرات المحددة في ملف .env
، ثم الوصول إليها عبر وظيفة getenv(). يعد هذا مفيدًا للحصول على إعدادات تكوين مختلفة لكل بيئة، مثل التطوير والتدريج والإنتاج.
لفهم ما يحدث داخل تطبيقنا، استخدمنا مكتبة Monolog التي توفر خدمات تسجيل قوية تسمح لك بتسجيل الرسائل.
للتحقق من صحة بيانات طلب HTTP الواردة لتطبيقك، استخدمنا Illuminate Validation، الذي يوفر مجموعة متنوعة من قواعد التحقق القوية.
لتوفير مخرجات قياسية ومتسقة لبيانات استجابة واجهة برمجة التطبيقات (API)، استخدمنا League Fractal، حتى نتمكن من الحصول على طبقة العرض التقديمي والتحويل لبيانات المخرجات الخاصة بنا. يتم تخزين جميع فئات التحويل في دليل app/Transformers
.
عندما يتم إنشاء عرض خاص جديد، فإننا لا نقوم بإنشاء قسائم لجميع المستلمين في نظامنا. وبدلاً من ذلك، نستخدم HashIds لإنشاء القسائم والتحقق من صحتها لكل مستلم. يمكننا التشفير وفك التشفير باستخدام مجموعة من [{recipient_id}, {offer_id}]
. يُنتج دائمًا رمز قسيمة مكون من 8 أحرف بالضبط والذي يمكن أيضًا تحديثه في config/hashids.php
لاختبار خدمة التطبيقات الخاصة بنا، استخدمنا Codeception، وهو يتيح لنا إجراء جميع أنواع الاختبارات الثلاثة، أي اختبارات الوحدة والوظيفية واختبارات القبول في إطار عمل موحد. في حالتنا، قمنا باختبار كائنات الأعمال الأساسية في AppServices
، كما قمنا أيضًا باختبارات قبول مكتوبة للتحقق من التكامل والوظائف لجميع نقاط نهاية واجهة برمجة التطبيقات. يتم تخزين جميع حالات الاختبار في دليل tests
. ويمكن تشغيله عن طريق الأمر التالي:
$ php vendor/bin/codecept run --steps
للحفاظ على معايير الترميز عبر الفريق، قمت بإنشاء الملف phpcs.xml
، والذي تم فيه تعريف كافة معايير الترميز. ويمكن التحقق من جميع ملفات التعليمات البرمجية وفقًا لهذا الملف عن طريق تشغيل الأمر التالي:
$ php vendor/bin/phpcs
متطلبات بيئة التطوير:
إعداد بيئة التطوير الخاصة بك على جهازك المحلي باستخدام البرنامج النصي للإعداد (لنظام التشغيل MAC/LINUX) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
./setup.sh
الإعداد اليدوي (لنظام التشغيل Windows) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
cp .env.dev .env
docker-compose up -d
docker exec -it voucher-pool-php-fpm composer install
docker exec -it voucher-pool-mysql mysql -u root -pnewsletter2go -e " create database newsletter2go_testing; GRANT ALL PRIVILEGES ON *.* TO 'newsletter2go'@'%' IDENTIFIED BY 'newsletter2go'; " ;
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx migrate
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx seed:run
الآن يمكنك الوصول إلى التطبيق عبر http://localhost:8080.
قم بتشغيل اختبارات الوحدة واختبارات القبول في حاوية خدمة PHP-FPM:
docker exec -it voucher-pool-php-fpm php vendor/bin/codecept run --steps
يمكنك الوصول إلى وثائق API العامة في Postman. لاستيراد وتشغيل جميع واجهات برمجة التطبيقات، انقر فوق "Run In Postman" في الشريط العلوي، وبعد التثبيت والاستيراد، سترى المجموعة الجديدة باسم "Newsletter2Go - Voucher API".