问题描述
最近我已经将我的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 。