外部サービス連携
関連ドキュメント
- HTTP Request Executor - リトライ制御と認証設定
- Mapping Functions 開発ガイド - データ変換の詳細(19個のFunction)
このドキュメントの目的
HttpRequestExecutorとMapping Functionsを使って、外部APIと連携する機能を実装できるようになることが目標です。
所要時間
⏱️ 約30分(実装 + テスト)
前提知識
- 03. 共通実装パターン
- Mapping Functions 開発ガイド - リクエスト/レスポンス変換
HttpRequestExecutorとは
外部HTTPサービスと連携するための統合クライアント。
機能:
- ✅ HTTP GET/POST/PUT/DELETE
- ✅ OAuth 2.0認証
- ✅ HMAC認証
- ✅ リトライ・タイムアウト設定
- ✅ 冪等性保証
実装例: 外部身元確認サービス連携
外部の身元確認API(KYC: Know Your Customer)と連携する例。
Step 1: HttpRequest設定作成
ファイル: libs/idp-server-core/src/main/java/org/idp/server/core/identity/verification/ExternalVerificationService.java
package org.idp.server.core.identity.verification;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.idp.server.platform.httpclient.*;
import org.idp.server.platform.converter.JsonConverter;
public class ExternalVerificationService {
private final HttpRequestExecutor httpRequestExecutor;
private final JsonConverter converter = JsonConverter.snakeCaseInstance();
public ExternalVerificationService(HttpRequestExecutor httpRequestExecutor) {
this.httpRequestExecutor = httpRequestExecutor;
}
/**
* 外部APIで身元確認実行
*
* @param user ユーザー情報
* @return 確認結果
*/
public VerificationResult verify(User user) {
// 1. リクエストボディ作成
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("user_id", user.identifier().value());
requestBody.put("name", user.name());
requestBody.put("email", user.email().value());
requestBody.put("date_of_birth", user.dateOfBirth());
// 2. HttpRequest設定
HttpRequest httpRequest = HttpRequest.builder()
.url("https://external-kyc-service.com/api/v1/verify")
.method(HttpMethod.POST)
.headers(Map.of(
"Content-Type", "application/json",
"Accept", "application/json"
))
.body(converter.write(requestBody))
.build();
// 3. 認証設定(OAuth 2.0)
OAuth2Configuration oAuth2Config = OAuth2Configuration.builder()
.tokenEndpoint("https://external-kyc-service.com/oauth/token")
.clientId("your-client-id")
.clientSecret("your-client-secret")
.scope(Set.of("kyc:verify"))
.build();
// 4. リトライ設定
RetryConfiguration retryConfig = RetryConfiguration.builder()
.maxRetries(3)
.retryableStatusCodes(Set.of(502, 503, 504))
.idempotencyRequired(true)
.backoffDelays(List.of(
Duration.ofSeconds(1),
Duration.ofSeconds(2),
Duration.ofSeconds(4)
))
.build();
// 5. HTTP実行設定
HttpRequestExecutionConfig executionConfig = HttpRequestExecutionConfig.builder()
.httpRequest(httpRequest)
.oauth2Configuration(oAuth2Config)
.retryConfiguration(retryConfig)
.timeout(Duration.ofSeconds(30))
.build();
// 6. 実行
HttpRequestResult result = httpRequestExecutor.execute(executionConfig);
// 7. レスポンス解析
if (result.isSuccess()) {
Map<String, Object> responseBody = converter.read(result.responseBody());
String status = (String) responseBody.get("status");
String verificationId = (String) responseBody.get("verification_id");
return VerificationResult.success(verificationId, status);
} else {
return VerificationResult.failure(result.errorMessage());
}
}
}
Step 2: 認証パターン
OAuth 2.0認証
OAuth2Configuration oAuth2Config = OAuth2Configuration.builder()
.tokenEndpoint("https://external-service.com/oauth/token")
.clientId("your-client-id")
.clientSecret("your-client-secret")
.scope(Set.of("api:read", "api:write"))
.grantType("client_credentials") // デフォルト: client_credentials
.build();