Первая версия для доклада:
- v1: RestTemplate + OkHttp, самописные DTO/клиенты (этот проект)
- v2: API-first + Feign + codegen
- v3: API-first + HttpServiceClients + codegen
GET /api/v1/decision/{userId} вызывает 2 смежника:
- Profile API: профиль пользователя
- Scoring API: скоринг пользователя Затем возвращает решение: APPROVE / REJECT.
- Два разных стека для двух интеграций:
- Profile → RestTemplate + ручной маппинг Map→DTO
- Scoring → OkHttp raw + ручной JSON parsing + retry
- Корреляция (
X-Correlation-Id) прокидывается вручную только в RestTemplate. В OkHttp-клиенте её забыли (типичный баг). - Ошибки отличаются по форме: RestTemplate vs OkHttp (RuntimeException после retry).
- Таймауты задаются по-разному и живут в разных местах.
docker compose up --buildWireMock: http://localhost:9090
App: http://localhost:8080
curl -s http://localhost:8080/api/v1/decision/42 | jqcurl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?profileDelayMs=120&scoringDelayMs=120&profileFail=false&scoringFail=false' | jqcurl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?profileDelayMs=120&scoringDelayMs=800' | jqcurl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?scoringFail=true' | jq- Profile:
/profile/api/users/{id}?delayMs=...&fail=... - Scoring:
/scoring/api/score/{id}?delayMs=...&fail=...