Тестовое задание: REST API для справочника организаций, зданий и видов деятельности.
-
Поиск организаций:
- по названию
- по координатам (радиус и прямоугольник)
- по зданию
- по виду деятельности (с учётом вложенности)
-
Хранение зданий с координатами
-
Древовидная структура видов деятельности (ограничена до 3 уровней)
-
Доступ через
X-API-KEY -
Документация через Swagger UI (openapi.yaml)
-
Контейнеризация через Docker
- Laravel 12
- PHP 8.2
- Postgres
- Docker / Docker Compose
- Swagger UI / OpenAPI 3.0
app/Models— модели Organization, Building, Activity, Phoneapp/Http/Controllers— контроллеры: OrganizationController, ActivityOrganizationController и др.app/Observers/ActivityObserver.php— ограничение глубины видов деятельностиroutes/api.php— маршруты APIroutes/web.php— маршруты документацииpublic/docs/openapi.yaml— спецификация OpenAPI 3.0resources/views/swagger.blade.php— шаблон Swagger UI
Все запросы требуют заголовок:
X-API-KEY: ваш_секретный_ключ
Ключ указывается в .env:
API_KEY=123456
git clone https://github.com/toririo/organizations-api.git
cd organizations-api
cp .env.example .env
# Укажи API_KEY и настройки базы
docker compose up -d --build
docker compose exec app composer install
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate --seed
Swagger UI доступен по адресу:
http://localhost/api/documentation
Спецификация OpenAPI:
http://localhost/docs/openapi.yaml
GET /api/v1/organizations?name=мясо&lat=55.75&lng=37.61&radius=2
GET /api/v1/buildings/1/organizations
GET /api/v1/activities/2/organizations
docker compose down -v
- Добавить CRUD через POST/PUT/DELETE
- Вынести фильтрацию в отдельный сервис-класс
- Покрыть feature-тестами API