Перейти к основному содержимому
Didit привлёк $7,5 млн на инфраструктуру для идентификации и борьбы с мошенничеством
Didit
В блог
Блог · 6 марта 2026 г.

Повышение производительности: Асинхронный Python для Didit API и вебхуков (RU)

Узнайте, как asyncio в Python может революционизировать вашу интеграцию с API и вебхуками Didit, обеспечивая высокопроизводительную верификацию личности и эффективную обработку данных.

Автор: DiditОбновлено
python-asyncio-didit-api-webhooks.png

Оптимизируйте взаимодействие с APIИспользуйте asyncio в Python для неблокирующих вызовов к Didit API, значительно повышая пропускную способность для верификации личности и уменьшая задержки при высокообъемных операциях.

Эффективная обработка вебхуковВнедряйте асинхронные обработчики вебхуков для обработки входящих событий Didit без блокировки, гарантируя, что ваше приложение остается отзывчивым и может масштабироваться для обработки многочисленных параллельных уведомлений.

Управляйте ограничениями скоростиПонимайте и эффективно управляйте ограничениями скорости Didit API, используя асинхронные методы и интеллектуальные стратегии экспоненциальной задержки, предотвращая перебои в обслуживании и обеспечивая надежный обмен данными.

Преимущество Didit, основанное на ИИПлатформа Didit разработана для высокой производительности и удобства для разработчиков, предлагая программную регистрацию и надежные API, которые идеально дополняют асинхронное программирование для масштабируемых, управляемых ИИ решений для идентификации.

Потребность в скорости: почему асинхронное программирование важно для идентификации

В современном быстро меняющемся цифровом мире приложения требуют мгновенных ответов. Независимо от того, регистрируете ли вы новых пользователей, обрабатываете транзакции или проверяете личность, задержки могут привести к потере клиентов и доходов. Проверка личности, в частности, часто включает в себя несколько вызовов API — для проверки документов, обнаружения живости или сверки со списками наблюдения. Синхронные вызовы API, когда ваша программа ждет завершения каждого запроса, прежде чем перейти к следующему, могут быстро стать узким местом, особенно при работе с большими объемами.

Именно здесь проявляется асинхронное программирование, в частности, asyncio в Python. Позволяя вашему приложению инициировать несколько задач одновременно без блокировки основного потока выполнения, asyncio обеспечивает значительно более высокую пропускную способность и отзывчивость. Для интеграции с мощными платформами идентификации, такими как Didit, которые предлагают надежные API для проверки личности, пассивной и активной проверки живости, сопоставления лиц 1:1 и AML-скрининга, использование asyncio – это не просто оптимизация, это необходимость для создания масштабируемых, высокопроизводительных систем.

Представьте себе сценарий, когда тысячи пользователей пытаются зарегистрироваться одновременно. Каждая регистрация требует нескольких проверок личности. При синхронных вызовах ваш сервер будет обрабатывать их по одному, что приведет к длинным очередям и разочарованию пользователей. С asyncio ваше приложение может инициировать все эти проверки почти одновременно, ожидая результатов по мере их готовности, что значительно улучшит пользовательский опыт и общую пропускную способность системы.

Реализация асинхронных вызовов API к Didit

Асинхронная интеграция с Didit API включает использование HTTP-клиента, который поддерживает asyncio, такого как httpx или aiohttp. Эти библиотеки позволяют отправлять запросы без блокировки, что делает их идеальными для сценариев с высокой пропускной способностью.

Рассмотрим распространенный случай использования: инициирование нескольких сеансов проверки личности. API Didit разработан для эффективности, и с asyncio вы можете максимизировать это. Например, создание сеансов проверки через POST /v3/session/ может быть выполнено параллельно. Каждый сеанс может включать проверку личности Didit (OCR, MRZ, штрих-коды) или пассивную и активную проверку живости.


import asyncio
import httpx

async def create_didit_session(api_key: str, user_id: str):
    url = "https://apx.didit.me/v3/sessions/"
    headers = {"x-api-key": api_key, "Content-Type": "application/json"}
    payload = {"external_id": user_id, "flow_id": "your_flow_id"}
    
    async with httpx.AsyncClient() as client:
        response = await client.post(url, headers=headers, json=payload)
        response.raise_for_status()  # Raise an exception for bad status codes
        return response.json()

