对于Mulesoft中的大多数错误,没有定义错误代码。如果它不知道,骡子会平面打印MULE_ERROR--2
。而不是这个我想放入我自己的错误代码,它将从DB中获取并包含在异常有效负载中。在此之后,应将异常有效负载发送到处理程序流,以便根据错误代码重新提交。因此,在错误处理部分流程中,我需要有多个组件。
尝试自定义异常策略,捕获异常策略,使用Java组件和流程引用,但它们都没有工作。
另外,我为此构建了一个虚拟代码(没有获取错误代码)来放置我自己的自定义错误消息和我注意到的是,它抛出相同的错误两次,一次默认为第一次,当我第一次把我的错误消息和抛出错误。为了压制这个,我把
<AsyncLogger name="org.mule.exception.CatchMessagingExceptionStrategy" level="FATAL"/>
log4j2.xml
中的。
这会导致任何问题吗?
答案 0 :(得分:0)
您始终可以定义自己的错误并对其进行自定义。请点击以下链接获取更多信息,
http://blogs.mulesoft.com/dev/api-dev/api-best-practices-response-handling/
以下是相同的内容:
使用HTTP状态代码
最常被滥用的HTTP状态代码之一是200 - 确定或请求成功。令人惊讶的是,您会发现许多API在创建对象时使用200(状态代码201),或者甚至在响应失败时:
invalid200
在上述情况下,如果开发人员完全依赖状态代码来查看请求是否成功,程序将继续没有意识到请求失败,并且它做错了。如果程序中存在该记录的依赖关系,则这一点尤为重要。相反,要使用的正确状态代码为400表示“错误请求”。
通过使用正确的状态代码,开发人员可以快速查看应用程序发生的情况,并对错误进行“快速检查”,而不必依赖于正文的响应。
您可以在HTTP / 1.1 RFC中找到完整的状态代码列表,但只是为了快速参考,以下是一些最常用的RESTful API状态代码:
200好
201创建
304未修改
400错误请求
401未授权
403 Forbidden
404页面/未找到资源
405方法不允许
415不支持的媒体类型
500内部服务器错误
当然,如果您觉得自己很有创意,可以随时利用状态代码: 418我是茶壶
重要的是要注意Twitter的着名的420状态代码 - Enhance Your Calm,并不是真正的标准化响应,你可能只需坚持使用状态代码429代替太多的请求。
使用描述性错误消息 同样,状态代码可帮助开发人员快速识别其呼叫结果,从而实现快速成功和失败检查。但是如果发生故障,确保开发人员了解呼叫失败的原因也很重要。这对于API的初始集成尤其重要(请记住,集成API越容易,人们使用它的可能性越大),以及出现错误或其他问题时的一般维护。
您希望您的错误正文形成良好,并且具有描述性。这意味着告诉开发人员发生了什么,为什么会发生,最重要的是 - 如何解决它。您应该避免使用通用或非描述性错误消息,例如:
redx您的请求无法完成
redx发生错误
redx无效请求
通用错误消息是API集成的最大障碍之一,因为开发人员可能会花费数小时试图弄清楚调用失败的原因,甚至错误解释错误消息的意图。最终,如果他们无法弄明白,他们可能会完全停止尝试。
例如,我用一个API努力弄清楚为什么我得到一个“不允许此调用”错误响应的约30分钟。在反复重新格式化我的请求并尝试不同的方法之后,我终于打电话给支持(非常沮丧的情绪)只是发现它是指我的访问令牌,由于我无法复制和粘贴,所以恰好是一封信。这样的事情。
同样地,“无效访问令牌”响应会让我省下很多麻烦,感觉就像一个完全白痴一样在支持的线上。它还可以节省宝贵的时间来处理真正的错误,而不是尝试解决最基本的步骤(顺便说一句 - 每当我收到错误时,密钥和令牌都是我现在检查的第一件事。)
以下是一些描述性错误消息的示例:
greencheckmark您的API密钥无效,请在http:// ...
生成有效的API密钥greencheckmark此操作需要用户ID。在http:// ...
了解更多信息greencheckmark您的JSON未正确形成。请参阅示例JSON:http:// ...
但你可以走得更远,记住 - 你会想告诉开发人员发生了什么,为什么会发生,以及如何解决它。最好的方法之一是使用标准化的错误格式进行响应,该格式返回代码(用于支持参考),发生的事情的描述以及指向相应文档的链接,以便他们可以了解更多/修复它: / p>
{ “错误”:{ “code”:“e3526”, “message”:“缺少UserID”, “description”:“用户ID是编辑用户所必需的。”, “link”:“http://docs.mysite.com/errors/e3526/” } }
在支持和开发方面,通过这样做,您还可以跟踪这些页面的点击,以查看哪些区域对您的用户来说更加麻烦 - 允许您提供更好的文档/构建更好的API。