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