首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gqlgen + go gin的自定义错误状态代码

使用gqlgen + go gin的自定义错误状态代码
EN

Stack Overflow用户
提问于 2020-09-23 16:48:59
回答 1查看 1.6K关注 0票数 1

最近,我一直在将GO REST更新为graphQl API,并且遇到了无法用gqlgen自定义状态代码的问题。

我得到了回应

标头

代码语言:javascript
复制
Status Code: 200 OK
代码语言:javascript
复制
{ 
data: null,
errors: [
  {message: "Unauthorized access", path: ["..."]}
]
}

预期报头

代码语言:javascript
复制
Status Code: 401 UNAUTHORISED

任何帮助都是非常感激的!

EN

回答 1

Stack Overflow用户

发布于 2020-09-24 07:46:16

假设您有一个类似于以下内容的gqlgen解析器:

代码语言:javascript
复制
func (r *queryResolver) SecretItems(ctx context.Context, userID string,
    password string) ([]SecretItems, error) {
        // ...
        if !isAuthorized(userID, password) {
                return nil, errors.New("Unauthorized access")
        }
        // ...
}

然后,描述的行为是预期的。错误应作为响应主体的一部分返回。

GraphQL与运输无关。虽然它通常是通过HTTP提供的,但也可以通过其他客户端-服务器协议提供服务。处理响应体中的错误不需要对协议进行假设。因此,您不应该依赖HTTP状态代码。

处理响应体中的错误还有另一个优点:假设一个请求包含多个查询。有的成功了,有的失败了。然后,响应可以包含data下成功查询的结果和与errors下失败的查询相关的错误。

参考文献:

您希望获得401状态代码的可能原因

gqlgen 认证文档包含一个返回401状态代码的示例。

为什么?这发生在用作chi http服务器上的中间件的http处理程序中。401状态代码不会由GraphQL解析器返回。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64032675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档