alexeev-prog/org-handbook-api
REST API справочника организаций
org-handbook-api
Высокопроизводительный REST API для управления справочником организаций
Изучите документацию »
Быстрый старт
·
Модели
·
Маршруты
·
Разработка
.
Документация
·
Лицензия
Org-Handbook-API — это современный асинхронный RESTful API для управления справочником организаций с расширенными возможностями поиска и геолокации.
Быстрый старт
Предварительные требования
- Docker & Docker Compose
- Git
Установка и запуск
-
Клонирование репозитория
git clone https://github.com/alexeev-prog/org-handbook-api.git cd org-handbook-api -
Запуск приложения
docker-compose up --build -d
-
Проверка работоспособности
curl -H "X-API-Key: secret-static-api-key" http://localhost:8000/health -
Доступ к документации API
Откройте в браузере:http://localhost:8000/docs
Утилита для автоматизации
Запустите main.py, если хотите протестировать API, заполнить тестовыми данными или осуществлять взаимодействие через скрипт:
$ python3 main.py
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--base-url TEXT Base API URL
--api-key TEXT API Key
--help Show this message and exit.
Commands:
activities
buildings
health
organizations
seed--base-url- базовый URL запущенного API (напримерhttp://0.0.0.0:8000)--api-key- статичный токен (по умолчаниюsecret-static-api-key)activities- манипуляции с видами деятельностиbuildings- манипуляции с видами зданийhealth- проверка работы сервераorganizations- манипуляция с организациямиseed- заполнение тестовыми данными
Модели данных
Организация (Organization)
{
"id": 1,
"legal_name": "ООО Рога и Копыта",
"building_id": 1,
"building": {
"id": 1,
"address": "г. Москва, ул. Ленина 1",
"latitude": 55.7558,
"longitude": 37.6173
},
"phonenumbers": [
{"id": 1, "phone_number": "2-222-222"},
{"id": 2, "phone_number": "3-333-333"}
],
"activities": [
{"id": 1, "name": "Молочная продукция"},
{"id": 2, "name": "Мясная продукция"}
]
}Здание (Building)
{
"id": 1,
"address": "г. Москва, ул. Ленина 1, офис 3",
"latitude": 55.7558,
"longitude": 37.6173,
"organizations": [
{
"id": 1,
"legal_name": "ООО Рога и Копыта"
}
]
}Деятельность (Activity) - древовидная структура
{
"id": 1,
"name": "Еда",
"parent_id": null,
"level": 0,
"parent": null,
"children": [
{
"id": 2,
"name": "Мясная продукция",
"parent_id": 1,
"level": 1,
"children": []
}
],
"organizations": [
{
"id": 1,
"legal_name": "ООО Рога и Копыта"
}
]
}API маршруты
Основные CRUD операции
Организации
| Метод | Endpoint | Описание |
|---|---|---|
GET |
/api/v1/organizations/ |
Получить список организаций |
GET |
/api/v1/organizations/{id} |
Получить организацию по ID |
POST |
/api/v1/organizations/ |
Создать новую организацию |
PUT |
/api/v1/organizations/{id} |
Обновить организацию |
DELETE |
/api/v1/organizations/{id} |
Удалить организацию |
Здания
| Метод | Endpoint | Описание |
|---|---|---|
GET |
/api/v1/buildings/ |
Список зданий |
GET |
/api/v1/buildings/{id} |
Здание по ID |
POST |
/api/v1/buildings/ |
Создать здание |
PUT |
/api/v1/buildings/{id} |
Обновить здание |
DELETE |
/api/v1/buildings/{id} |
Удалить здание |
Виды деятельности
| Метод | Endpoint | Описание |
|---|---|---|
GET |
/api/v1/activity/ |
Список видов деятельности |
GET |
/api/v1/activity/{id} |
Вид деятельности по ID |
POST |
/api/v1/activity/ |
Создать вид деятельности |
PUT |
/api/v1/activity/{id} |
Обновить вид деятельности |
DELETE |
/api/v1/activity/{id} |
Удалить вид деятельности |
GET |
/api/v1/activity/tree/{parent_id} |
Дерево видов деятельности |
Расширенный поиск организаций
| Метод | Endpoint | Параметры | Описание |
|---|---|---|---|
GET |
/api/v1/organizations/building/{building_id} |
building_id |
Организации в указанном здании |
GET |
/api/v1/organizations/activity/{activity_id} |
activity_id |
Организации по виду деятельности (включая дочерние) |
GET |
/api/v1/organizations/search/name |
name |
Поиск организаций по названию |
GET |
/api/v1/organizations/search/radius |
lat, lon, radius_km |
Геопоиск организаций в радиусе |
GET |
/api/v1/organizations/search/area |
min_lat, max_lat, min_lon, max_lon |
Поиск в прямоугольной области |
Примеры запросов поиска
Поиск по названию:
curl -H "X-API-Key: secret-static-api-key" \
"http://localhost:8000/api/v1/organizations/search/name?name=Рога"Геопоиск в радиусе:
curl -H "X-API-Key: secret-static-api-key" \
"http://localhost:8000/api/v1/organizations/search/radius?lat=55.7558&lon=37.6173&radius_km=5"Аутентификация
Все запросы требуют заголовок API-ключа:
X-API-Key: secret-static-api-keyРазработка
Локальная установка для разработки
-
Установка зависимостей
pip install uv uv sync
-
Настройка окружения
Создайте или отредактируйте конфигурационный файлorghandbookapi.toml:[run] host = "127.0.0.1" port = 8000 [database] host = "localhost" port = 5432 name = "orghandbookapi" user = "admin" password = "password" [security] api_key = "your-development-api-key" api_key_header = "X-API-Key"
-
Запуск миграций базы данных
alembic upgrade head
-
Запуск сервера для разработки
uvicorn orghandbookapi.app:app --reload --host 0.0.0.0 --port 8000
Запуск тестов
# Все тесты
pytest tests/ -v
# С покрытием кода
pytest --cov=orghandbookapi tests/
# С параллельным выполнением
pytest -n auto tests/Code Quality
# Линтинг
ruff check .
# Форматирование
ruff format .Технологический стек
| Компонент | Технологии |
|---|---|
| Фреймворк | FastAPI, Pydantic, SQLAlchemy 2.0 |
| База данных | PostgreSQL + SQLAlchemy Async |
| Миграции | Alembic |
| Контейнеризация | Docker, Docker Compose |
| CI/CD | GitHub Actions |
| Документация | Sphinx, Swagger UI, Redoc |
| Линтеры | Ruff, Black, isort |
| Package Management | UV |
📄 Лицензия и поддержка
Данный проект лицензирован под GNU GPL 3 - просмотрите файл LICENSE для деталей.
Для коммерческого использования или вопросов по сотрудничеству напишите на alexeev.dev@mail.ru.
Документация |
Сообщить об ошибке |
Предложить улучшение
REST API справочника организаций
Copyright © 2025 Alexeev Bronislav. Все права защищены.
