在Ruby中使用Graphql的错误处理
首先
最近我正在使用graphql-ruby实现API。
因此,我正在寻找有关在graphql中处理错误的最佳实践。
因为我才刚刚开始,所以我正在征集更好的方法!请留下你的评论。
错误分类 de
在开始实施错误处理之前,先介绍一些错误的种类。
由于以下文章非常易懂且简明扼要,因此我参考了它。
在Rails应用程序中,错误处理(异常设计)的思考方式
在这里,将其分为两类:异常情况和准异常情况。
-
- 異常系:nwエラーや、プログラムのエラー(システムエラー)
- 準異常系:作り手が予期できるエラー(業務エラー)
对于这两种错误,有以下要求。
-
- 異常系:フロント側でテンプレートメッセージを表示 & 開発者に通知
- 準異常系:エラー内容や回避方法をフロント側(この辺りは要件によって変わってくるかもしれません)
肝脏是,异常情况是显示固定模板的消息,而准异常情况是通过API发送消息。如何实现这一要求是核心问题。
GraphQL-ruby的规范。
在graphql-ruby中,如果出现错误,将返回一个以”error”作为key的json。
"errors": [
{
"message": "error message",
"locations": [],
"extensions": {
"code": "ERROR_CODE"
}
}
]
这个错误消息主要是在接口中出现错误时发生的。
例如,在前端传递参数时包含null值等情况。
可以通过直接编写以下代码来产生类似的错误。
raise GraphQL::ExecutionError.new('error message', extensions: {code: "ERROR_CODE"})
实施
从上述规范中可以得出,异常情况下错误会作为返回值返回。
那么关于次异常情况呢?次异常情况的要求如下所示。
-
- 画面に表示するエラーメッセージを渡す
- フロントが準異常系エラーと判断できる
首要的条件是能够通过上述的GraphQL错误来引发错误消息传递,这样就可以了。然而,仅仅是这样的话,前端无法区分异常的错误。
于是我决定按照以下方式自定义JSON。
raise GraphQL::ExecutionError.new('error message', extensions: {customCode: "ERROR_CODE"})
代码->自定义代码。如果在前端存在自定义代码作为键,则直接显示错误消息。否则,显示模板消息,以区分异常情况和准异常情况的处理。
请参考下列资料
用于GraphQL的Ruby官方库
在GraphQL中处理错误的方法