async def main():
    didit_api_key = "YOUR_DIDIT_API_KEY"
    user_ids = [f"user_{i}" for i in range(100)] # Simulate 100 users

    tasks = [create_didit_session(didit_api_key, user_id) for user_id in user_ids]
    results = await asyncio.gather(*tasks, return_exceptions=True)

    for i, result in enumerate(results):
        if isinstance(result, Exception):
            print(f"Error creating session for user_{user_ids[i]}: {result}")
        else:
            print(f"Session created for user_{user_ids[i]}: {result['session_id']}")

if __name__ == "__main__":
    asyncio.run(main())

Этот пример демонстрирует, как создать 100 сеансов проверки одновременно. Каждый вызов create_didit_session является ожидаемой сопрограммой. asyncio.gather запускает их все параллельно, значительно сокращая общее время по сравнению с последовательным выполнением.

Асинхронная обработка вебхуков Didit для обновлений в реальном времени

Вебхуки имеют решающее значение для получения обновлений в реальном времени от Didit, информируя вашу систему о завершении проверки личности, результате AML-скрининга или исходе проверки подтверждения адреса. Когда Didit отправляет уведомление вебхука, ваше приложение должно обработать его быстро, не блокируя последующие входящие вебхуки. Для этого необходим асинхронный обработчик вебхуков.

Типичный асинхронный веб-фреймворк Python, такой как FastAPI или Aiohttp, идеально подходит для создания асинхронного получателя вебхуков. Когда Didit отправляет вебхук (например, уведомление о завершении сеанса), ваш обработчик может разобрать полезную нагрузку, проверить подпись с помощью secret_shared_key, полученного из конфигурации вебхука Didit, а затем поставить обработку события в фоновую задачу или очередь сообщений, не задерживая HTTP-ответ обратно в Didit.


from fastapi import FastAPI, Request, HTTPException
import hmac
import hashlib
import asyncio

app = FastAPI()
WEBHOOK_SECRET = "whsec_a1b2c3d4e5f6g7h8i9j0..." # Get this from Didit webhook config

async def process_didit_event(event_data: dict):
    # Simulate asynchronous processing, e.g., updating database, notifying users
    print(f"Processing Didit event: {event_data['event_type']} for session {event_data['session_id']}")
    await asyncio.sleep(2) # Simulate I/O bound task
    print(f"Finished processing event for session {event_data['session_id']}")

@app.post("/didit-webhook")
async def didit_webhook(request: Request):
    signature = request.headers.get("X-Didit-Signature")
    if not signature:
        raise HTTPException(status_code=400, detail="Missing X-Didit-Signature header")

    body = await request.body()
    
    # Verify webhook signature (important for security)
    expected_signature = hmac.new(WEBHOOK_SECRET.encode('utf-8'), body, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(signature, expected_signature):
        raise HTTPException(status_code=403, detail="Invalid webhook signature")

    event_data = await request.json()
    
    # Process event asynchronously in the background
    asyncio.create_task(process_didit_event(event_data))
    
    return {"status": "received", "message": "Event accepted for processing"}

Этот пример FastAPI показывает, как быстро подтвердить вебхук, а затем переложить фактическую обработку с помощью asyncio.create_task. Это гарантирует, что ваша конечная точка вебхука останется высокодоступной и отзывчивой, даже если обработка отдельных событий занимает некоторое время. Конфигурация вебхука Didit позволяет указать webhook_url и webhook_version, что упрощает настройку безопасной и надежной доставки событий.

Управление ограничениями скорости с помощью асинхронных стратегий

Ограничения скорости API являются критически важным фактором для любой интеграции с высокой пропускной способностью. Didit, как и любой надежный поставщик API, применяет ограничения скорости для поддержания стабильности. Понимание и корректная обработка этих ограничений крайне важны для предотвращения ошибок 429 Too Many Requests и обеспечения непрерывной работы.

Didit предоставляет четкие заголовки ограничений скорости (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After) в своих ответах. С помощью asyncio вы можете реализовать сложные стратегии ограничения скорости, такие как экспоненциальная задержка с джиттером и алгоритмы токен-бакета, не блокируя все ваше приложение.


import asyncio
import httpx
import time

async def make_rate_limited_request(client: httpx.AsyncClient, url: str, headers: dict, payload: dict, retries: int = 5):
    for attempt in range(retries):
        response = await client.post(url, headers=headers, json=payload)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 2 ** attempt)) # Exponential backoff
            print(f"Rate limit hit. Retrying in {retry_after} seconds...")
            await asyncio.sleep(retry_after)
        else:
            response.raise_for_status()
            return response.json()
    raise Exception("Max retries exceeded for rate-limited request.")

