RESTful API для поиска и получения структурированной информации об организациях, их зданиях и видах деятельности. Проект подходит для интеграции в корпоративные информационные системы, электронные справочники и веб‑порталы.
- Python 3.13
- FastAPI 0.116 (ASGI)
- SQLAlchemy 2 (async)
- PostgreSQL 15
- Alembic — миграции БД
- Docker + docker‑compose
- API‑ключи (заголовок
X‑API‑KEY)
git clone https://github.com/NeewMeta88/org_finder_api.git
cd org_finder_apipython -m venv .venv
source .venv/bin/activate # Windows → .venv\Scripts\activate
pip install -r requirements.txtПример содержимого (см. .env.example):
API_KEY=super‑secret‑key
DATABASE_URL=postgresql+asyncpg://user:pass@db:5432/db
POSTGRES_USER=user
POSTGRES_PASSWORD=pass
POSTGRES_DB=db
docker-compose up --buildПриложение будет доступно по адресу http://localhost:8000.
Swagger доступна по адресу /docs,
альтернативная — /redoc.
Выполните миграцию:
docker-compose run --rm web alembic upgrade headЗатем накатите (данные) для теста
docker-compose run --rm web python app/initial_data.pyДля всех эндпоинтов требуется заголовок с API‑ключом:
X-API-KEY: super‑secret‑key
При отсутствии или неверном ключе сервер вернёт 401 Unauthorized.
| Метод | URL | Описание | Аутентификация |
|---|---|---|---|
| GET | /organizations/ |
Поиск организаций по фильтрам (name, activity_id) |
✅ Да |
| GET | /organizations/search |
Поиск организаций по геолокации (координаты или радиус) | ✅ Да |
| GET | /organizations/{organization_id} |
Детальная информация об организации | ✅ Да |
| GET | /activities/{activity_id}/organizations |
Организации указанного вида деятельности (включая вложенные категории) | ✅ Да |
| GET | /buildings/{building_id}/organizations |
Организации, расположенные в здании | ✅ Да |
| Параметр | Тип | Описание |
|---|---|---|
name |
str |
Подстрока для поиска по названию |
activity_id |
int |
Фильтр по ID вида деятельности |
building_id |
int |
Фильтр по ID здания |
- Поиск чувствителен к регистру и выполняет LIKE‑сопоставление.
- При запросе организаций по виду деятельности учитываются вложенные категории до 3‑го уровня.
- Для лучшей производительности используется асинхронный доступ к БД и индексы по полям
name,activity_id,building_id.
🔍 Поиск организаций по фильтрам (название и/или ID вида деятельности)
curl -X GET "http://localhost:8000/organizations/?name=БетаКонсалт&activity_id=2" \
-H "X-API-KEY: super-secret-key"📍 Поиск организаций по геолокации (радиус)
curl -X GET "http://localhost:8000/organizations/search?lat=55.7605&lon=37.6402&radius=1" \
-H "X-API-KEY: super-secret-key"🗺️ Поиск организаций по прямоугольной области
curl -X GET "http://localhost:8000/organizations/search?lat_min=55.5&lat_max=56.6&lon_min=37.3&lon_max=38.4" \
-H "X-API-KEY: super-secret-key"🏢 Организации в здании
curl -X GET "http://localhost:8000/buildings/2/organizations" \
-H "X-API-KEY: super-secret-key"⚙️ Организации по виду деятельности (включая вложенные)
curl -X GET "http://localhost:8000/activities/3/organizations" \
-H "X-API-KEY: super-secret-key"📝 Детали организации по ID
curl -X GET "http://localhost:8000/organizations/1" \
-H "X-API-KEY: super-secret-key"docker-compose exec web pytestПокрываются:
- сервисные слои (business‑logic)
- маршруты API
# создание новой миграции
alembic revision -m "add new table"
# применение
alembic upgrade headЕгор Родионов