> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# サーバーSDK: Python、Node.js、Go、Java、PHP、Ruby、.NET

> 型付きの公式SDKを使えば、DiditのサーバーAPIをバックエンドから呼び出せます。インストール対応表、設定、エラー、再試行、バージョニング、サポートポリシーを解説します。

サーバーSDKは、バックエンド向けのDidit公式ライブラリです。各SDKは、型付きのリクエストとレスポンスで[APIリファレンス](https://docs.didit.me/ja/api-reference/overview.md)のサーバーエンドポイントを呼び出し、Diditから送信されるWebhookを検証し、[Didit Authentication](https://docs.didit.me/ja/authentication/overview.md)のトークンを確認します。Google Walletの2つのエンドポイント、[Google Wallet検証の開始](https://docs.didit.me/ja/api-reference/digital-id-wallets/google-wallet.md)と[ウォレットレスポンスの送信](https://docs.didit.me/ja/standalone-apis/digital-id-wallet-response.md)は、まだどの1.0.1リリースにも含まれていません。Python、Node.js、Java、PHP、Ruby、.NETの各SDKには、それ以外のすべてのサーバーエンドポイントが含まれています。Go 1.0.1にはさらに9つのエンドポイントがなく、その大半はトラベルルールのエンドポイントです。[Go SDKにまだないエンドポイント](https://docs.didit.me/ja/integration/server-sdks/go.md#go-sdkにまだないエンドポイント)を参照してください。

DiditのAPIキーを保持するコードでは、どこでもサーバーSDKを使用します。たとえば、検証セッションの作成、判定の取得、スタンドアロンAPIの呼び出し、ユーザー・企業・ワークフロー・ケースの管理、取引とウォレットのスクリーニング、トラベルルールなどです。ブラウザやモバイルアプリでは、代わりに[Web](https://docs.didit.me/ja/integration/web-sdks/overview.md)SDKと[ネイティブ](https://docs.didit.me/ja/integration/native-sdks/overview.md)SDKを使用してください。これらはユーザーに検証フローを表示し、APIキーを保持することはありません。

[APIリファレンス](https://docs.didit.me/ja/api-reference/overview.md)のサーバーエンドポイントのページ([データベース検証](https://docs.didit.me/ja/standalone-apis/database-validation.md)のサービスページを含む)には、cURLリクエストと並んで各サーバーSDKのコードサンプルが表示されます。サンプルが表示されるのは、そのSDKの最新リリースに、エンドポイントとサンプルが送信するすべてのフィールドが含まれている場合です。APIに追加されたエンドポイントやフィールドのサンプルは、各SDKの次回リリースで追加されます。1.0.1の生成後に追加された`vin`や`bank_account_number`などデータベース検証の16個のリクエストフィールドは、どの1.0.1リリースにも含まれていないため、これらを送信するサービスページにはcURLのみが表示されます。

## インストール

```bash Python theme={null}
pip install didit-sdk
```

```bash Node.js theme={null}
npm install @didit-protocol/sdk-node
```

```bash Go theme={null}
go get github.com/didit-protocol/sdk-go
```

```kotlin Java theme={null}
implementation("me.didit:didit-java:1.0.1")
```

```bash PHP theme={null}
composer require didit-protocol/sdk-php guzzlehttp/guzzle
```

```bash Ruby theme={null}
gem install didit-sdk
```

```bash .NET theme={null}
dotnet add package Didit
```

| 言語 | パッケージ | ソース | 最小ランタイム |
| - | - | - | - |
| [Python](https://docs.didit.me/ja/integration/server-sdks/python.md) | [PyPI `didit-sdk`](https://pypi.org/project/didit-sdk/) | [sdk-python](https://github.com/didit-protocol/sdk-python) | Python 3.10 |
| [Node.jsとTypeScript](https://docs.didit.me/ja/integration/server-sdks/node.md) | [npm `@didit-protocol/sdk-node`](https://www.npmjs.com/package/@didit-protocol/sdk-node) | [sdk-node](https://github.com/didit-protocol/sdk-node) | Node.js 18、Bun、Deno、`fetch`を備えたエッジランタイム |
| [Go](https://docs.didit.me/ja/integration/server-sdks/go.md) | [Goモジュール `github.com/didit-protocol/sdk-go`](https://pkg.go.dev/github.com/didit-protocol/sdk-go) | [sdk-go](https://github.com/didit-protocol/sdk-go) | Go 1.22 |
| [JavaとKotlin](https://docs.didit.me/ja/integration/server-sdks/java.md) | [Maven Central `me.didit:didit-java`](https://central.sonatype.com/artifact/me.didit/didit-java) | [sdk-java](https://github.com/didit-protocol/sdk-java) | Java 11 |
| [PHP](https://docs.didit.me/ja/integration/server-sdks/php.md) | [Packagist `didit-protocol/sdk-php`](https://packagist.org/packages/didit-protocol/sdk-php) | [sdk-php](https://github.com/didit-protocol/sdk-php) | PHP 8.1 |
| [Ruby](https://docs.didit.me/ja/integration/server-sdks/ruby.md) | [RubyGems `didit-sdk`](https://rubygems.org/gems/didit-sdk) | [sdk-ruby](https://github.com/didit-protocol/sdk-ruby) | Ruby 3.1 |
| [C#と.NET](https://docs.didit.me/ja/integration/server-sdks/dotnet.md) | [NuGet `Didit`](https://www.nuget.org/packages/Didit) | [sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) | .NET 8または.NET Standard 2.0 |

## 設定

すべてのSDKは同じ環境変数を読み込むため、オプションなしで作成したクライアントをそのまま使用できます。エッジランタイムにはプロセス環境がないため、APIキーをオプションとしてNode.jsクライアントに渡してください。

| 変数 | 用途 |
| - | - |
| `DIDIT_API_KEY` | APIキーを使うすべての呼び出し。キーはコンソールの[APIキー](https://docs.didit.me/ja/console/api-keys.md)で作成します。 |
| `DIDIT_ORGANIZATION_ID`、`DIDIT_APPLICATION_ID` | `/v3/organization/{organization_id}/application/{application_id}/`配下の操作(ケース、ネットワーク、規制レポート、レポートテンプレート、および一部のユーザー・企業向けツール)。SDKはクライアントからパスの両IDを補完するため、呼び出しごとに渡す必要はありません。これらが設定されていない場合、該当する呼び出しはリクエストを送信する前に失敗します。 |
| `DIDIT_LOG=debug` | すべてのリクエストのメソッド、パス、ステータス、所要時間、リクエストIDをログに記録します。ボディとヘッダーが記録されることはありません。 |

環境変数で設定できる項目はすべてクライアントにも渡せます。加えて、ベースURL、タイムアウト、再試行、デフォルトヘッダー、独自のHTTPクライアントも指定できます。クライアントはプロセスごとに1つ作成して共有してください。クライアントはコネクションプールを保持し、複数のスレッドやタスクから安全に使用できます。

`account`メソッド([プログラムによる登録](https://docs.didit.me/ja/integration/programmatic-registration.md): 登録、サインイン、組織、アプリケーション)は`https://apx.didit.me/auth/v2`を呼び出し、APIキーを送信することはありません。`account.login`でサインインし、返されたアクセストークンをアカウントトークンとしてクライアントに渡してください。

## すべてのSDKに共通する機能

* **リソースとメソッド。** 呼び出しはAPIのリソースに沿って`client.<resource>.<method>(...)`の形式で行います。たとえば`sessions.create`、`sessions.retrieve_decision`、`transactions.create`などで、表記は各言語の命名規則に従います。パスのIDは位置引数で、ボディとクエリは1組の名前付きフィールドとして渡します。Python、Node.js、PHP、RubyはAPIのフィールド名(`workflow_id`)をそのまま使用し、Go、Java、.NETは各言語の命名規則(`WorkflowID`、`workflowId`、`WorkflowId`)を使用します。
* **リスト。** リストメソッドはすべての結果を自動でページングし(内部では`limit`と`offset`を使用)、各ページについても`count`、`next`、`previous`、`results`を提供します。Rubyでは`auto_paging_each`ですべてのページを順に処理でき、ページの`total_count`、`next_url`、`previous_url`はAPIの`count`、`next`、`previous`に対応します。
* **ファイル。** アップロード(書類画像、セルフィー、住所証明、インポート)には、パス、バイト列、ストリームのいずれかを渡せます。ダウンロード(セッションのPDF、レポート)はバイト列またはストリームを返し、パース済みのJSONを返すことはありません。
* **前方互換性。** SDKのバージョンがまだ認識しないレスポンスフィールドや列挙値は、エラーにはならず、保持されて読み取り可能です。そのため、APIに項目が追加されても、デプロイ済みの連携が壊れることはありません。
* **Webhook。** `webhooks.verify`は、Webhookシークレットを使って配信の`X-Signature-V2`ヘッダーと`X-Signature`ヘッダー、およびタイムスタンプを確認し、型付きのイベントを返します。シークレットのローテーション中は、シークレットのリストを渡せます。署名方式については[Webhook](https://docs.didit.me/ja/integration/webhooks.md)を参照してください。
* **認証。** `Authentication`ヘルパーは、Authenticationの発行者が署名したアクセストークンとIDトークンを検証し、そのトークン、セッション、ステップアップの各エンドポイントを呼び出します。APIキーを使用することはありません。

## エラー・再試行・タイムアウト

| エラー | 発生条件 |
| - | - |
| `APIConnectionError`、`APITimeoutError` | レスポンスが届かなかった場合 |
| `APIStatusError` | その他の2xx以外のレスポンス。ステータス、解析済みのボディ、ヘッダー、リクエストIDを含みます |
| `BadRequestError` 400、`AuthenticationError` 401、`PermissionDeniedError` 403、`NotFoundError` 404、`ConflictError` 409、`UnprocessableEntityError` 422、`RateLimitError` 429、`InternalServerError` 5xx | `APIStatusError`のサブクラス |
| `WebhookVerificationError` | Webhookの配信が検証に失敗した場合。`reason`に理由が示されます |
| `ConfigurationError` | APIキー、アカウントトークン、組織ID、またはアプリケーションIDが指定されていない場合 |

すべてのエラーは`DiditError`を継承します。Goでは、すべてのエラーが`didit.Error`インターフェースを実装し、`*didit.NotFoundError`のようなポインタ型になります。Java、PHP、.NETでは、各言語の慣例に従って`Exception`接尾辞を付け、`API`を`Api`と表記します（`DiditException`、`ApiStatusException`、`NotFoundException`）。

SDKは失敗したリクエストを最大2回再試行します。0.5秒から始まる指数バックオフ（フルジッター、最大8秒）を使用し、`Retry-After`に従います。`GET`、`HEAD`、`PUT`、`DELETE`は、接続エラー、タイムアウト、408、429、5xxの場合に再試行されます。`POST`と`PATCH`は、429の場合、またはリクエスト送信前に接続が失敗した場合にのみ再試行されるため、再試行によって2件目のセッションや取引が作成されることはありません。デフォルトのタイムアウトは60秒です。すべてのレスポンスでは、生のHTTPステータス、ヘッダー、リクエストIDも参照できます。429の原因となる制限については[レート制限](https://docs.didit.me/ja/integration/rate-limiting.md)を参照してください。

## バージョニングとサポート

* SDKはセマンティックバージョニングに従います。エンドポイントがAPIから削除された場合やメソッド名が変更された場合、旧メソッドは非推奨としてマークされたうえで少なくとももう1つ先のマイナーバージョンまで残るため、新しいメソッドへ移行する間もコードはビルドできます。
* SDKは公開されているAPI仕様（[`openapi-25.json`](https://docs.didit.me/openapi-25.json)と[`openapi-auth.json`](https://docs.didit.me/openapi-auth.json)）から生成され、毎日その仕様を確認しているため、新しいエンドポイントやフィールドは7つすべてのSDKの通常リリースで提供されます。
* 各SDKは、表に記載された最小ランタイムとそれ以降のすべてのリリースをサポートします。テストは最小ランタイムとそれ以降の各リリース（Node.jsとJavaでは各長期サポートリリース）で実行されます。
* 各リポジトリの`CHANGELOG.md`に、すべてのリリースの変更内容が記載されています。
* セキュリティ上の問題は、SDKリポジトリのセキュリティアドバイザリーを通じて非公開で報告するか、[support@didit.me](mailto:support@didit.me)までご連絡ください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.