0

ボトルを使用して、JSON のみを出力する HTTP エンドポイントを公開しています。

現在スローされているエラー: {'error': %s, 'error_message': %s, 'status_code': #}

だから私が持っているすべてのエンドポイントデコレータ機能で:

try:
    someObj = <stuff>
except <MyCustomErrors> as e:
    response.status = e.response.pop('status_code', 500)
    return e.response

response.status = someObj.response.pop('status_code', 200)

return someObj.response

しかし、例外をまとめて使用することを簡単に避けることができたので、オーバーヘッドが削減された、より簡潔で DRYer なエンドポイント コードが得られました。

ただし、欠点もあります。他の開発者は、出力形式を理解するために少なくとも 1 回はコードを読む (または実行する) 必要があります。

ドキュメントはここで機能します。しかし、このセットアップ全体が悪い習慣ですか?

4

1 に答える 1

0

その間、私はこの貧弱な代用品を書きました:

# Not a decorator because I can't work out how to give `@route(apply=)` func args
def error_else_response(init_with):
    try:
        result = init_with(**request.query)
    except <CustomError> as e:
        response.status = e.msg.pop('status_code')
        return e.msg

    response.status = result.response.pop('status_code')

    return result.response


@route('/augment')
def augment():
    return error_else_response(<CustomClass>)
于 2013-09-22T13:01:51.050 に答える