Organization Directory API — это REST API-приложение, предназначенное для ведения справочника организаций, зданий и видов деятельности (активностей). Приложение реализовано на базе FastAPI и SQLAlchemy с использованием асинхронного взаимодействия. Оно поддерживает фильтрацию организаций по названию, виду деятельности, а также обеспечивает поиск по координатам (радиус и bounding box).
Основное назначение приложения — давать быстрый доступ к справочнику организаций, с информацией о зданиях и видах деятельности, а также предоставлять удобные методы поиска.
- Python 3.12+
- FastAPI: создание REST API
- Pydantic: схемы и валидация данных
- SQLAlchemy + Alembic: работа с БД и управление миграциями
- AsyncIO: асинхронная обработка запросов
- Docker: контейнеризация приложения
- HTTPX / requests: обращение к сторонним API (геолокация через Nominatim API)
- Справочник Организаций:
- Поля:
- Название
- Набор телефонных номеров
- Здание (одно из существующих)
- Список видов деятельности (может быть несколько)
- Поля:
- Справочник Зданий:
- Поля:
- Адрес
- Географические координаты (широта, долгота)
- Автоматическое определение координат по адресу через Nominatim API (пример: г. Москва, ул. Ленина, 1)
- Поля:
- Справочник Видов Деятельности:
- Поля:
- Название
- Возможна древовидная структура (вкладывание)
- Ограничение вывода на глубину 3 уровня
- Поля:
- Стек: FastAPI + Pydantic + SQLAlchemy + Alembic. Ответы от API — в формате JSON.
- Список всех зданий:
GET /buildings/ - Получение информации о здании:
GET /buildings/{building_id} - Создание нового здания:
POST /buildings/(опционально, координаты определяются по адресу) - Список всех видов деятельности (с ограничением вложенности 3 уровня):
GET /activities/ - Получение конкретного вида деятельности:
GET /activities/{activity_id} - Создание нового вида деятельности:
POST /activities/ - Список всех организаций (с фильтрацией по названию, виду деятельности, зданию):
GET /organizations/ - Список всех организаций, находящихся в конкретном здании (через параметр
building_idлибо отдельный эндпоинт/organizations/by-building/) - Список всех организаций, которые относятся к указанному виду деятельности (через параметр
activity_idлибо/organizations/by-activity/, включая вложенные) - Поиск организаций по координатам (радиус) или названию города:
GET /organizations/search - Получение информации об организации:
GET /organizations/{organization_id} - Создание новой организации:
POST /organizations/
-
Клонируйте репозиторий:
git clone https://github.com/melixz/organization-directory-api.git
-
Создайте файл
.env(при необходимости) или используйте переменные окружения. Пример:DATABASE_URL=postgresql+asyncpg://username:password@db:5432/your_db
-
Соберите и запустите приложение с помощью Docker и Makefile:
make
-
Приложение станет доступно по адресу
http://127.0.0.1:8000или тому, что указано в вашем docker-compose.
make— собирает приложение (build + up + migrate + seed)make build— собирает Docker-образmake up— поднимает контейнеры (приложение, БД и т.д.)make down— останавливает и удаляет контейнерыmake migrate— запускает alembic миграцииmake seed— заполняет базу тестовыми даннымиmake logs— показывает логи контейнера приложенияmake reset— полностью пересобирает проект (down -v + build + up + migrate + seed)
Ниже примеры основных ручек:
GET /buildings/— список всех зданийGET /buildings/{building_id}— детали одного зданияPOST /buildings/— создание здания (адрес + координаты через Nominatim)
GET /activities/— список всех видов деятельности (3 уровня вложенности)GET /activities/{activity_id}— детали конкретного вида деятельностиPOST /activities/— создание нового вида деятельности с указаниемparent_id
GET /organizations/— список всех организаций с фильтрацией поname,activity_id,building_idGET /organizations/search— поиск организаций по городу (city), радиусу (base_lat,base_lon,radius_km) или прямоугольной области (min_lat,max_lat,min_lon,max_lon)GET /organizations/{organization_id}— детали одной организацииPOST /organizations/— создание новой организации (название, телефоны,building_id,activity_ids)
- Асинхронный подход (FastAPI + Async SQLAlchemy) обеспечивает высокую производительность.
- Гибкая фильтрация — можно получить организации по названию, виду деятельности, зданию и координатам.
- Docker — развертывание приложения на любой машине одной командой.
- Alembic — удобное управление миграциями БД.
- Nominatim API — автоматическое определение координат по адресу здания.
