概要
直接 swagger.yml の情報を Python のコードにも書けるのですが今回は YAML ファイルは分離して動かしてみたいと思います
環境
- macOS X 10.13.6
- Python 3.6.5
- flasgger 0.9.0
インストール
- pipenv install flasgger
swagger.yml 作成
- vim test.yml
parameters:
- name: palette
in: path
type: string
enum: ['all', 'rgb', 'cmyk']
required: true
default: all
definitions:
Palette:
type: object
properties:
palette_name:
type: array
items:
$ref: '#/definitions/Color'
Color:
type: string
responses:
200:
description: A list of colors (may be filtered by palette)
schema:
$ref: '#/definitions/Palette'
examples:
rgb: ['red', 'green', 'blue']
アプリ作成
- vim test.py
from flask import Flask, jsonify
from flasgger import Swagger
from flasgger.utils import swag_from
app = Flask(__name__)
Swagger(app)
@app.route('/colors/<palette>/')
@swag_from('test.yml')
def index(palette):
all_colors = {
'cmyk': ['cian', 'magenta', 'yellow', 'black'],
'rgb': ['red', 'green', 'blue']
}
if palette == 'all':
result = all_colors
else:
result = {palette: all_colors.get(palette)}
return jsonify(result)
app.run(debug=True)
単純な JSON を返却するだけのアプリです
定義した test.yml はデコレーションを使って参照します
@swag_from('test.yml')
Swagger(app)
することで swagger UI と JSON を参照できるようにしています
あとは @app.route('/colors/<palette>/')
デコレーションでルーティングを定義します
<palette>
は関数内で変数として参照することができます
実行
- pipenv run python3 test.py
localhost:5000
でアプリ起動します
動作確認
curl http://localhost:5000/colors/all/
で以下のレスポンスが返ってきます
{
"cmyk": [
"cian",
"magenta",
"yellow",
"black"
],
"rgb": [
"red",
"green",
"blue"
]
}
http://localhost:5000/apidocs/
にアクセスすると swagger UI が表示されます
最後に
Python3 + flasgger を使って swagger.yml ファイルからアプリを作成してみました
これが基本的な使い方になると思います
少し気になったのはコントローラの分離方法です
やり方がわかったらこの辺りも紹介したいと思います
0 件のコメント:
コメントを投稿