{"id":20645034,"url":"https://github.com/romanow/scc-microservices","last_synced_at":"2026-04-17T23:32:49.158Z","repository":{"id":146005719,"uuid":"223383858","full_name":"Romanow/scc-microservices","owner":"Romanow","description":null,"archived":false,"fork":false,"pushed_at":"2019-11-25T09:12:14.000Z","size":168,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-17T09:31:20.569Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Romanow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-22T10:50:32.000Z","updated_at":"2019-11-25T09:12:16.000Z","dependencies_parsed_at":"2023-05-24T22:14:01.295Z","dependency_job_id":null,"html_url":"https://github.com/Romanow/scc-microservices","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fscc-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fscc-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fscc-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Romanow%2Fscc-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Romanow","download_url":"https://codeload.github.com/Romanow/scc-microservices/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242714054,"owners_count":20173581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T16:18:29.460Z","updated_at":"2025-12-07T23:04:23.449Z","avatar_url":"https://github.com/Romanow.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Название: Consumer Driven Development в мире Java\n\n[![Build Status](https://cloud.drone.io/api/badges/Romanow/scc-microservices/status.svg)](https://cloud.drone.io/Romanow/scc-microservices)\n\n1. Проблемы интеграционного тестирования. (время ~10 минут).\u003cbr\u003e\nУ нас есть много микросервисов и при изменении поведения в одном мы хотим гарантировать, что не нарушается функциональность других. Два подхода:\n    1. Развертывание микросервисов:\n        1. требуется много ресурсов для прогона и в один момент времени возможен только один сценарий;\n        2. на поднятие всех сервисов требуется много времени;\n        3. очень сложно разбираться в ошибках.\n    2. Мокировать внешние сервисы:\n        1. при изменении протокола или поведения мы не можем быть уверены, что никто не отвалится.\n\n2. Contract driven development (CDD) (время ~10 минут +/- 5  минут, возможно здесь придется остановиться подробнее).\n    1. Мы создаем описание нашего контракта на Producer, по этому контракту генерируются unit-тесты на контроллеры. Тем самым мы гарантируем, что на Producer контроллеры обрабатывают именно такое API.\n    2. После этого описание заливается в nexus (или другое хранилище артефактов, возможно локальное) или в git.\n    3. На стороне Consumer поднимается легковесный сервер wiremock, для него указывается файл json, предоставленный Producer, в котором описаны запросы и ответы.\n\n3. Посмотрим, как это выглядит в действии: (20 минут). Пример.\u003cbr\u003e\nТри сервиса: склад (warehouse), заказы (order), доставка (delivery).\n    1. Warehouse публикует контракт:\n        - Получить информацию о всех вещах на складе\n        (GET /items?page=\\\u003cpage\u003e\u0026size=\\\u003csize\u003e)\n        - Зарезервировать заказ для пользователя\n        (POST /items/take (body: { itemUids: [] }))\n        - Получить информацию о вещи\n        (GET /items/{itemUid}/state)\n        - Выписать вещь со склада для доставки\n        (POST /items/{itemUid}/checkout)\n    2. Остальные сервисы на своей стороне реализуют этот контракт.\n    3. На сервисах Orders и Delivery реализуем контракт и пишем тесты.\n    4. Это все публикуем в gitlab и настраиваем зависимые сборки. Чтобы при изменении  в сервисе Warehouse контракт публиковался и вызывалась переборка и прогон тестов на других сервисах\n    5. Изменяем название полей, поведение методов, добавляем или удаляем поля в запрос и ответ. Любуемся что тесты на других сервисах упали.\n\n4. Есть еще один очень насущный вопрос в мире микросервисов – как бы отдать пользователю актуальную удобную документацию. Все, конечно, знают про OpenAPI, но  часто требуют наличие какой-то бумажной или офлайн-документации. Для этого существует rest-docs. Описание API генерируется по тестам на API, более того, во время работы проверяется, что все поля в запросе и ответе описаны в документированном описании.\nПолучается, что при описании в restdocs мы имеем практически описание контракта. (время 5 минут)\u003cbr\u003e\nПример модуля, где фигурирует описание restdocs, показать как по нему сгенерировать groovy dsl контракт. (время 10 минут)\u003cbr\u003e\nОбщее время 55 минут.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanow%2Fscc-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromanow%2Fscc-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromanow%2Fscc-microservices/lists"}