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

Python AsyncioでDidit APIのスループットを向上させる方法 (JA-1)

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

By Didit更新日
boost-didit-api-throughput-with-python-asyncio.png

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

レート制限の習得: Asyncioで高度なレート制限戦略を実装し、DiditのAPI制限内に留まることで、429エラーを防ぎ、高スループットシナリオでの継続的なサービス可用性を確保します。

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

DiditのAPIファーストの利点: Diditのデベロッパーファーストのアプローチは、クリーンなAPIと即時サンドボックスを提供し、非同期フレームワークとの統合に理想的です。これにより、ID確認から顔認証まで、シームレスで高性能な本人確認ワークフローが可能になります。

スピードの必要性:なぜAPI消費にAsyncioなのか?

今日のペースの速いデジタル世界では、アプリケーションはその機能を果たすために多数の外部APIコールを実行する必要があることがよくあります。これらのコールがブロッキング、つまりアプリケーションが次の処理に進む前に各応答を待つ場合、パフォーマンスのボトルネックがすぐに発生します。これは、1つのユーザーオンボーディングフローに複数の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の実装

DiditのAPIとasyncioを統合するには、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関数には、指数バックオフを実装するためにRetry-Afterヘッダーを使用する、429 Too Many Requestsに対する基本的な再試行メカニズムが含まれています。本番システムでは、より洗練されたバックオフおよびサーキットブレーカーパターンが推奨されますが、これは核心的な原則を示しています。

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のスループットを最大化.