← Java

Конспект і таймкоди

0:00

Від manual models до specification-driven generation

Без API docs можна згенерувати POJO з observed JSON, але це лише semi-automatic recovery. З OpenAPI specification можна відтворювано генерувати models і API client через Gradle/Maven/CLI.

Specification містить metadata, servers, paths, operations, schemas і response/error definitions. Swagger UI — лише projection цієї специфікації; code generator працює з machine-readable JSON/YAML.

10:00

Gradle task: input, output і generator config

В build configuration задаються specification URL/file, output directory, generator/language, package names і config options. Окрема task спочатку отримує spec, потім генерує sources.

Вихід кладеться в build/, а не редагується вручну. Так generator залишається build product, а не другим source of truth.

20:00

Generated source sets і clean builds

Gradle і IDE мають знати, що generated directory є Java source root. IDE indexing може вимагати explicit generated-source marking, але command-line build не має залежати від manual IDE action.

clean видаляє generated output, а build відновлює його зі specification. Це перевіряє, що repository не приховує uncommitted/manual fixes generated code.

30:00

Вибір Java client library

Java generator може будувати client на різних HTTP libraries. Відео експериментує з RestTemplate та RestAssured, пояснюючи, що library choice впливає на generated signatures, exceptions і dependencies.

Немає універсального найкращого client. Для tests важливі controllable requests, raw negative responses, logging/masking і compatibility з project stack.

Demo показує real failures: missing generated client, incompatible Spring types, Jackson/Gson annotations, date/time mappings і auxiliary dependencies. Проблема не завжди у spec — generator version, selected library і dependency graph мають суміщатися.

Потрібно pin generator version, зберігати config у repository і перевіряти clean generation в CI. Якщо generated code вимагає постійних manual edits, generator не виконує свою роль.

1:00:00

Models-only generation і API product thinking

Після проблем з full client відео показує простіший варіант: generate models, а transport залишити під контролем test code. Це зберігає schema checking без складного generated client runtime.

Актуальна specification також робить API придатним для external consumers. Це не лише testing concern, а product capability: onboarding, SDK generation і integration cost.

Generated success client не завжди зручний для negative tests. API має повертати standardized error model з code, message і diagnostic fields, щоб frontend і tests могли відрізнити конкретні failures в межах одного HTTP status.

Test-generated correlation/trace ID передається у header, логується і додається до report. Тоді розробник знаходить повний distributed trace для failed test, а не шукає за приблизним timestamp.

1:30:00

IntelliJ Live Templates як local code generation

Live Templates генерують repetitive test annotations, Allure steps і method skeletons. Вони доречні для stable project conventions, а не для business logic.

Шаблони можна зберігати в project settings і розділяти з командою. Якщо convention змінилася, template також має змінитися; generated boilerplate не слід розмножувати без review.

1:40:00

Full client чи models-only: ціна володіння

Фінальний вибір залежить від company culture і delivery pipeline. Full generated client зменшує manual code, але вимагає generator upgrades, artifact publication, versioning і failure recovery.

Models-only часто дає кращий баланс для test project: schema types генеруються, request/response handling залишається explicit. Повний client варто додавати, коли його maintenance cost нижчий за duplicated manual clients.