gpt4 book ai didi

web-services - 在 Clojure Ring REST-like API 中处理错误?

转载 作者:行者123 更新时间:2023-12-01 05:21:28 24 4
gpt4 key购买 nike

我想知道人们认为使用 Ring 库在 Clojure 中编写的 REST 风格的 api 中处理错误的好方法是什么。

Paul Umbers in his Clojure RESTful API tutorial 采取的一种方法是让异常自然发生,并允许它们一直冒泡到专门将异常转换为特定 HTTP 状态代码的中间件。

基本上,DB 约束会抛出它们自己的特定错误(例如 PSQLException),模型验证器会抛出另一种类型,都在代码 400 伞下。未知异常将被通用异常处理程序捕获并返回 500 代码。

一些想法:

  • 我们能做得更好吗?由于某些特定原因,这是错误的设计吗?
  • 许多人会声称处理通用 Exception 类型是不好的做法。在这里也可以提出这样的论点吗?

  • 谢谢!

    最佳答案

    我绝不是这个特定领域的专家,但由于没有其他人参与其中,我会给我两分钱。

    您链接到的解决方案对我来说似乎是一种合理的方法。考虑到处理程序和异常中间件之间的少量合作,您还可以使用在呈现错误响应时可能有用的附加信息来标记异常,而无需将错误处理的实际细节渗透到您的应用程序逻辑中。

    所以对于您的第一个问题:您可以根据给定的特定用例更多地定制系统,但作为通用错误处理方案,这似乎非常好。没有什么能让我直截了本地说“错误”。

    关于你的第二个问题:捕捉通用 Exception 是不好的做法当您知道要查找更具体的错误时,请键入,因为您希望避免将预期错误和意外错误混为一谈。如果您知道有可能是 MissingResourceException当您进行包查找时,您不希望您的异常处理程序意外地埋葬 NullPointerException从代码中的实际错误冒泡。

    不过,在这种情况下,我认为捕获泛型 Exception type 是正确的做法。而不是像 MissingResourceException 那样处理特定条件,此顶级处理程序的目标是捕获应用程序逻辑没有的任何内容,并将其转换为对 API 客户端有意义的错误信息。这是您的实现和另一端的消费者之间的最后一道防线。

    关于web-services - 在 Clojure Ring REST-like API 中处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389382/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com