52

PythonとFlaskを使用してRESTfulAPIを設計しています。予想どおり、APIはAPIリクエストを受信し、すべてがうまくいけばデータを返す必要がありますが、エラーが発生した場合は、ソフトに失敗して適切なエラーを返す必要があります。私は通常、エラーが発生したときに例外を発生させますが、この場合、エラーメッセージをユーザーに返す必要があります(try-catchブロック?)。

現在エラーを処理している方法は、関数にデータとエラーの両方を返させ、各レベルでデータをチェックして、最終的にデータまたはエラーのいずれかをAPI関数の呼び出し元に返すことです。

これに伴う問題は、関数呼び出しのレベルが複数ある場合に煩雑になる可能性があり、関数がデータとエラーを数回渡し、毎回チェックを実行する必要があることです。

これを行うためのより良い方法はありますか?エラーの伝播をよりシンプルでエレガントにするためにできる改善点は何ですか?

これが私が現在エラーを返す方法の例です:

def get_data()
    data1, error = get_some_data() # function not shown
    if data1 is None:
         return None, "could not retrieve data1"
    data2, error = get_some_other_data() # function not shown
    if data2 is None:
         return None, "could not retrieve data2"
    return (data1, data2), None

@app.route("/api/method", methods=['GET'])
def method():
    data, error = get_data()
    if data is None:
        if error is None:
            error = "unknown error"
        return json.dumps({ "error": error }), 500
    return json.dumps({ "data": data }), 200
4

2 に答える 2

47

を使用abort(http_code)して、適切なhttpコードをクライアントに返すか、http以外の例外を発生させることができます。また、@app.errorhandler()デコレータを使用して、httpエラーと任意の例外のカスタムハンドラを提供します。例外を処理する準備ができている場合は、通常のtry/exceptブロックを使用することもできます。PythonはGoではありません。例外を使用できます。

于 2012-09-27T21:43:55.687 に答える
4

特にRESTfulAPI用に設計されているため、 FlaskAPIの方がニーズに適している可能性があります。

Flaskよりも優れた例外処理があります。http ://www.flaskapi.org/api-guide/exceptions/を参照してください。

于 2014-11-21T07:02:12.577 に答える