graphql - 带有状态码的 GraphQL 是正确的解决方案吗?
问题描述
上一页 当我使用 RestAPI 制作 API 服务器时,我返回带有 HTTP 状态码的数据。
因此,前端从服务器接收状态码,它确定请求是成功还是失败。
我知道graphQL有错误字段,可以参考它来解决这个问题。
但我想更改发送给客户端的响应状态代码。
这种方式是正确且稳定的方式吗?
或者,当使用graphQL时,不要更改状态码,只通过错误字段确定是标准方式吗?
任何建议,将不胜感激 :)
谢谢。
解决方案
[...] 不更改状态代码,仅通过错误字段确定是标准方式吗?
YES 不使用状态码管理错误,它们与Http相关,GraphQL 旨在与协议/框架无关,因此您需要的一切都应该在输出中。
正如您所说errors
,您的回复中可能有一个字段:
响应中的错误条目是一个非空错误列表,其中每个错误都是一个映射。
如果在请求的操作期间没有遇到错误,则错误条目不应出现在结果中。
规范指出,errors
字段条目可以有一个名为的字段extensions
:
GraphQL 服务可能会通过键扩展为错误提供额外的条目。此条目(如果设置)必须有一个映射作为其值。此条目是为实现者保留的,可以在他们认为合适的情况下向错误添加其他信息,并且对其内容没有其他限制。
使用该extensions
字段,您可以将自定义机器可读信息添加到错误中,例如此处的关键代码。
{
"errors": [
{
"message": "Name for character with ID 1002 could not be fetched.",
"locations": [ { "line": 6, "column": 7 } ],
"path": [ "hero", "heroFriends", 1, "name" ],
"extensions": {
"code": "CAN_NOT_FETCH_BY_ID",
"timestamp": "Fri Feb 9 14:33:09 UTC 2018"
}
}
]
}
阿波罗预言
为了使错误管理更容易,我创建了一个 codegen CLI,它为服务器生成可抛出的错误类并促进客户端的错误处理。
推荐阅读
- plugins - 如何按规则将 Thunderbird 电子邮件导出到 .eml 文件到文件系统文件夹?
- python - 为什么在属性中执行逻辑而不是在 __init__ 中执行逻辑时会收到 TypeError?
- python - ParserError:为 csv 标记数据时出错
- powerbi - Power Query List.Generate 性能
- excel - SendKeys 函数正在跳过它应该输入的值中的括号
- python - 从python中的大型json文件中获取可读文本
- excel - 询问文件路径并从单个工作表中的多个工作簿复制特定数据
- javascript - 过滤所有键的数组的javascript对象
- php - htaccess 不调用文件 config.php
- android - 在全新安装适用于 Android 和 IOS 的最新 Ubuntu LTS 时安装 Cordova