52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
import json
|
|
|
|
with open(r'docs/openapi_検証.json', encoding='utf-8') as f:
|
|
api = json.load(f)
|
|
|
|
def resolve_ref(ref):
|
|
parts = ref.lstrip('#/').split('/')
|
|
obj = api
|
|
for p in parts:
|
|
obj = obj[p]
|
|
return obj
|
|
|
|
def resolve_schema(schema, depth=0):
|
|
if depth > 3:
|
|
return schema
|
|
if '$ref' in schema:
|
|
return resolve_schema(resolve_ref(schema['$ref']), depth+1)
|
|
if schema.get('type') == 'array' and 'items' in schema:
|
|
schema = dict(schema)
|
|
schema['items'] = resolve_schema(schema['items'], depth+1)
|
|
if 'properties' in schema:
|
|
schema = dict(schema)
|
|
schema['properties'] = {k: resolve_schema(v, depth+1) for k, v in schema['properties'].items()}
|
|
return schema
|
|
|
|
# /post/lists の200レスポンス
|
|
resp = api['paths']['/post/lists']['get']['responses']['200']
|
|
schema = resolve_schema(resp['content']['application/json']['schema'])
|
|
print('=== GET /post/lists Response 200 ===')
|
|
print(json.dumps(schema, ensure_ascii=False, indent=2)[:3000])
|
|
|
|
print()
|
|
|
|
# /post/{post_id} の200レスポンス
|
|
resp2 = api['paths']['/post/{post_id}']['get']['responses']['200']
|
|
schema2 = resolve_schema(resp2['content']['application/json']['schema'])
|
|
print('=== GET /post/{post_id} Response 200 ===')
|
|
print(json.dumps(schema2, ensure_ascii=False, indent=2)[:4000])
|
|
|
|
print()
|
|
|
|
# serversの確認
|
|
print('=== Servers ===')
|
|
print(json.dumps(api.get('servers', []), ensure_ascii=False, indent=2))
|
|
|
|
# componentsのparametersでよく使うものを確認
|
|
print()
|
|
print('=== Key Parameters ===')
|
|
for key in ['Authorization', 'date_from', 'date_to', 'limit_50', 'offset']:
|
|
param = api['components']['parameters'].get(key, {})
|
|
print(f'{key}: in={param.get("in")}, name={param.get("name")}, schema={param.get("schema")}')
|