แอปพลิเคชันบริการ API ที่เรียบง่ายเพื่อใช้บัตรกำนัลจากพูล มีจุดประสงค์เพื่อการสาธิตและสร้างขึ้นเพื่อสาธิตทักษะด้านสถาปัตยกรรมและการเขียนโปรแกรม
ด้านล่างนี้คือประเด็นการออกแบบที่สำคัญ รวมถึงวิธีจัดการและนำไปใช้งาน
นักแต่งเพลงใช้เพื่อจัดการการขึ้นต่อกันทั้งหมดของแอปพลิเคชัน แพ็คเกจ / ไลบรารีที่จำเป็นทั้งหมดได้รับการประกาศในไฟล์ composer.json
และสามารถติดตั้งได้โดยใช้คำสั่ง composer install
รายการแอปพลิเคชันจะชี้ไปที่ไดเร็กทอรี public
ซึ่งเก็บเฉพาะไฟล์ index.php
และยังสามารถมีไฟล์สินทรัพย์ที่สามารถเข้าถึงได้แบบสาธารณะ นอกเหนือจากนี้ ไม่สามารถเข้าถึงโค้ดหรือไฟล์ที่อยู่นอกโฟลเดอร์นี้ได้โดยตรง แนวคิดคือการปกป้องไฟล์ทั้งหมดที่อยู่นอกไดเร็กทอรีนี้
คำขอทั้งหมดและวิธีการจัดการถูกกำหนดไว้ใน routes/api.php
ในการโต้ตอบกับ mySQL เราได้ใช้ Illuminate Database หรือที่เรียกว่า "Eloquent" ช่วยให้เราสามารถโต้ตอบกับฐานข้อมูลของเราผ่านทาง Object Relational Mapping "ORM"
ในการโยกย้ายและเริ่มต้นฐานข้อมูล เราได้ใช้แพ็คเกจ Phinx ที่ไม่เชื่อเรื่องเฟรมเวิร์ก เมื่อเวลาผ่านไปรหัสแอปพลิเคชันก็มีวิวัฒนาการและฐานข้อมูลก็มีวิวัฒนาการไปด้วย เพื่อติดตามการเปลี่ยนแปลงโค้ด เราใช้เครื่องมือการกำหนดเวอร์ชันต้นฉบับ เช่น git ด้วยสคริปต์การย้ายข้อมูล เรายังสามารถติดตามการเปลี่ยนแปลงฐานข้อมูลได้อีกด้วย มีประโยชน์เป็นพิเศษเมื่อทำงานในสภาพแวดล้อมเป็นทีม เมื่อเพื่อนร่วมทีมดึงการเปลี่ยนแปลงของคุณ หากพวกเขาเห็นสคริปต์การย้ายข้อมูล พวกเขาสามารถเรียกใช้สคริปต์นั้นด้วยคำสั่งง่ายๆ เพื่ออัปเกรดการเปลี่ยนแปลงสคีมาฐานข้อมูลในเครื่องของตน
สำหรับการจัดการการขึ้นต่อกันของคลาสและการดำเนินการการขึ้นต่อกัน เราได้ใช้ SlimFramwork Container
ด้วยวิธีนี้เราสามารถกลับการควบคุมการขึ้นต่อกันจากแอปพลิเคชันหนึ่งไปยังอีกคลาสได้ ดังนั้นรูปแบบ "Inversion of Control"
สำหรับการจัดการการตั้งค่าสำหรับแอปพลิเคชัน เราได้ใช้ 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
รวมถึงการทดสอบการยอมรับที่เป็นลายลักษณ์อักษรเพื่อตรวจสอบการรวมและการทำงานของจุดสิ้นสุด API ทั้งหมด กรณีทดสอบทั้งหมดจะถูกจัดเก็บไว้ในไดเร็กทอรี 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 สาธารณะได้ที่บุรุษไปรษณีย์ หากต้องการนำเข้าและเรียกใช้ API ทั้งหมด ให้คลิก "เรียกใช้ในบุรุษไปรษณีย์" ที่แถบด้านบน หลังจากติดตั้งและนำเข้า คุณจะเห็นคอลเลกชันใหม่เป็น "Newsletter2Go - Voucher API"