Dingo API中的通用自定义错误响应

时间:2017-11-16 14:55:16

标签: lumen dingo-api

我正在尝试抽象我的所有错误响应以匹配我的API文档,以便使用Lumen和Dingo API包开发一个优秀,实用的API:

  

JSON错误正文应该为开发人员提供一些东西 - 一个有用的错误消息,一个独特的错误代码(可以在文档中查找更多详细信息)以及可能的详细描述。这样的JSON输出表示如下所示:

{
    "code" : 1234,
    "message" : "Something bad happened :(",
    "description" : "More details about the error here"
}

目前,Dingo API仅向我提供以下响应:

{
    "message": "Could not create new user.",
    "status_code": 422
}

1。如何在所有错误响应中添加额外的字段,例如" description"和"代码"

configuration page显示了在bootstrap / app.php文件中设置的错误格式,但我想知道如何添加可能的新标记并使用它们。

我知道可以使用自定义异常并返回新的响应:

app('Dingo\Api\Exception\Handler')->register(function (\App\Exceptions\ValidationException $exception) {
    return Response::make(['code' => $exception->getCode(), 'message' => $exception->getMessage()], 401);
});

我想知道这是否是这样做的最佳做法,但是在所有例外情况下(包括Dingo / Symfony的默认例外),例如使用配置参数: - &gt; setErrorFormat([]); < / p>

2。更改验证错误格式

  

PUT,PATCH和POST请求的验证错误需要字段细分。最好使用固定的顶级错误代码进行验证失败,并在其他错误字段中提供详细错误,如下所示:

{
    "code" : 1024,
    "message" : "Validation Failed",
    "errors" : [
    {
        "code" : 5432,
        "field" : "first_name",
        "message" : "First name cannot have fancy characters"
    },
    {
        "code" : 5622,
        "field" : "password",
        "message" : "Password cannot be blank"
    }
  ]
}

目前,Dingo API以下列格式为我提供了JSON:

{
    "message": "Could not create new user.",
    "status_code": 422,
    "errors": {
        "username": [
            "The username field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}

0 个答案:

没有答案