繁体   English   中英

将业务层错误与API错误分开

[英]Separating Business Layer Errors from API errors

我知道这个标题太可怕了。 我在这里的标题太糟糕了。

我想知道当错误可能在应用程序内部引发时,在webapi中呈现统一错误响应的最佳方法是什么。

应用程序中的错误不了解Web层(也不应该知道),因此Web层如何将myapp.PermissionError分为403, json.DecodeError分为400, myapp.driver.InvalidValue分为500等

我有一些想法,但我不是其中的任何一个。

(如摘要所示,这是Linux上的python应用)

  1. 使用很多except块来匹配我想要的异常类型。 这是我目前正在执行的操作,但是它变得越来越笨拙(我已经达到8岁了,还有很多工作要做)。

     try business.DoIt() except DecodingError: respond(400) except PermissionError: response(403) ...etc... 
  2. 创建异常类型的映射或列表,并将它们映射到响应代码。 最后,这似乎并不比(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 
  3. 在提供响应代码的每个异常类中添加一个接口,但是我不喜欢这样,因为这样异常会携带特定于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM