Современный PHP 8.2+ REST API фреймворк с поддержкой Composer, Docker и PSR-4 автозагрузки.
- ✅ Composer - современное управление зависимостями
- ✅ PSR-4 автозагрузка - стандартизированная загрузка классов
- ✅ Docker - контейнеризация для продакшена
- ✅ JWT авторизация с refresh токенами
- ✅ REST API архитектура
- ✅ MySQL 8 поддержка
- ✅ CORS поддержка
- ✅ Валидация данных
- ✅ Пагинация
- ✅ Безопасность (хеширование паролей, SQL инъекции защита)
- ✅ Конфигурация через .env
- Клонируйте репозиторий
git clone <repository-url>
cd fckerAPI- Установите зависимости
# Для продакшена
make setup
# Для разработки
make setup-dev- Настройте .env файл
cp env.example .env
# Отредактируйте .env файл с вашими настройками- Настройте базу данных
CREATE DATABASE fcker_api;
mysql -u root -p fcker_api < database/schema.sql- Клонируйте репозиторий
git clone <repository-url>
cd fckerAPI- Запустите с Docker Compose
docker-compose up -d- Доступ к приложению
- API: http://localhost:8080
- phpMyAdmin: http://localhost:8081
make help # Показать справку
make setup # Настройка для продакшена
make setup-dev # Настройка для разработки
make install # Установить зависимости
make update # Обновить зависимости
make test # Запустить тесты
make optimize # Оптимизировать автозагрузчик
make check # Проверить код на ошибки
make clean # Очистить кэш# Application
APP_NAME=FckerAPI
APP_ENV=production
APP_DEBUG=false
APP_URL=http://localhost
# Database
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=fcker_api
DB_USERNAME=root
DB_PASSWORD=
# JWT
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_ACCESS_EXPIRY=3600
JWT_REFRESH_EXPIRY=86400
JWT_ISSUER=fcker-api
JWT_AUDIENCE=fcker-clients
# Timezone
TIMEZONE=Europe/Moscow
# Pagination
DEFAULT_PAGE_SIZE=10
MAX_PAGE_SIZE=100fckerAPI/
├── application/
│ ├── Controllers/
│ │ ├── AuthController.php
│ │ ├── IndexController.php
│ │ └── PostsController.php
│ └── Models/
│ ├── PostModel.php
│ └── UserModel.php
├── framework/
│ ├── Core/
│ │ ├── Config.php
│ │ ├── Controller.php
│ │ ├── Model.php
│ │ ├── Request.php
│ │ ├── Response.php
│ │ └── Router.php
│ ├── Middleware/
│ │ └── AuthMiddleware.php
│ └── Services/
│ └── JwtService.php
├── database/
│ └── schema.sql
├── docker/
│ ├── nginx.conf
│ └── supervisord.conf
├── composer.json
├── docker-compose.yml
├── Dockerfile
├── Makefile
└── index.php
POST /auth/register
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "password123"
}POST /auth/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "password123"
}POST /auth/refresh
Content-Type: application/json
{
"refresh_token": "your_refresh_token"
}GET /auth/me
Authorization: Bearer your_access_tokenPOST /auth/logout
Authorization: Bearer your_access_tokenGET /posts?page=1&limit=10GET /posts/1POST /posts
Authorization: Bearer your_access_token
Content-Type: application/json
{
"title": "Новый пост",
"content": "Содержимое поста"
}PUT /posts/1
Authorization: Bearer your_access_token
Content-Type: application/json
{
"title": "Обновленный заголовок",
"content": "Обновленное содержимое"
}DELETE /posts/1
Authorization: Bearer your_access_tokenGET /posts/my
Authorization: Bearer your_access_tokendocker build -t fcker-api .# Запуск всех сервисов
docker-compose up -d
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down# В docker-compose.yml или через .env файл
APP_ENV=production
DB_HOST=db
DB_PORT=3306
DB_DATABASE=fcker_api
DB_USERNAME=fcker_user
DB_PASSWORD=fcker_password# Запуск тестов
make test
# Или напрямую
composer test- Все пароли хешируются с помощью
password_hash() - Защита от SQL инъекций через PDO prepared statements
- JWT токены с настраиваемым временем жизни
- CORS заголовки для безопасности
- Валидация всех входящих данных
- Оптимизированный автозагрузчик Composer
- Кэширование путей к классам
- Gzip сжатие для статических файлов
- Оптимизированные SQL запросы
- Fork репозитория
- Создайте ветку для новой функции
- Внесите изменения
- Добавьте тесты
- Создайте Pull Request
MIT License - см. файл LICENSE
Если у вас есть вопросы или проблемы:
- Проверьте Issues
- Создайте новый Issue с подробным описанием
- Убедитесь, что проблема воспроизводится в последней версии