在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中处理错误的方法

bannerAds