最近,我一直在将GO REST更新为graphQl API,并且遇到了无法用gqlgen自定义状态代码的问题。
我得到了回应
标头
Status Code: 200 OK{
data: null,
errors: [
{message: "Unauthorized access", path: ["..."]}
]
}预期报头
Status Code: 401 UNAUTHORISED任何帮助都是非常感激的!
发布于 2020-09-24 07:46:16
假设您有一个类似于以下内容的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提供的,但也可以通过其他客户端-服务器协议提供服务。处理响应体中的错误不需要对协议进行假设。因此,您不应该依赖HTTP状态代码。
处理响应体中的错误还有另一个优点:假设一个请求包含多个查询。有的成功了,有的失败了。然后,响应可以包含data下成功查询的结果和与errors下失败的查询相关的错误。
参考文献:
您希望获得401状态代码的可能原因
gqlgen 认证文档包含一个返回401状态代码的示例。
为什么?这发生在用作chi http服务器上的中间件的http处理程序中。401状态代码不会由GraphQL解析器返回。
https://stackoverflow.com/questions/64032675
复制相似问题