
Paul Umbers in his Clojure RESTful API tutorial采用的一种方法是让异常自然发生,并允许它们一直冒泡到专门将异常转换为特定http状态代码的中间件.
基本上,DB约束会抛出自己的特定错误(例如PsqlException),模型验证器会抛出另一种类型,全部都在代码400下.通用异常处理程序将捕获未知异常并返回500代码.
一些想法:
>我们可以做得更好吗?出于某些特定原因,这是错误的设计吗?
>许多人会声称处理通用异常类型是不好的做法.这样的争论也可以在这里提出吗?
谢谢!
解决方法 我不是这个领域的专家,但由于没有其他人权衡,我会给我两分钱.你联系的解决方案对我来说似乎是一种合理的方法.鉴于处理程序与异常中间件之间的少量协作,您还可以使用在呈现错误响应时可能有用的其他信息来标记异常,而不会将错误处理的实际细节蔓延到应用程序逻辑中.
因此,对于您的第一个问题:您可以根据给定的特定用例更多地定制系统,但作为通用错误处理方案,这似乎相当不错.没有任何关于它的东西突然出现在我身上,直接“错误”.
对于你的第二个问题:当你知道你正在寻找一个更具体的异常类型时捕获通用异常类型是不好的做法,因为你想避免混淆预期和意外错误.如果你知道在执行bundle查找时有可能出现MissingResourceException,你就不希望你的异常处理程序意外地从你代码中的实际BUG中掩盖NullPointerException.
但是,在这种情况下,我认为捕获通用的Exception类型是正确的做法.这个顶级处理程序的目标不是处理像MissingResourceException这样的特定条件,而是捕获应用程序逻辑没有的任何内容,并将其转换为对API客户端有意义的错误信息.这是您的实现与另一端的消费者之间的最后一道防线.
总结以上是内存溢出为你收集整理的web-services – 在Clojure Ring REST-like API中处理错误?全部内容,希望文章能够帮你解决web-services – 在Clojure Ring REST-like API中处理错误?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)