📖 درس دهم: پروژه نهایی – API فروشگاهی کامل
🎯 هدف این درس: پیادهسازی یک پروژه کامل فروشگاه اینترنتی با استفاده از تمام مفاهیم آموخته شده در دوره. این پروژه شامل مدیریت کاربران، محصولات، سبد خرید، سفارشات، پرداخت، تخفیفها و گزارشگیری میباشد.
مهمان عزیز! 👋
به آخرین و مهمترین درس این دوره خوش آمدی!
در طول ۹ درس گذشته، تمام مفاهیم مورد نیاز برای ساخت یک API حرفهای را یاد گرفتی. حالا وقت آن است که همه این مفاهیم را در یک پروژه واقعی و کامل پیادهسازی کنیم: یک API فروشگاهی کامل!
💡 چرا پروژه فروشگاهی؟
- ✅ شامل تمام مفاهیم مهم API (CRUD، احراز هویت، امنیت، کش، نسخهبندی، تست).
- ✅ یک پروژه واقعی و کاربردی که در بازار کار ارزش بالایی دارد.
- ✅ قابلیت نمایش در رزومه و نمونه کار.
- ✅ امکان توسعه و اضافه کردن قابلیتهای بیشتر.
- ✅ درک کامل چرخه حیات یک پروژه تجاری.
📋 مشخصات پروژه
| نام پروژه | API فروشگاه اینترنتی رجستری |
| نسخه API | v1 و v2 |
| تکنولوژیها | PHP 8.2، MySQL 8.x، Redis، Composer، PHPUnit |
| قابلیتها | مدیریت کاربران، محصولات، سبد خرید، سفارشات، پرداخت، تخفیفها، گزارشگیری |
| مستندات | OpenAPI (Swagger) + Postman Collection |
🗄️ ساختار دیتابیس
database.sql
SQL
MySQL 8.x
-- ==========================================
-- دیتابیس فروشگاه اینترنتی
-- ==========================================
CREATE DATABASE IF NOT EXISTS shop_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE shop_db;
-- ==========================================
-- ۱. جدول کاربران
-- ==========================================
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
phone VARCHAR(20) NULL,
address TEXT NULL,
role ENUM('admin', 'seller', 'customer') DEFAULT 'customer',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL
);
-- ==========================================
-- ۲. جدول محصولات
-- ==========================================
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
slug VARCHAR(200) NOT NULL UNIQUE,
description TEXT NULL,
price DECIMAL(10, 2) NOT NULL,
compare_price DECIMAL(10, 2) NULL -- قیمت قبلی برای تخفیف
stock INT NOT NULL DEFAULT 0,
category_id INT NULL,
seller_id INT NULL, -- فروشنده (برای بازارچه)
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL,
FOREIGN KEY (seller_id) REFERENCES users(id) ON DELETE SET NULL
);
-- ==========================================
-- ۳. جدول دستهبندیها
-- ==========================================
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
slug VARCHAR(100) NOT NULL UNIQUE,
parent_id INT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE
);
-- ==========================================
-- ۴. جدول سبد خرید (Cart)
-- ==========================================
CREATE TABLE cart_items (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
UNIQUE KEY (user_id, product_id)
);
-- ==========================================
-- ۵. جدول سفارشات (Orders)
-- ==========================================
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_number VARCHAR(50) NOT NULL UNIQUE,
user_id INT NOT NULL,
total_amount DECIMAL(10, 2) NOT NULL,
discount_amount DECIMAL(10, 2) DEFAULT 0,
final_amount DECIMAL(10, 2) NOT NULL,
status ENUM('pending', 'paid', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
shipping_address TEXT NOT NULL,
payment_method VARCHAR(50) NULL,
payment_id VARCHAR(100) NULL, -- شناسه پرداخت از درگاه
tracking_number VARCHAR(100) NULL,
notes TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT
);
-- ==========================================
-- ۶. جدول جزئیات سفارش
-- ==========================================
CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
product_name VARCHAR(200) NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
subtotal DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE RESTRICT
);
-- ==========================================
-- ۷. جدول تخفیفها
-- ==========================================
CREATE TABLE coupons (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50) NOT NULL UNIQUE,
type ENUM('percentage', 'fixed') NOT NULL,
value DECIMAL(10, 2) NOT NULL,
min_order_amount DECIMAL(10, 2) NULL,
max_discount DECIMAL(10, 2) NULL,
usage_limit INT NULL,
used_count INT DEFAULT 0,
expires_at TIMESTAMP NULL,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ==========================================
-- ۸. جدول لاگها
-- ==========================================
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NULL,
action VARCHAR(100) NOT NULL,
description TEXT NULL,
ip_address VARCHAR(45) NULL,
user_agent TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ==========================================
-- ۹. ایندکسها برای بهینهسازی
-- ==========================================
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_products_slug ON products(slug);
CREATE INDEX idx_products_category ON products(category_id);
CREATE INDEX idx_products_seller ON products(seller_id);
CREATE INDEX idx_orders_user ON orders(user_id);
CREATE INDEX idx_orders_status ON orders(status);
CREATE INDEX idx_cart_user ON cart_items(user_id);
CREATE INDEX idx_coupons_code ON coupons(code);
📋 لیست Endpointهای پروژه
| دسته | متد | Endpoint | توضیح | نیاز به احراز |
|---|---|---|---|---|
| 🔐 احراز هویت | ||||
| Auth | POST | /auth/register | ثبتنام کاربر | ❌ |
| Auth | POST | /auth/login | ورود کاربر | ❌ |
| Auth | GET | /auth/me | اطلاعات کاربر فعلی | ✅ |
| 👤 کاربران | ||||
| Users | GET | /v1/users | لیست کاربران (v1) | ✅ (admin) |
| Users | GET | /v2/users | لیست کاربران با جزئیات (v2) | ✅ (admin) |
| 📦 محصولات | ||||
| Products | GET | /products | لیست محصولات با فیلتر و صفحهبندی | ❌ |
| Products | GET | /products/{id} | جزئیات محصول | ❌ |
| Products | POST | /products | ایجاد محصول | ✅ (admin/seller) |
| Products | PUT | /products/{id} | بروزرسانی محصول | ✅ (admin/seller) |
| Products | DELETE | /products/{id} | حذف محصول | ✅ (admin/seller) |
| 🛒 سبد خرید | ||||
| Cart | GET | /cart | مشاهده سبد خرید | ✅ |
| Cart | POST | /cart/items | افزودن به سبد خرید | ✅ |
| Cart | PUT | /cart/items/{id} | بروزرسانی تعداد | ✅ |
| Cart | DELETE | /cart/items/{id} | حذف از سبد خرید | ✅ |
| Cart | DELETE | /cart/clear | خالی کردن سبد خرید | ✅ |
| 📦 سفارشات | ||||
| Orders | GET | /orders | لیست سفارشات | ✅ |
| Orders | GET | /orders/{id} | جزئیات سفارش | ✅ |
| Orders | POST | /orders | ثبت سفارش جدید | ✅ |
| Orders | PUT | /orders/{id}/status | بروزرسانی وضعیت سفارش | ✅ (admin) |
| 🎫 تخفیفها | ||||
| Coupons | GET | /coupons | لیست کدهای تخفیف | ✅ (admin) |
| Coupons | POST | /coupons/validate | اعتبارسنجی کد تخفیف | ✅ |
| Coupons | POST | /coupons | ایجاد کد تخفیف | ✅ (admin) |
| 📊 گزارشگیری | ||||
| Reports | GET | /reports/sales | گزارش فروش | ✅ (admin) |
💎 نکات کلیدی پروژه
- ✅ این پروژه شامل تمام مفاهیم یادشده در ۹ درس قبلی است.
- ✅ از معماری MVC با مسیریاب دستی استفاده شده است.
- ✅ احراز هویت با JWT و Middleware پیادهسازی شده است.
- ✅ امنیت با Prepared Statements، Rate Limiting و Security Headers تأمین شده است.
- ✅ از Redis برای کش کردن محصولات و سبد خرید استفاده شده است.
- ✅ نسخهبندی API با URI Path پیادهسازی شده است.
- ✅ تستهای Unit و Feature با PHPUnit نوشته شده است.
- ✅ مستندات با OpenAPI (Swagger) تولید شده است.
- ✅ لاگگیری با Monolog انجام شده است.
📝 گامهای پیادهسازی پروژه
- مرحله ۱: ایجاد ساختار پروژه و نصب وابستگیها.
- مرحله ۲: پیادهسازی کلاسهای Core (Router, Request, Response).
- مرحله ۳: پیادهسازی اتصال دیتابیس و مدلها.
- مرحله ۴: پیادهسازی احراز هویت با JWT.
- مرحله ۵: پیادهسازی Endpointهای محصولات و دستهبندیها.
- مرحله ۶: پیادهسازی سبد خرید و مدیریت آن.
- مرحله ۷: پیادهسازی سفارشات و تراکنشهای مالی.
- مرحله ۸: پیادهسازی سیستم تخفیفها.
- مرحله ۹: پیادهسازی کش با Redis.
- مرحله ۱۰: پیادهسازی تستها و مستندات.
🏁 جمعبندی کل دوره
مهمان عزیز! 🎉
به پایان دوره فوقپیشرفته توسعه API رسیدی! در طول این ۱۰ درس، یاد گرفتی:
- ✅ درس ۱: مفاهیم پایه API، HTTP، REST و معماری Client-Server.
- ✅ درس ۲: پیادهسازی RESTful API با PHP خام.
- ✅ درس ۳: مدیریت دادهها و پایگاهداده با PDO.
- ✅ درس ۴: اعتبارسنجی و احراز هویت با JWT.
- ✅ درس ۵: امنیت API پیشرفته (OWASP، SQLi، XSS، CSRF، Rate Limiting).
- ✅ درس ۶: مستندسازی API با OpenAPI (Swagger).
- ✅ درس ۷: Caching و افزایش عملکرد با Redis.
- ✅ درس ۸: API Versioning و مدیریت چرخه حیات.
- ✅ درس ۹: تست و دیباگ API حرفهای با PHPUnit.
- ✅ درس ۱۰: پروژه نهایی – API فروشگاهی کامل.
🎓 تبریک! شما یک توسعهدهنده حرفهای API هستید!
حالا شما توانایی طراحی، پیادهسازی، امنسازی، بهینهسازی و مستندسازی APIهای حرفهای را دارید.
از این مهارت برای ساخت پروژههای بزرگ و ورود به بازار کار استفاده کن.
🚀 موفق و پیروز باشی!
🗺️ نقشه راه دوره: شما اینجا هستید!
به پایان دوره رسیدی! تمام ۱۰ درس را با موفقیت پشت سر گذاشتی.
| درس | عنوان درس | آنچه یاد گرفتی |
|---|---|---|
| ۱ | مفاهیم پایه API | HTTP، REST، معماری Client-Server |
| ۲ | پیادهسازی RESTful API با PHP خام | مسیریابی، متدها، پارامترها، پاسخهای JSON |
| ۳ | مدیریت دادهها و پایگاهداده | اتصال PDO، CRUD، تراکنشها، Pagination |
| ۴ | اعتبارسنجی و احراز هویت | JWT، Roles/Permissions، Middleware |
| ۵ | امنیت API پیشرفته | OWASP Top 10، SQLi، XSS، CSRF، Rate Limiting |
| ۶ | مستندسازی API با OpenAPI | Swagger، OpenAPI Specification، مستندات تعاملی |
| ۷ | Caching و افزایش عملکرد | Redis، ETag، Cache-Control، Query Optimization |
| ۸ | API Versioning و مدیریت چرخه حیات | استراتژیهای نسخهبندی، Deprecation، Backward Compatibility |
| ۹ | تست و دیباگ API حرفهای | PHPUnit، Mocking، Logging، Postman Collection |
| ۱۰ | پروژه نهایی: API فروشگاهی | پروژه کامل فروشگاه اینترنتی با تمام قابلیتها |




نظر خود را بنویسید
با ثبت نظر، به بهبود محتوای ما کمک کنید