API для аналитика: практический гайд

Зачем аналитику API

  • Marketing data — выгрузить spend из Google Ads, Yandex Direct, Facebook.
  • Аналитические сервисы — получить данные из Mixpanel, Amplitude, GA.
  • Custom integrations — обогатить данные внешним источником.
  • Webhooks — получать события в реальном времени.

Без API аналитик ограничен данными в своей БД.

Что такое REST API

REST API — стандарт обмена данными через HTTP.

GET    https://api.example.com/users          # получить
GET    https://api.example.com/users/42       # одного
POST   https://api.example.com/users          # создать
PUT    https://api.example.com/users/42       # обновить
DELETE https://api.example.com/users/42       # удалить

Аналитик чаще всего делает GET (читать данные).

Базовый запрос в Python

import requests

response = requests.get('https://api.example.com/users')

if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f'Error: {response.status_code}')

Параметры

# Query params
response = requests.get(
    'https://api.example.com/orders',
    params={
        'date_from': '2026-04-01',
        'date_to': '2026-04-30',
        'status': 'paid'
    }
)
# URL: https://api.example.com/orders?date_from=2026-04-01&...

Аутентификация

API Key (header)

headers = {'Authorization': 'Bearer YOUR_API_KEY'}
response = requests.get('https://api.example.com/data', headers=headers)

Basic Auth

response = requests.get(
    'https://api.example.com/data',
    auth=('username', 'password')
)

OAuth (сложнее)

Для Google, Facebook — нужен access token, обычно через flow.

Pagination

API часто возвращает данные постранично:

all_data = []
page = 1
while True:
    r = requests.get('https://api.example.com/orders', params={'page': page, 'per_page': 100})
    data = r.json()
    if not data['results']:
        break
    all_data.extend(data['results'])
    page += 1

print(f'Total: {len(all_data)}')

Альтернативы: cursor-based, offset / limit.

Попробовать силы на подобных вопросах проще всего в тренажёре Карьерник — прямо в Telegram, без регистрации через сайт.

Обработка ошибок

try:
    response = requests.get('https://api.example.com/data', timeout=10)
    response.raise_for_status()  # бросит исключение при 4xx/5xx
    data = response.json()
except requests.exceptions.Timeout:
    print('Timeout')
except requests.exceptions.HTTPError as e:
    print(f'HTTP error: {e}')
except requests.exceptions.RequestException as e:
    print(f'Error: {e}')

Rate limiting

API ограничивают частоту запросов:

import time

for item in items:
    response = requests.get(f'https://api.example.com/items/{item}')
    process(response.json())
    time.sleep(0.1)  # 10 запросов в секунду

Для production — exponential backoff:

from time import sleep

def safe_request(url, max_retries=5):
    for i in range(max_retries):
        r = requests.get(url)
        if r.status_code == 429:  # rate limited
            sleep(2 ** i)
            continue
        return r

Загрузка данных в pandas

import pandas as pd
import requests

r = requests.get('https://api.example.com/orders')
df = pd.DataFrame(r.json()['results'])

Дальше работаете с pandas как обычно.

Запись в БД

from sqlalchemy import create_engine

engine = create_engine('postgresql://user:pass@host/db')
df.to_sql('orders_from_api', engine, if_exists='append', index=False)

Стандартный pipeline: API → pandas → БД.

Типичные API для аналитика

Marketing

  • Google Ads API — performance кампаний.
  • Facebook Marketing API.
  • Yandex Direct API.
  • TikTok Ads API.

Аналитика

  • Mixpanel API — events.
  • Amplitude API — cohorts.
  • GA4 API — Google Analytics.
  • PostHog API — open-source аналог.

CRM

  • HubSpot API.
  • Salesforce API.
  • AmoCRM API.

Финансы

  • Stripe API — платежи.
  • YooKassa API — для РФ.

POST для отправки данных

Реже, но бывает:

response = requests.post(
    'https://api.example.com/events',
    json={
        'user_id': 42,
        'event': 'analyzed',
        'timestamp': '2026-04-15T10:00:00'
    },
    headers={'Authorization': 'Bearer KEY'}
)

Пройти 30–50 задач по теме за вечер можно в Telegram-тренажёре. Это то, что отличает «знаю» от «уверенно отвечу на собесе».

Webhook vs polling

Polling — мы запрашиваем

Каждые N минут запрашиваем новые данные. Простой, но overhead.

Webhook — нам присылают

Сервис POST-ит на наш endpoint при событии. Эффективнее, но нужен endpoint.

Аналитики чаще используют polling.

Best practices

1. Не хардкодить API keys

# ❌
key = 'sk_live_xyz123'

# ✅
import os
key = os.environ['API_KEY']

2. Кэшировать ответы

Если запрос делается часто — кэшируйте:

import requests_cache
session = requests_cache.CachedSession('cache', expire_after=3600)

3. Логировать запросы

import logging
logging.info(f'Requesting {url} with params {params}')

4. Респектить rate limits

Не сжигайте quota за час. Это badly affect ваш аккаунт.

Postman / Insomnia

Перед написанием Python-кода — попробуйте API в Postman / Insomnia. UI инструменты для тестирования.

OpenAPI / Swagger

Хорошие API имеют документацию в OpenAPI формате. Можно сгенерировать клиент:

openapi-generator generate -i swagger.yaml -g python -o ./client

Читайте также

FAQ

Что такое 200, 401, 500?

HTTP статус-коды. 200 — OK, 401 — нет доступа, 404 — не найдено, 500 — ошибка сервера.

REST или GraphQL?

REST — стандарт, простой. GraphQL — гибче, но сложнее. Для аналитика обычно REST.

Сколько данных можно скачать?

Зависит от API. Обычно 1000-10000 запросов в день для бесплатных tiers.

Что делать, если API нет?

Скрейпинг (BeautifulSoup, Selenium). Но это серая зона — проверяйте Terms of Service.