Skip to content

Repository files navigation

integration-evolution v1 - RestTemplate + OkHttp, самописные DTO и клиенты (Java 21, Spring Boot 4)

Первая версия для доклада:

  1. v1: RestTemplate + OkHttp, самописные DTO/клиенты (этот проект)
  2. v2: API-first + Feign + codegen
  3. 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 --build

WireMock: http://localhost:9090
App: http://localhost:8080

Демо запросы

1) Happy-path

curl -s http://localhost:8080/api/v1/decision/42 | jq

2) Diagnostics (OK/ERROR по каждому смежнику)

curl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?profileDelayMs=120&scoringDelayMs=120&profileFail=false&scoringFail=false' | jq

3) Показать задержку scoring (OkHttp)

curl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?profileDelayMs=120&scoringDelayMs=800' | jq

4) Показать ошибку scoring (503)

curl -s -H 'X-Correlation-Id: demo-123' \
'http://localhost:8080/api/v1/decision/42/diagnostics?scoringFail=true' | jq

WireMock endpoints

  • Profile: /profile/api/users/{id}?delayMs=...&fail=...
  • Scoring: /scoring/api/score/{id}?delayMs=...&fail=...

Автор

Eugene Suleimanov Software Engineering Telegram

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages