gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:38:53 27 4
gpt4 key购买 nike

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

我收到的回复

标题

Status Code: 200 OK
{ 
data: null,
errors: [
{message: "Unauthorized access", path: ["..."]}
]
}

预期标题

Status Code: 401 UNAUTHORISED

任何帮助将非常感激!

最佳答案

假设您有一个与此类似的 gqlgen 解析器:

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 提供服务,但它可能是也通过其他客户端-服务器协议(protocol)提供服务。处理错误响应主体不需要对协议(protocol)进行任何假设。因此,你不应该依赖 HTTP 状态代码。

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

引用文献:

您期望收到 401 状态代码的可能原因

gqlgen docs onauthentication包含一个例子其中返回 401 状态代码。

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

关于go - 使用 gqlgen + go gin 自定义错误状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com