-
Notifications
You must be signed in to change notification settings - Fork 11
03.03.JSON API
JSON APIでモックデータをレスポンスするためのドキュメントです。
project.yamlのajaxを設定すると、モックJSONデータをレスポンスすることができます。
モックJSONデータのルートディレクトリです。プロジェクトルートからの相対パスを指定します。
ajax:
root: ./ajax
project_root/project.yamlの場合、project_root/ajax/がモックJSONデータのルートディレクトリとなります。
jsonp_callback_name
でJSONP用のコールバックパラメータ名を設定すると、設定されたパラメータをつけてリクエストされた場合JSONP(application/javascript)のレスポンスを返します。
ajax:
root: ./ajax
jsonp_callback_name: callback
http://localhost:3183/test?callback=callbackFunc
callbackFunc({"param":"value"})
モックJSONデータとして返すデータファイルはJSONとYAML形式に対応しています。どちらを選んでも良いですが、コメントが書けて仕様の共有面で利点がある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
]
}
ルート要素が配列となるケースにも対応しています。
- element1
- element2
[
"element1",
"element2"
]
同じURLのAPIに対して、複数パターンのデータを用意することができます。
project_root/ajax/api/test.yamlの違うパターンのデータファイルを、project_root/ajax/api/test__xxx.yamlという形式で作成します。xxx
はデータを特定するための一意な識別子であり、任意の値を設定します。ここでは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
]
}
HTTPメソッドで利用するデータファイルを変えることができます。データファイル名に__HTTPメソッド名
をつけるだけです。HTTPメソッドが指定されていない場合はGETになります。以下に例を示します。
リクエストURI | HTTPメソッド | クエリストリング | データファイル |
---|---|---|---|
/test | GET | - | test.yaml or test__get.yaml |
/test | POST | - | test__post.yaml |
/test | PUT | - | test__put.yaml |
/test | DELETE | - | test__delete.yaml |
/test | GET | _dataid=2 | test__2.yaml or test__get__2.yaml |
/test | POST | _dataid=2 | test__post__2.yaml |
/test | PUT | _dataid=2 | test__put__2.yaml |
/test | DELETE | _dataid=2 | test__delete__2.yaml |
モックJSONデータに横断的に組み込みたいようなデータがある場合、共通データファイルとして定義することができます。
プロジェクトルートディレクトリにajax.groovyというスクリプトファイルを用意します。ajax.groovyでは、リクエストの状況に応じてどの共通データファイルを利用するかという制御をすることができます。
共通データファイルとして、project_root/ajax/common/common.yamlを用意します。
commonProp: commonPropValue
commonHash:
prop1: prop1Value
ajax.groovyでは共通データファイル(拡張子無し)のパスの配列を返すよう実装します。パスはモックJSONデータのルートが起点です。
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が返す戻り値は配列となっているので、共通データファイルは複数設定することができます。
return ["common/common", "common/common2"]
共通データファイルを利用する場合、プロパティ名の衝突が発生します。この場合は、最後に適用されたデータファイルのプロパティで上書きされます。
データファイルの適用順は、共通データファイルの配列定義順 → 各データファイルとなります。
共通データファイルのプロパティを上書きではなく追記したい場合、追加する方に__additional: true
という特殊なプロパティを設定することで追記が可能です。
例として、project_root/ajax/common/common.yamlのcommonHashにプロパティを追加してみましょう。
title: additional.yaml
commonHash:
__additional: true
prop2: prop2Value
以下のように、commonHashにprop2がマージされた形式でレスポンスされます。
{
"commonProp": "commonPropValue",
"commonHash": {
"prop1": "prop1Value",
"prop2": "prop2Value"
},
"title": "additional.yaml"
}
ajax.groovy内では、Aeromockで定義されているビルトイン変数を参照することができます。ビルトイン変数ではREQUEST_URI
やUSER_AGENT
等でリクエストの情報を参照できるので、これらの変数を使って適用する共通データを動的に変えるというテクニックが使えます。
任意のレスポンスコードやレスポンスヘッダ返すことができます。データファイルに__response
という特殊なプロパティを設定します。
ステータスコードが400、2つの特殊なヘッダを追加してレスポンスしてみましょう。これを実現するには、データファイルに__responseを定義し、codeとheadersのプロパティを設定します。
title: custom_response.yaml
__response:
code: 400
headers:
X-Aeromock-Header1: aeromock-header1
X-Aeromock-Header2: aeromock-header2