Kit від Steve McDougall — стартовий набір для Laravel API, побудований навколо токен‑автентифікації, документації API та налаштувань з пріоритетом безпеки. Він для розробників, які хочуть готову структуру для створення версіонованих JSON API без налаштування всього з нуля.
# Початок роботи
Клонуйте репозиторій, встановіть залежності та запустіть скрипт налаштування:
composer install
composer run setup
php artisan serve
Команда composer run setup копіює .env.example у .env, генерує app key і виконує міграції у локальній SQLite базі даних.
# Архітектура API
Kit дотримується кількох чітких архітектурних рішень:
- Жодного глобального
/apiпрефікса — маршрути версіонуються напряму, наприклад/v1/auth/login - Тільки invokable‑контролери — кожен контролер має один метод
__invoke - FormRequest для валідації — дані запитів перевіряються в окремих класах
FormRequest, з DTO‑подібними класами payload уapp/Http/Payloads/V1 - Формат ресурсів JSON:API — відповіді мають уніфіковану структуру для даних сутностей
# Аутентифікація
Дев’ять маршрутів покривають повний цикл аутентифікації:
- Реєстрація та вхід (обидва повертають токени через Laravel Sanctum)
/v1/auth/me(потребує Bearer‑токен)- Підтвердження email через підписані URL
- Скидання пароля з механізмом проти вгадування (відповідь однакова незалежно від того, чи існує email)
# Налаштування безпеки за замовчуванням
У Kit за замовчуванням є кілька налаштувань безпеки:
- ULID як первинні ключі записів користувачів
- Попередньо встановлені ліміти запитів для auth‑ендпоінтів, які можна налаштувати в
AppServiceProvider - Примусова вимога заголовка
Content-Type: application/jsonдля write‑запитів - Посилені заголовки відповіді, зокрема
X-Content-Type-Options: nosniff,X-Frame-Options: DENYіReferrer-Policy: no-referrer - Відстеження Request ID
- Аудит‑логування для чутливих операцій
- та інше
# Sunset Middleware
У Kit також є middleware Sunset для поступового зняття ендпоінтів з підтримки. Його додають безпосередньо до маршруту з трьома параметрами: дата sunset, URL‑наступник і булеве значення для примусового застосування:
Route::middleware('sunset:2027-01-01,https://api.acme.com/v2/auth/login,true')
->post('/v1/auth/login', LoginController::class);
Поки ендпоінт активний, middleware додає до кожної відповіді заголовки Deprecation, Sunset і Link (з посиланням на наступну версію), щоб клієнти могли виявити депрекацію й підготуватися. Після настання дати sunset і за увімкненого примусового режиму ендпоінт повертає 410 Gone.
# Документація
Документація API генерується за допомогою Scribe. Анотації використовують атрибути замість docblock, а налаштування генерує OpenAPI‑специфікацію разом із документацією.
# Локалізація
Kit поважає заголовок Accept-Language і відповідає із заголовком Content-Language. Підтримувані локалі за замовчуванням — en та es, файли перекладів знаходяться у lang/en/api.php та lang/es/api.php.
# Інструменти
Проєкт використовує Pest для тестів, PHPStan для статичного аналізу, Pint для форматування коду і Rector для автоматичного рефакторингу. Workflows GitHub Actions запускають CI при кожному пуші, щодня оновлюють залежності та запускають сканування безпеки через composer audit і Gitleaks.
# Вимоги
- PHP 8.5+
- Laravel 12
- SQLite (для локальної розробки; можна налаштувати іншу базу даних)
Перейдіть на juststeveking/kit на GitHub, щоб переглянути код і дізнатися більше.