WireMockのレスポンスマッピングファイルの書き方まとめ

# 概要
WireMockのレスポンスマッピングファイルの書き方についてまとめます。
```
root
 ┣ __files
 ┃  ┗ response.json
 ┃
 ┗ mappings
    ┗ request.json <-- 該当ファイル
```

# リクエストファイルの内容について
リクエストファイルは以下のような内容で記述されます。
```json:request.json
{
    "request": {
        "urlPath": "/sample",
        "method": "ANY"
        "queryParameters": {
            "sample": {
                "equalTo": "WireMock"
            }
        }
        "bodyPatterns": [
            {
                "equalToJson": "{ "request_params": 4 }"
            }
        ]
    },
    "response": {
            "status": 404,
            "bodyFileName": "response.json",
            "headers": {
                    "Content-Type": "application/json"
            },
           "transformers": ["response-template"]
    }
}
```

request内のURLの書き方として以下の要素があります。
| Key | 一致条件
| --- | --- |
| url | 記載された値に完全一致 |
| urlPattern | 正規表現を含めて一致 |
| urlPath | 記載された値に完全一致 |
| urlPathPattern | 正規表現を含めて一致 |
| urlPathTemplate | パスパラメータを定義して一致 |

## url
```json:request.json
{
    "request": {
        "url": "/api/12345",
        "method": "GET"
    },
    :
}
```

上記の場合は、urlのvalueに定義された `/api/12345` にアクセスした時のみレスポンスが返されます。
クエリパラメータなどをつけてアクセスした場合は一致しません。

## urlPattern
```json:request.json
{
    "request": {
        "urlPattern": "/api/(\\d{5})",
        "method": "GET"
    },
    :
}
```
この場合、URL内に正規表現が使用できます。
`/api/12345` や `/api/98765` にアクセスした場合にレスポンスが返されます。
クエリパラメータなどをつけてアクセスした場合は一致しません。

## urlPath
```json:request.json
{
    "request": {
        "urlPath": "/api/sample",
        "method": "GET"
    },
    :
}
```
この場合は、 `/api/sample` にアクセスした場合とクエリパラメータをつけた場合にレスポンスが返されます。
`/api/sample?parameter=1234` といった場合でもレスポンスが返されます。


## urlPathPattern
```json:request.json
{
    "request": {
        "urlPathPattern": "/api/(\\d{5})/sample",
        "method": "GET"
    },
    :
}
```
この場合は、URL内に正規表現が使用できます。
`/api/12345/sample` にアクセスした場合とクエリパラメータをつけた場合にレスポンスが返されます。
`/api/12345/sample?parameter=1234` といった場合でもレスポンスが返されます。

## urlPathTemplate
```json:request.json
{
    "request": {
        "urlPathPattern": "/api/{id}/sample",
        "method": "GET",
        "pathParameters": {
            "id": {
                "equalTo": "12345"
            }
        }
    },
    :
}
```

この場合は、URL内のパスパラメータを別で定義することができます。
`/api/12345/sample` のようにアクセスした場合にレスポンスが返されます。
`PathParameters` を定義しないことで、idには特に制限をしないことも可能です。
(定義しない場合、一部記号などを入力するとエラーになることもあります。)

### パラメータの一致条件の書き方
#### pathParameters 、queryParameters
`pathParameters`や`queryParameters`の一致条件は以下の通りです。
| Key | Value　|
| -- | -- | 
| equalTo | 完全一致する値 |
| matches | 正規表現で一致する値 |
| doesNotMatch | 正規表現で一致しない値 |
| contains | 部分一致する値 |
| doesNotContain | 含まない値 |

#### bodyPatterns
POSTなどのリクエストボディを定義する場合は、`bodyPatterns`を使用します。
| Key | Value |
| -- | -- |
| equalToJson | 完全一致するJSON |
| matchesJsonPath | "$.name" などのようにJSON内に存在するキー |

#### AND条件やOR条件
AND条件やOR条件以下のように記述します。
```json:request.json
{
    "request": {
        "urlPathPattern": "/api/{id}/sample",
        "method": "GET",
        "pathParameters": {
            "id": {
                "or" [
                    {
                        "equalTo": "12345"
                    },
                    {
                        "equalTo": "45678"
                    }
                ]
            }
        }
    },
    :
}
```

組み合わせによってうまくアクセスできないこともありますが、基本的なことは上記の通りです。