API例外の実装—Flaskドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/patterns/apierrors
移動先:案内検索

API例外の実装

Flaskの上にRESTfulAPIを実装することは非常に一般的です。 開発者が最初に遭遇することの1つは、組み込みの例外がAPIに対して十分に表現力がなく、彼らが発行している text / html のコンテンツタイプがAPIコンシューマーにとってあまり役に立たないという認識です。

abortを使用して無効なAPIの使用に関するエラーを通知するよりも優れた解決策は、独自の例外タイプを実装し、ユーザーが期待する形式でエラーを生成するエラーハンドラーをインストールすることです。

単純な例外クラス

基本的な考え方は、人間が読める適切なメッセージ、エラーのステータスコード、およびエラーのコンテキストを増やすためのオプションのペイロードを受け取ることができる新しい例外を導入することです。

これは簡単な例です。

from flask import jsonify

class InvalidUsage(Exception):
    status_code = 400

    def __init__(self, message, status_code=None, payload=None):
        Exception.__init__(self)
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload

    def to_dict(self):
        rv = dict(self.payload or ())
        rv['message'] = self.message
        return rv

ビューは、エラーメッセージとともにその例外を発生させることができるようになりました。 さらに、ペイロードパラメーターを使用して、追加のペイロードを辞書として提供できます。


エラーハンドラーの登録

その時点で、ビューはそのエラーを発生させる可能性がありますが、すぐに内部サーバーエラーが発生します。 これは、このエラークラスにハンドラーが登録されていないためです。 ただし、これは簡単に追加できます。

@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
    response = jsonify(error.to_dict())
    response.status_code = error.status_code
    return response

ビューでの使用法

ビューがその機能を使用する方法は次のとおりです。

@app.route('/foo')
def get_foo():
    raise InvalidUsage('This view is gone', status_code=410)