# Getting Started

## Install Prerequisites

{% hint style="warning" %}
Start your installations before the presentation begins so that the dependencies are able to download before we start the workshop.
{% endhint %}

Install docker :

* Mac: `https://docs.docker.com/docker-for-mac/install/`&#x20;
* Window: `https://docs.docker.com/docker-for-windows/install/`&#x20;
* Linux: `https://docs.docker.com/install/linux/docker-ce/ubuntu/`

Pull docker images:

```
$ docker pull springcloud/spring-cloud-contract:2.1.1.RELEASE
$ docker pull springcloud/spring-cloud-contract-stub-runner:2.1.1.RELEASE
```

Install Node: `https://nodejs.org/en/`

Clone Repos:

```
$ git clone https://github.com/angularkc/contract-driven-development.git
$ git clone https://github.com/wkorando/produce-contracts.git
```

## Client-Side Developers

From the root of `contract-driven-development` run the following:

```
$ npm install
```

## Server-Side Developers

From the root of `contract-driven-development` run the following:

```
$ cd produce-service
$ ./mvnw package
```

Currently the contract of `addProduce.yml` is always sending the same response, ignoring the contents of the request the client is sending. Spring Cloud Contract can allow contracts to be more dynamic, for example allow fields within the response to pull from the request. Let's update `addProduce.yml` to do this. &#x20;

Update POST contract to respond with request body

Every service is going to be composed of many different contracts. Defining how an API should respond to a given request. It's important that we not only define what happens for successful responses, but unsuccessful ones as well. Currently we have a contract `findProduceByName.yml` that defines what happens when a client successful searches for a subset of produce. Let's write a contract for when a client sends an invalid search request that has special characters in it.&#x20;
