メインコンテンツへスキップ
Diditが750万ドルを調達、本人確認と不正対策のインフラを構築
Didit
ブログ一覧へ
ブログ2026年3月7日

Python AsyncioでDidit APIのスループットを最大化する

PythonのAsyncioを活用して、Diditの本人確認APIを利用するアプリケーションのスループットと効率を劇的に向上させる方法をご紹介します。.

By Didit更新日
Um pássaro estilizado com asas e corpo em tons de dourado e azul, com padrões de circuito, voando para cima e para a direita, sobre um fundo gradiente de branco e azul claro.

API消費の最適化: Python AsyncioはノンブロッキングI/O操作を可能にし、Diditのような本人確認サービスへの多数のAPIコールを行うアプリケーションの効率を大幅に向上させます。

レート制限の管理: Asyncioを活用して洗練されたレート制限戦略を実装し、DiditのAPI制限内に収めることで、429エラーを防ぎ、高スループットシナリオでの継続的なサービス可用性を確保します。

スケーラブルなソリューションの構築: Asyncioの並行処理モデルを利用して、高いインフラコストをかけることなく、毎秒数千件の本人確認リクエストを処理できる堅牢でスケーラブルなシステムを設計します。

DiditのAPIファーストの利点: DiditのクリーンなAPIと即時サンドボックスを備えた開発者ファーストのアプローチは、非同期フレームワークとの統合に理想的であり、本人確認から生体認証まで、シームレスで高性能な本人確認ワークフローを可能にします。

スピードの必要性:API利用にAsyncioが不可欠な理由

今日のペースの速いデジタル世界では、アプリケーションはその機能を果たすために多数の外部APIコールを実行する必要があることがよくあります。これらのコールがブロッキング、つまりアプリケーションが次の処理に進む前に各応答を待機する場合、パフォーマンスのボトルネックがすぐに発生します。これは、単一のユーザーオンボーディングフローに複数のAPIインタラクション(ID検証、受動的および能動的生体認証チェック、1:1顔照合、AMLスクリーニングなど)が含まれる本人確認サービスでは特に顕著です。ユーザー数が多いビジネスの場合、これらの連続した操作は大幅な遅延とユーザーエクスペリエンスの低下につながる可能性があります。

Pythonのasyncioライブラリは、async/await構文を使用して並行コードを記述するための堅牢なフレームワークを提供します。CPUバウンドなタスクでグローバルインタープリタロック(GIL)のような複雑さを引き起こす可能性がある従来のマルチスレッドとは異なり、asyncioはI/Oバウンドな操作向けに設計されています。APIコールは本質的にI/Oバウンド(ネットワーク応答を待機する)であるため、asyncioはアプリケーションが外部APIを効率的に利用する能力を大幅に向上させる理想的な候補となります。API応答を待機している間にプログラムが他のタスクを実行できるようにすることで、asyncioはアプリケーションのアーキテクチャを分散システムに完全に書き換えることなく、スループットを劇的に向上させることができます。

DiditのAPI環境とレート制限の理解

AIネイティブの本人確認プラットフォームであるDiditは、ID検証(OCR、MRZ、バーコード)、受動的および能動的生体認証、1:1顔照合、AMLスクリーニング&モニタリングなど、包括的な本人確認APIスイートを提供しています。当社のAPIは高性能と信頼性を追求して設計されていますが、すべての堅牢なAPIと同様に、安定性とすべてのクライアント間での公平な利用を確保するためにレート制限を採用しています。これらの制限を理解することは、高スループットのコンシューマーにとって不可欠です。

Diditは、グローバルおよびエンドポイント固有の両方のレート制限を適用します。例えば、グローバル制限は通常、GETおよび書き込み/削除エンドポイントの両方で、アプリケーションごとに1分あたり300リクエストです。より厳格な制限は、影響の大きい操作に適用されます。例えば、POST /v2/session/(検証ワークフローの作成用)は600 RPM、GET /v2/session/<id>/decision/(セッション決定の取得用)は100 RPMです。これらの制限を超過すると、APIは429 Too Many Requestsステータスコードを返します。これには、バックオフ戦略の指針となるX-RateLimit-LimitX-RateLimit-Remaining、およびRetry-After(エポック秒)などの役立つヘッダーも含まれます。

asyncioを実装することで、これらのレート制限をはるかに効果的に管理できます。制限に達する単一のブロッキングスレッドの代わりに、非同期アプリケーションはリクエストをインテリジェントにキューに入れ、指数関数的バックオフを実装し、アプリケーション全体のフローをブロックすることなく失敗したコールを再試行できます。これにより、API利用がよりスムーズになり、中断が少なくなり、ピーク時でも本人確認プロセスが中断されないことが保証されます。

並行Didit API呼び出しのためのAsyncioの実装

asyncioをDiditのAPIと統合するには、aiohttpのような非同期HTTPクライアントを使用します。非同期APIコールをどのように構成するか、概念的な概要を以下に示します。


import asyncio
import aiohttp
import time

API_KEY = "YOUR_DIDIT_API_KEY"
BASE_URL = "https://verification.didit.me/v3/"

async def call_didit_api(session, endpoint, payload=None, method='POST'):
    headers = {
        'accept': 'application/json',
        'x-api-key': API_KEY
    }
    if method == 'POST':
        headers['content-type'] = 'application/json'

    url = f"{BASE_URL}{endpoint}"
    
    async with session.request(method, url, json=payload, headers=headers) as response:
        if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', '5'))
            print(f"Rate limit hit. Retrying after {retry_after} seconds...")
            await asyncio.sleep(retry_after) # Implement simple backoff
            return await call_didit_api(session, endpoint, payload, method) # Retry
        response.raise_for_status()
        return await response.json()

