GraphQL 是一种用于构建 API 的查询语言,它允许客户端指定需要返回的数据,而不是由服务器来决定。由于 GraphQL 的灵活性和可扩展性,它已经成为前端开发的热门技术之一。然而,在使用 GraphQL 时,我们可能会遇到查询错误和验证错误,这些错误可能会导致客户端的应用程序崩溃或出现意外行为。在本文中,我们将探讨如何正确的在 GraphQL 中处理这些错误,并提供示例代码和指导意义。
查询错误
在 GraphQL 中,查询错误可能会导致服务器返回错误的响应,这可能是由于查询参数不正确或服务器内部错误造成的。以下是一些处理查询错误的最佳实践:
1. 错误处理
在 GraphQL 中,我们可以使用 try-catch
或 Promise.catch()
来捕获查询错误。例如:
try { const result = await graphql(schema, query); console.log(result); } catch (error) { console.error(error); }
或者
graphql(schema, query) .then((result) => { console.log(result); }) .catch((error) => { console.error(error); });
2. 错误格式
当服务器返回错误响应时,我们应该尽可能提供有意义的错误信息。GraphQL 规范定义了一种标准错误格式,如下所示:
{ "errors": [ { "message": "错误消息" } ] }
在实现 GraphQL API 时,我们应该尽可能使用这种标准错误格式。
3. HTTP 状态码
当服务器返回错误响应时,我们应该使用适当的 HTTP 状态码来表示错误类型。例如:
- 400 Bad Request:查询参数不正确
- 401 Unauthorized:未授权访问
- 403 Forbidden:禁止访问
- 404 Not Found:查询的资源不存在
- 500 Internal Server Error:服务器内部错误
验证错误
在 GraphQL 中,验证错误可能会导致查询失败,这可能是由于查询参数不合法或不符合预期的规则造成的。以下是一些处理验证错误的最佳实践:
1. 自定义验证规则
GraphQL 允许我们通过自定义验证规则来验证查询参数是否符合预期的规则。例如:
-- -------------------- ---- ------- ----- -------------------- - --------- -- - ------ - ----------- - ----- --------- - ---------------- -- ---------- --- ----------- - -------------------- --- ----------------------------- ------- -- - -- -- -- ----- ------ - ------------- ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------- --------- ------- - --- ----- ----- - - - -------- ---- - -- ---- ----- -------- - - -- --------------- ------ ----- ----- ----- ----- --------------------------- -------- -- - -------------------- - --
在上面的示例中,我们定义了一个自定义验证规则,它检查查询中是否包含密码字段,并在发现错误时报告错误。
2. GraphQL 错误
当验证错误发生时,我们应该使用 GraphQLError
对象来表示错误类型。例如:
-- -------------------- ---- ------- ----- ------ - ------------- ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------- --------- ------- - --- ----- ----- - - - -------- ---- - -- ---- ----- -------- - - -- --------------- -------------------- -- - -- --------------- - ----- ----- - ----------------- -- -------------------- ---------- ---------------- - ------------------------- ------- - ---- - --------------------- ------- - - ---- - -------------------- - ---
在上面的示例中,我们使用 result.errors
来检查是否有验证错误发生,如果有则使用 GraphQLError
对象来表示错误类型。
结论
在本文中,我们探讨了如何正确的在 GraphQL 中处理查询错误和验证错误,并提供了示例代码和指导意义。在实现 GraphQL API 时,我们应该遵循这些最佳实践,以确保客户端的应用程序能够正确的处理错误,并提供有意义的错误信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676187a8856ee0c1d4f97062