async def main_rate_limited():
    didit_api_key = "YOUR_DIDIT_API_KEY"
    url = "https://apx.didit.me/v3/sessions/"
    headers = {"x-api-key": didit_api_key, "Content-Type": "application/json"}
    
    async with httpx.AsyncClient() as client:
        tasks = []
        for i in range(150): # Simulate exceeding a 300 rpm limit with 150 tasks
            payload = {"external_id": f"user_{i}", "flow_id": "your_flow_id"}
            tasks.append(make_rate_limited_request(client, url, headers, payload))
        
        results = await asyncio.gather(*tasks, return_exceptions=True)
        for i, result in enumerate(results):
            if isinstance(result, Exception):
                print(f"Request {i} failed: {result}")
            else:
                print(f"Request {i} succeeded: {result.get('session_id')}")

if __name__ == "__main__":
    asyncio.run(main_rate_limited())

Этот пример показывает асинхронную стратегию экспоненциальной задержки. Когда получен код 429, сопрограмма ожидает указанное время Retry-After (или экспоненциально увеличивающееся время), прежде чем повторить попытку, при этом не блокируя другие параллельные задачи. Глобальные ограничения Didit (300 запросов в минуту для каждого приложения для конечных точек GET/Write/Delete) и ограничения для конкретных конечных точек (например, 600 запросов в минуту для POST /v2/session/) четко документированы, что позволяет вам соответствующим образом проектировать свои асинхронные клиенты.

Как Didit помогает создавать высокопроизводительные решения для идентификации

Архитектура Didit изначально разработана для поддержки высокопроизводительных операций, что делает ее идеальным партнером для асинхронных интеграций. Наша платформа предлагает несколько ключевых преимуществ:

  • Ориентированный на разработчика и основанный на ИИ: Didit предоставляет чистые API и исчерпывающую документацию, что упрощает интеграцию с asyncio Python. Наш подход, основанный на ИИ, означает, что сложные задачи проверки личности, от проверки ID до пассивной и активной проверки живости, эффективно обрабатываются на нашей стороне, позволяя вашему приложению просто ожидать результатов.
  • Модульные примитивы идентификации: Модульный дизайн Didit позволяет вам выбирать именно те проверки личности, которые вам нужны. Будь то проверка ID (OCR, MRZ), сопоставление лиц 1:1 или подтверждение адреса, каждый примитив доступен через высокопроизводительный API, идеально подходящий для параллельных вызовов.
  • Программная регистрация: В отличие от многих платформ, Didit допускает программную регистрацию, даже для агентов ИИ. Вы можете получить учетные данные API всего за два вызова API, полностью без участия пользователя, не открывая браузер. Это минимизирует трение при настройке и обеспечивает автоматизированное, крупномасштабное развертывание вашей инфраструктуры идентификации.
  • Оркестрированные рабочие процессы: Механизм Didit без кода позволяет оркестрировать сложные рабочие процессы KYC, уменьшая количество отдельных вызовов API, которыми ваше приложение должно управлять, при этом извлекая выгоду из асинхронной обработки общего результата сеанса.
  • Бесплатный базовый KYC и гибкое ценообразование: Didit предлагает бесплатный базовый KYC, что позволяет начать работу без предварительных затрат. Наша модель оплаты за успешную проверку и отсутствие платы за настройку означают, что вы платите только за то, что используете, что идеально соответствует масштабируемым архитектурам, основанным на использовании, обеспечиваемым асинхронной обработкой.

Объединив мощь Python asyncio с надежным и удобным для разработчиков API Didit, вы можете создавать системы проверки личности, которые не только безопасны и соответствуют требованиям, но и невероятно быстры и масштабируемы, способные справляться с требованиями современного цифрового бизнеса.

Готовы начать?

Готовы увидеть Didit в действии? Получите бесплатную демонстрацию сегодня.

Начните бесплатно проверять личности с помощью бесплатного уровня Didit.

Инфраструктура для идентификации и борьбы с мошенничеством.

Единый API для KYC, KYB, мониторинга транзакций и проверки кошельков. Интеграция за 5 минут.

Попросите ИИ кратко изложить эту страницу
Python Asyncio для Didit API и вебхуков с высокой.