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