如何解决使用gqlgen + go gin的自定义错误状态代码
最近我已经将我的GO REST API更新为graphQl API's,但遇到了无法使用gqlgen自定义状态代码的问题。
我得到的答复
标题
$: v=$( echo "dGVzdA==" | base64 -d )
$: my_array=( $( for(( i=0; i<${#v}; i++ )); do echo "${v:i:1}"; done ) )
$: echo ${my_array[2]}
s
base64
期望的标题
Status Code: 200 OK
任何帮助都会非常感激!
解决方法
假设您有一个类似于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
docs on
authentication包含一个示例
返回401状态代码的地方。
为什么?这发生在用作http服务器上的中间件的http处理程序中。 GraphQL解析器返回的401状态代码 not 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。