我知道,这个头衔很糟糕;我对这里的头衔很糟糕。你知道吗
我想知道,当错误可能在应用程序内部引发时,在webapi中呈现统一错误响应的最佳方式是什么。你知道吗
应用程序中深层的错误对web层一无所知(也不应该知道),因此web层如何将myapp.PermissionError
分类为403,json.DecodeError
分类为400,myapp.driver.InvalidValue
分类为500,等等
我有一些想法,但我不太喜欢。你知道吗
(正如片段可能暗示的,这是linux上的python应用程序)
使用大量的except
块来匹配我想要的异常类型。这是我目前正在做的,但它越来越笨拙(我已经到了8岁,还有很多要去)。你知道吗
try
business.DoIt()
except DecodingError:
respond(400)
except PermissionError:
response(403)
...etc...
创建异常类型的映射或列表,并将它们映射到响应代码。这看起来并没有比(1)好多少,但是它确实清理了代码。你知道吗
error_map = [(DecodingError, 400), (PermissionError, 403)]
try:
DoIt()
except Exception, exc:
for type, code in error_map:
if isinstance(exc, type):
response(code)
return
为每个提供响应代码的异常类添加一个接口,但我不喜欢这样,因为这样异常就携带了特定于web层的信息(即使它们生活在一个根本不关心web层的驱动程序中)。不过,我确实喜欢web错误响应的“自动”方式。你知道吗
class PermissionError(Exception):
web_status_code = 403
try:
Doit()
except:
response(exc.web_status_code)
我喜欢选项1。可能有点冗长,但也很清楚。你知道吗
选项2将抛出异常的点与决定如何处理异常的点分开。在现实中,这可能不会是一个太大的问题,但如果你不需要的话,为什么要把它分开呢?你知道吗
我同意选项3是相当丑陋的。无需处理该级别的错误行为,只需抛出异常即可。你知道吗
相关问题 更多 >
编程相关推荐