async def create_verification_session(session, workflow_id, user_id):
    endpoint = "session/"
    payload = {
        "workflow_id": workflow_id,
        "vendor_data": user_id,
        "callback": "https://your-app.com/didit-callback"
    }
    return await call_didit_api(session, endpoint, payload, method='POST')

async def get_session_decision(session, session_id):
    endpoint = f"session/{session_id}/decision/"
    return await call_didit_api(session, endpoint, method='GET')

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        # Example: Create 10 verification sessions concurrently
        for i in range(10):
            tasks.append(create_verification_session(session, "YOUR_WORKFLOW_ID", f"user_{i}"))
        
        results = await asyncio.gather(*tasks)
        for res in results:
            print(f"Created session: {res.get('session_id')}")

        # Example: Retrieve decisions for some sessions concurrently
        decision_tasks = []
        for res in results[:5]: # Take first 5 for decision retrieval
            session_id = res.get('session_id')
            if session_id:
                decision_tasks.append(get_session_decision(session, session_id))
        
        decision_results = await asyncio.gather(*decision_tasks)
        for decision in decision_results:
            print(f"Session decision: {decision}")

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

この例では、複数の検証セッションを同時に作成し、その決定を取得する方法を示しています。call_didit_api関数には、429 Too Many Requestsに対する基本的な再試行メカニズムが含まれており、Retry-Afterヘッダーを使用して指数関数的バックオフを実装しています。本番システムでは、より洗練されたバックオフおよびサーキットブレーカーパターンが推奨されますが、これはコア原則を示しています。

asyncio.gatherを使用することで、複数のAPIリクエストを同時に開始でき、アプリケーションが他のタスクを処理したり、応答を並行して待機したりすることが可能になり、シーケンシャルなブロッキングコールと比較して大幅なパフォーマンス向上が期待できます。

高ボリュームの本人確認のための戦略

Asyncioを使用してDidit APIで高いスループットを達成するには、リクエストを並行して実行するだけでは不十分です。以下の戦略を検討してください。

  • スマートバッチ処理: Diditの主要な検証は多くの場合ユーザーによって開始されますが、AMLモニタリングや特定のデータ検索などの操作では、該当する場合にバッチ処理を可能にするワークフローを設計し、APIコールの総数を減らすことができます。
  • 適応型レート制限: 単純な指数関数的バックオフを超えて、X-RateLimit-Remainingを監視し、asyncioタスクの並行処理レベルを動的に調整する適応型レートリミッターを実装します。残りの呼び出しが少ない場合は速度を落とし、多い場合は速度を上げます。
  • Webhook駆動の更新: セッション結果(ID検証や生体認証チェック後など)については、過度なポーリングではなく、DiditのWebhookに依存してください。これにより、/v2/session/<id>/decision/へのGETリクエストの数が減り、このエンドポイントには100 RPMというより厳格なレート制限があります。Diditのモジュール式アーキテクチャにより、さまざまなステータス変更に対してWebhook通知を設定でき、絶えずクエリを実行することなく、リアルタイムの更新をシステムにプッシュできます。
  • エラー処理と可観測性: ネットワークの問題、APIエラー(429以外)、タイムアウトに対する堅牢なエラー処理を実装します。再試行がトリガーされた場合やレート制限に常に達している場合は、ログに記録したりアラートを出したりします。これにより、API利用戦略を最適化するための重要な洞察が得られます。
  • リソース管理: aiohttp.ClientSessionインスタンスを慎重に管理します。リクエストごとに新しいセッションを作成することは、接続オーバーヘッドのために非効率です。複数のリクエストに対して単一のセッションを再利用することが一般的により良いプラクティスです。

Diditが提供するもの

Diditは、開発者と高性能アプリケーションのためにゼロから構築されており、Python Asyncioの実装にとって理想的なパートナーです。当社のモジュール式アーキテクチャにより、ID検証、受動的および能動的生体認証、1:1顔照合、AMLスクリーニングなどの本人確認チェックを必要に応じてプラグアンドプレイで利用でき、それぞれクリーンで十分に文書化されたAPIを介してアクセスできます。このモジュール性により、特定のニーズに合わせて複雑な検証ワークフローをオーケストレーションし、非同期技術を使用してその利用を最適化することができます。

私たちは本人確認を身近なものにすることを目指しており、そのため無料のコアKYCを提供しています。これにより、事前の費用なしで非同期統合を試行し、構築することができます。当社のAIネイティブのアプローチは、検証サービスが高速かつ正確であることを保証し、Asyncioの速度上の利点を完璧に補完します。セットアップ費用なし、成功したチェックごとの支払いモデルにより、Diditは高スループットの本人確認を実装しようとしている企業にとって費用対効果が高く、スケーラブルなソリューションを提供します。当社の即時サンドボックス環境と包括的なAPIドキュメントは、開発者がDiditのサービスの使用を迅速に統合し最適化することをさらに可能にし、新しいシステムを構築している場合でも既存のシステムを強化している場合でも対応します。

始める準備はできましたか?

Diditの実際の動作をご覧になりたいですか? 今すぐ無料デモをリクエストしてください。

Diditの無料ティアで、無料で本人確認を開始しましょう。

本人確認と不正対策のインフラ。

KYC、KYB、取引監視、ウォレットスクリーニングを一つのAPIで。5分で統合できます。

AIにこのページの要約を依頼する
Python AsyncioでDidit APIのスループットを向上させる方法.