Контракт Spring Cloud - ориентирован ли он на потребителя?

Я только начинаю с Consumer-Driven Contracts для нашей настройки микросервисов, и, поскольку они в основном являются приложениями Spring Boot, естественным выбором является Spring Cloud Contract. Но затем приходит путаница. Во всех примерах в документации контракты определены на стороне производителя, а потребитель извлекает их из репозитория maven. Как это зависит от потребителя, если производитель определяет их?

Насколько я понимаю, концептуально потребитель определяет их как ожидание от производителя части используемого им API. В дополнение к предыдущему вопросу, возможно ли с помощью Spring Cloud Contract определить контракт на стороне потребителя и проверить его на производителях?


person Vuk Djapic    schedule 01.08.2019    source источник


Ответы (1)


Спасибо за этот вопрос. Да, Spring Cloud Contract может быть ориентирован на потребителя или производителя.

Определения контрактов могут находиться либо у производителя, либо во внешнем репозитории. Понятие ориентированного на потребителя не связано с тем, где хранятся контракты. Это связано с тем, кто их создает или кто на самом деле вносит изменения в эти контракты. Другое дело, может ли каждый потребитель определить набор собственных требований. Это означает, что у одного потребителя могут быть разные требования, чем у другого.

Таким образом, в Spring Cloud Contract для подхода, ориентированного на производителя, производитель просто создает контракты, и ему все равно, используют ли разные потребители свой API по-разному. Производитель API создает, например, 1 определение контракта для всех потребителей, и проблема потребителя заключается в том, чтобы согласовать его с этим контрактом.

В контрактах, ориентированных на потребителя, с Spring Cloud Contract, именно потребитель предлагает изменения и создает определения контрактов. Потребитель отправляет PR либо в репо группы производителей, либо в отдельное репо, где хранятся все определения контрактов. Это делает не производитель, а потребитель. Тем временем потребитель может создавать заглушки локально, не спрашивая разрешения у производителя, и прототипировать API. После того, как потребитель закончил свою работу и, конечно же, поговорил с командой разработчиков об изменениях до этого, можно отправить запрос на вытягивание с предложенными изменениями. Важно помнить, что у каждого потребителя есть своя папка со своими требованиями. Например. если есть потребители example1 и example2 и есть производитель producer1, тогда в папке контракта producer1 будут две папки, одна example1 и вторая example2. Оба будут содержать ожидания для конкретного потребителя.

Затем производитель берет на себя PR, и проверка происходит на стороне производителя. Сгенерированы тесты. После того, как реализация написана и тесты пройдут, можно загружать заглушки.

Наконец, на стороне потребителя потребители могут переключиться, чтобы начать выборку загруженных заглушек, чтобы всегда получать свежую версию заглушек.

Все рабочие процессы, связанные с выполнением контрактных тестов с помощью Spring Cloud Contract, можно найти здесь - https://docs.spring.io/spring-cloud-contract/docs/current/reference/html/using.html#using

person Marcin Grzejszczak    schedule 01.08.2019
comment
Спасибо за подробный ответ. Есть ли где-нибудь полный код для этих руководств? - person Vuk Djapic; 05.08.2019
comment
Конечно, мы создаем руководство из примеров Spring Cloud Contract - github. ru / spring-cloud-samples / spring-cloud-contract-samples - person Marcin Grzejszczak; 05.08.2019
comment
Тем временем потребитель может создавать заглушки локально, не спрашивая разрешения у производителя, и прототипировать API. - Означает ли это повторное использование заглушки с прошлого раза? Или, может быть, изменить последний файл-заглушку от поставщика, обновить его изменениями, которые они ожидают увидеть у поставщика, а затем запустить его? - person Mugen; 29.03.2021
comment
Вы можете изменять существующие контракты, создавать новые и преобразовывать их в заглушки только для вашего локального использования. После того, как вы будете удовлетворены результатом, после надлежащего разговора с командой продюсеров вы можете заполнить PR с изменениями в контрактах. - person Marcin Grzejszczak; 29.03.2021