Skip to content
stormcat24 edited this page Aug 12, 2014 · 4 revisions

JSON APIでモックデータをレスポンスするためのドキュメントです。

project.yaml

project.yamlのajaxを設定すると、モックJSONデータをレスポンスすることができます。

ajax.root

モックJSONデータのルートディレクトリです。プロジェクトルートからの相対パスを指定します。

ajax:
  root: ./ajax

project_root/project.yamlの場合、project_root/ajax/がモックJSONデータのルートディレクトリとなります。

モックJSONデータファイル

モックJSONデータとして返すデータファイルはJSONとYAML形式に対応しています。どちらを選んでも良いですが、コメントが書けて仕様の共有面で利点があるYAMLを推奨しています。

project_root/ajax/api/test.yamlという以下のようなデータファイルを作ります。

project_root/ajax/api/test.yaml
title: test.yaml
hash:
  hashArray:
    -
      id: 1
      name: name1
    -
      id: 2
      name: name2
intArray:
  - 1
  - 2

これをAeromockでレスポンスするには、http://localhost:3183/api/testでリクエストします。データファイルの拡張子を除去したURLでリクエストしてください。

すると以下のようにtest.yamlがJSON形式に変換されてレスポンスされます。

{
    "title": "test.yaml",
    "hash": {
        "hashArray": [
            {
                "id": 1,
                "name": "name1"
            },
            {
                "id": 2,
                "name": "name2"
            }
        ]
    },
    "intArray": [
        1,
        2
    ]
}

ルート要素が配列

ルート要素が配列となるケースにも対応しています。

project_root/ajax/api/array.yaml
- element1
- element2
[
    "element1",
    "element2"
]

複数パターンデータ

同じURLのAPIに対して、複数パターンのデータを用意することができます。

project_root/ajax/api/test.yamlの違うパターンのデータファイルを、project_root/ajax/api/test__xxx.yamlという形式で作成します。xxx はデータを特定するための一意な識別子であり、任意の値を設定します。ここではtest__2.yamlとしましょう。

project_root/ajax/api/test__2.yaml
title: test__2.yaml
hash:
  hashArray:
    -
      id: 1
      name: name1
    -
      id: 2
      name: name2
intArray:
  - 1
  - 2

このデータをレスポンスするには、http://localhost:3183/api/test?_dataid=2 でリクエストします。

{
    "title": "test__2.yaml",
    "hash": {
        "hashArray": [
            {
                "id": 1,
                "name": "name1"
            },
            {
                "id": 2,
                "name": "name2"
            }
        ]
    },
    "intArray": [
        1,
        2
    ]
}

共通データファイル

モックJSONデータに横断的に組み込みたいようなデータがある場合、共通データファイルとして定義することができます。

プロジェクトルートディレクトリにajax.groovyというスクリプトファイルを用意します。ajax.groovyでは、リクエストの状況に応じてどの共通データファイルを利用するかという制御をすることができます。

共通データファイルとして、project_root/ajax/common/common.yamlを用意します。

project_root/ajax/common/common.yaml
commonProp: commonPropValue
commonHash:
  prop1: prop1Value

ajax.groovyでは共通データファイル(拡張子無し)のパスの配列を返すよう実装します。パスはモックJSONデータのルートが起点です。

ajax.groovy

return ["common/common"]

この例では、どのような場合でもproject_root/ajax/common/common.yamlが共通データファイルとして利用されます。共通データファイルが適用されたモックJSONデータは以下のようになります。

{
    "commonProp": "commonPropValue",
    "commonHash": {
        "prop1": "prop1Value"
    },
    "hash": {
        "hashArray": [
            {
                "id": 1,
                "name": "name1"
            },
            {
                "id": 2,
                "name": "name2"
            }
        ]
    },
    "intArray": [
        1,
        2
    ],
    "title": "test.yaml"
}

複数の共通データファイル

ajax.groovyが返す戻り値は配列となっているので、共通データファイルは複数設定することができます。

project_root/ajax.groovy
return ["common/common", "common/common2"]

データファイルのプロパティの上書き

共通データファイルを利用する場合、プロパティ名の衝突が発生します。この場合は、最後に適用されたデータファイルのプロパティで上書きされます。

データファイルの適用順は、共通データファイルの配列定義順 → 各データファイルとなります。

共通データファイルのプロパティに追記

共通データファイルのプロパティを上書きではなく追記したい場合、追加する方に__additional: trueという特殊なプロパティを設定することで追記が可能です。

例として、project_root/ajax/common/common.yamlのcommonHashにプロパティを追加してみましょう。

project_root/ajax/api/additional.yaml
title: additional.yaml
commonHash:
  __additional: true
  prop2: prop2Value

以下のように、commonHashにprop2がマージされた形式でレスポンスされます。

{
    "commonProp": "commonPropValue",
    "commonHash": {
        "prop1": "prop1Value",
        "prop2": "prop2Value"
    },
    "title": "additional.yaml"
}

ビルトイン変数

ajax.groovy内では、Aeromockで定義されているビルトイン変数を参照することができます。ビルトイン変数ではREQUEST_URIUSER_AGENT等でリクエストの情報を参照できるので、これらの変数を使って適用する共通データを動的に変えるというテクニックが使えます。

カスタムレスポンス

任意のレスポンスコードやレスポンスヘッダ返すことができます。データファイルに__responseという特殊なプロパティを設定します。

ステータスコードが400、2つの特殊なヘッダを追加してレスポンスしてみましょう。これを実現するには、データファイルに__responseを定義し、codeとheadersのプロパティを設定します。

project_root/ajax/api/custom_response.yaml
title: custom_response.yaml
__response:
  code: 400
  headers:
    X-Aeromock-Header1: aeromock-header1
    X-Aeromock-Header2: aeromock-header2

custom_response

Clone this wiki locally