[英]Separating Business Layer Errors from API errors
我知道这个标题太可怕了。 我在这里的标题太糟糕了。
我想知道当错误可能在应用程序内部引发时,在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很难看。 无需处理该级别的错误行为,只需抛出异常即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.