私はFlask-Inputsと呼ばれるこのためのライブラリを書いています。
Colander と同様に、スキーマを定義し、それらに対して入力を検証します。@Sean Vieiraの提案と同様に、検証のためにWTFormsに依存しています。
内部的には、すべてのrequest
入力データを MultiDicts に変換します。WTForms と同様に、カスタム バリデーターを定義できます (組み込みのカスタム バリデーターの 1 つはrequest.json
データ用で、検証には jsonschema を使用します)。
パブリック API に投稿されたデータに対して検証を実行しているように聞こえるので、API キーと投稿された JSON 検証の例を次に示します。
from flask_inputs import Inputs
from flask_inputs.validators import JsonSchema
schema = {
'type': 'object',
'properties': {
'name': {'type': 'string'}
}
}
class ApiInputs(Inputs):
headers = {
'Authorization': [DataRequired(), valid_api_key]
}
json = [JsonSchema(schema=schema)]
次に、ルートで:
@app.route('/api/<version>/endpoint')
def endpoint():
inputs = ApiInputs(request)
if not inputs.validate():
return jsonify(success=False, errors=inputs.errors)
私が見つけた最大の利点 (本番環境で使用) は、すべてのエラーを 1 か所で表示できることです。すべての受信データをカバーする優れたバリデーターは、本番環境での多くの予期しない/未定義の動作を防ぎます。