🔨
AWS API GatewayのModelをテストデータから自動生成する①
概要
とっても便利なAWS API GatewayのModel機能ですが、JSON Schemaを自分で用意する必要があります。
JSON Schemaを生成するツールも沢山あるようです。
今回自分は単体で動いていたlambda(+ API Gateway)をプロキシ統合する際にJSON Schemaが必要となり、テストデータから自動生成してみました。
テストデータのみから生成するので、required
とかは一旦考えていません。
実装
create_gateway_model.py
import sys
import json
import re
import pyperclip
def snake2CamelCase(s):
return re.sub("_(.)", lambda m:m.group(1).upper(), s.lower())
def t(x):
if type(x) == bool:
return { "type": "boolean" }
elif type(x) == str:
return { "type": "string" }
elif type(x) == float:
return { "type": "number" }
elif type(x) == int:
return { "type": "integer" }
elif type(x) == dict:
p = {}
for k in x.keys():
p[k] = t(x[k])
return { "type": "object", "properties": p }
elif type(x) == list: # use the type of the first element
return { "type": "array", "items": t(x[0]) }
args = sys.argv
file_name = args[1]
with open(file_name, 'r') as f:
s = f.read()
d = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": snake2CamelCase(name) + "Document",
"type": "object"
}
d.update(t(json.loads(s)))
o = json.dumps(d, indent=4)
print(o)
pyperclip.copy(o)
おまけにクリップボードにコピーまでしました
ToDo
いずれrequired
とかも生成したいですね
Discussion