PythonとFlaskを使用してRESTful APIを設計しています。 APIが正常に機能している場合は、APIリクエストを受信してデータを返す必要がありますが、エラーが発生した場合は、エラーが発生した場合は、エラーが発生したときにエラーが発生します。私は通常、エラーが発生したときに例外を発生させますが、この場合はエラーメッセージをユーザーに返す必要があります(try-catchブロック?)。PythonとFlaskでAPIエラーメッセージを返す
私が現在エラーを処理しているのは、関数がデータとエラーの両方を返し、各レベルのデータをチェックし、最後にデータまたはエラーを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
なぜ例外を使用しないのですか? – georg
これは、json形式の適切なメッセージがないと内部サーバーエラーを返すためです。 FacebookのAPIスタイルを考える。 – Ryan
@ thg435と私は親切に同意します。私にはtry ... exceptはあなたの「方法」をきれいにするだろうと思う。エラー処理ブロックを "except"ブロックに移動するだけで、エラーメッセージが返されます。これはAjax呼び出しでDjangoでやります。また、私はFlaskの経験はありませんが、これがRESTful(ish)APIであればそれはあなたが "GET"に行くので、適切なステータスコードを返すべきであると思われます。物事が大丈夫なら200。または、4XXまたは500(根本的な問題の内容に応じて)。 –