我正在尝试重构一些用于处理端点的代码,而我一直在努力获得良好的设计(也很容易测试)。
让我说我有这个端点基类:
class BaseResource(flask.Resource):
def dispatch_request(self, *args, **kwargs):
try:
with memory_logged_scope(), time_logged_scope():
return super(BaseResource, self).dispatch_request(*args, **kwargs)
except Exception as e:
handle_endpoint_error(e, self.__class__.__name__)
提供日志记录功能和时间。
某些派生类将是:
class DerivedResource(BaseResource):
def post(self):
do_some_logic...
此外,我有一些代码“包装”(不知道确切的单词)一个端点,可以说已经发送了一个文件,因此该代码可以执行以下操作:
file_sent = request.files[0]
temp_file = write_to_temp_file(file_sent)
try:
call somehow to the endpoint logic
finally:
close(file_sent, temp_file)
像这个功能一样,我还有更多的“包装器”。 我不想在端点代码上显式地编写此代码,以便我可以轻松对其进行测试。
我看到了@ app.before_request,但是所有请求都会发生这种情况,我可以在一个请求上写它以“将其列入白名单”。
对于这种情况的设计建议,我将感到非常高兴,谢谢!